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        
045        public CxfSeComponent() {
046            
047        }
048        
049        /**
050         * @return the endpoints
051         */
052        public CxfSeEndpoint[] getEndpoints() {
053            return endpoints;
054        }
055    
056        /**
057         * @param endpoints the endpoints to set
058         * @org.apache.xbean.Property description="the endpoints hosted by a component"
059         */
060        public void setEndpoints(CxfSeEndpoint[] endpoints) {
061            this.endpoints = endpoints;
062        }
063    
064        @Override
065        protected List getConfiguredEndpoints() {
066            return asList(endpoints);
067        }
068    
069        @Override
070        protected Class[] getEndpointClasses() {
071            return new Class[] {CxfSeEndpoint.class };
072        }
073        
074        @Override
075        protected void doInit() throws Exception {
076            if (bus == null) {
077                bus = new SpringBusFactory().createBus(CXF_CONFIG);
078            }
079            super.doInit();
080        }
081        
082        @Override
083        protected void doShutDown() throws Exception {
084            // Bus should no longer be the thread default since the component's threads will end now
085            if (bus != null) {
086                BusFactory.setThreadDefaultBus(null);
087            }
088            super.doShutDown();
089        }
090        
091        public Bus getBus() {
092            return bus;
093        }
094    
095         /**
096         * @param bus the bus to set
097         * @org.apache.xbean.Property description="the CXF bus"
098         */
099       public void setBus(Bus bus) {
100            this.bus = bus;
101        }
102    }