001    /*
002     * Licensed to the Apache Software Foundation (ASF) under one or more
003     * contributor license agreements.  See the NOTICE file distributed with
004     * this work for additional information regarding copyright ownership.
005     * The ASF licenses this file to You under the Apache License, Version 2.0
006     * (the "License"); you may not use this file except in compliance with
007     * the License.  You may obtain a copy of the License at
008     *
009     *      http://www.apache.org/licenses/LICENSE-2.0
010     *
011     * Unless required by applicable law or agreed to in writing, software
012     * distributed under the License is distributed on an "AS IS" BASIS,
013     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014     * See the License for the specific language governing permissions and
015     * limitations under the License.
016     */
017    package org.apache.servicemix.cxfse;
018    
019    import java.util.List;
020    
021    import org.apache.cxf.Bus;
022    import org.apache.cxf.BusFactory;
023    import org.apache.cxf.bus.spring.SpringBusFactory;
024    import org.apache.servicemix.common.DefaultComponent;
025    
026    /**
027     * 
028     * @author gnodet
029     * @org.apache.xbean.XBean element="component"  description="a component for hosting JAX-WS pojos. It is based on the CXF runtime."
030     */
031    public class CxfSeComponent extends DefaultComponent {
032    
033            public static final String JBI_TRANSPORT_ID = "http://cxf.apache.org/transports/jbi";
034            
035        private static final String[] CXF_CONFIG = new String[] {
036            "META-INF/cxf/cxf.xml",
037            "META-INF/cxf/cxf-extension-soap.xml",
038            "META-INF/cxf/transport/jbi/cxf-transport-jbi.xml",
039            "META-INF/cxf/binding/jbi/cxf-binding-jbi.xml"
040        };
041    
042        private CxfSeEndpoint[] endpoints;
043        private Bus bus;
044        private CxfSeConfiguration configuration = new CxfSeConfiguration();
045        private static Object componentRegistry;
046        
047        public CxfSeComponent() {
048            
049        }
050        
051        /**
052         * @return the endpoints
053         */
054        public CxfSeEndpoint[] getEndpoints() {
055            return endpoints;
056        }
057    
058        /**
059         * @param endpoints the endpoints to set
060         * @org.apache.xbean.Property description="the endpoints hosted by a component"
061         */
062        public void setEndpoints(CxfSeEndpoint[] endpoints) {
063            this.endpoints = endpoints;
064        }
065    
066        @Override
067        protected List getConfiguredEndpoints() {
068            return asList(endpoints);
069        }
070    
071        @Override
072        protected Class[] getEndpointClasses() {
073            return new Class[] {CxfSeEndpoint.class };
074        }
075        
076        @Override
077        protected void doInit() throws Exception {
078            //Load configuration
079            configuration.setRootDir(context.getWorkspaceRoot());
080            configuration.setComponentName(context.getComponentName());
081            configuration.load();
082            if (configuration.getBusCfg() != null && configuration.getBusCfg().length() > 0) {
083                CXF_CONFIG[0] = configuration.getBusCfg();
084            } 
085            if (bus == null) {
086                bus = new SpringBusFactory().createBus(CXF_CONFIG);
087            }
088            super.doInit();
089        }
090        
091        @Override
092        protected void doShutDown() throws Exception {
093            // Bus should no longer be the thread default since the component's threads will end now
094            if (bus != null) {
095                BusFactory.setThreadDefaultBus(null);
096            }
097            super.doShutDown();
098        }
099        
100        
101        public Bus getBus() {
102            return bus;
103        }
104    
105         /**
106         * @param bus the bus to set
107         * @org.apache.xbean.Property description="the CXF bus"
108         */
109       public void setBus(Bus bus) {
110            this.bus = bus;
111        }
112    
113        public void setComponentRegistry(Object componentRegistry) {
114            this.componentRegistry = componentRegistry;
115        }
116    
117        public static Object getComponentRegistry() {
118            return componentRegistry;
119        }
120    }