Author: ningjiang
Date: Tue Nov 24 13:50:44 2009
New Revision: 883695

URL: http://svn.apache.org/viewvc?rev=883695&view=rev
Log:
CAMEL-2216 camel-cxf should not relay on the default Bus

Modified:
    
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
    
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
    
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
    
camel/branches/camel-1.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerStartTwiceTest.java

Modified: 
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java?rev=883695&r1=883694&r2=883695&view=diff
==============================================================================
--- 
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
 (original)
+++ 
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
 Tue Nov 24 13:50:44 2009
@@ -41,23 +41,9 @@
     public CxfConsumer(CxfEndpoint endpoint, Processor processor) throws 
Exception {
 
         super(endpoint, processor);
-        Bus bus = null;
         this.endpoint = endpoint;
         boolean isWebServiceProvider = false;
-        if (endpoint.getApplicationContext() != null) {            
-            if (endpoint.getCxfEndpointBean() != null) {
-                bus = endpoint.getCxfEndpointBean().getBus();
-            } else {
-                SpringBusFactory busFactory = new 
SpringBusFactory(endpoint.getApplicationContext());
-                bus = busFactory.createBus();
-            }
-            if (CxfEndpointUtils.getSetDefaultBus(endpoint)) {
-                BusFactory.setDefaultBus(bus);
-            }
-        } else {
-            // now we just use the default bus here
-            bus = BusFactory.getDefaultBus();
-        }
+       
         
         Class serviceClass = CxfEndpointUtils.getServiceClass(endpoint);
         ServerFactoryBean svrBean = 
CxfEndpointUtils.getServerFactoryBean(serviceClass);
@@ -98,7 +84,7 @@
                 //features.add(new LoggingFeature());
             }
         }
-        svrBean.setBus(bus);
+        svrBean.setBus(endpoint.getBus());
         svrBean.setStart(false);
         server = svrBean.create();
 

Modified: 
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java?rev=883695&r1=883694&r2=883695&view=diff
==============================================================================
--- 
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
 (original)
+++ 
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
 Tue Nov 24 13:50:44 2009
@@ -21,6 +21,7 @@
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import org.apache.camel.Consumer;
 import org.apache.camel.ExchangePattern;
@@ -30,10 +31,14 @@
 import org.apache.camel.component.cxf.headers.MessageHeadersRelay;
 import org.apache.camel.component.cxf.headers.SoapMessageHeadersRelay;
 import org.apache.camel.component.cxf.spring.CxfEndpointBean;
+import org.apache.camel.component.cxf.util.CxfEndpointUtils;
 import org.apache.camel.impl.DefaultEndpoint;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.bus.spring.SpringBusFactory;
 import org.apache.cxf.configuration.spring.ConfigurerImpl;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.message.Message;
@@ -61,6 +66,8 @@
     private boolean isSpringContextEndpoint;
     private boolean inOut = true;
     private boolean relayHeaders = true;
+    private Bus bus;
+    private AtomicBoolean getBusHasBeenCalled = new AtomicBoolean(false);
 
     private Boolean isSetDefaultBus;
     private ConfigurerImpl configurer;
@@ -109,6 +116,33 @@
     public CxfExchange createExchange(Message inMessage) {
         return new CxfExchange(getCamelContext(), getExchangePattern(), 
inMessage);
     }
+    
+    public Bus getBus() {
+        if (bus == null) {
+            bus = doGetBus();
+        }
+        
+        if (!getBusHasBeenCalled.getAndSet(true) && 
CxfEndpointUtils.getSetDefaultBus(this)) {
+            BusFactory.setDefaultBus(bus);
+        }
+        return bus;
+    }
+    
+    public Bus doGetBus() {
+        Bus bus = null;
+        if (getApplicationContext() != null) {            
+            if (getCxfEndpointBean() != null) {
+                bus = getCxfEndpointBean().getBus();
+            } else {
+                SpringBusFactory busFactory = new 
SpringBusFactory(getApplicationContext());
+                bus = busFactory.createBus();
+            }
+        } else {
+            // now we just create a new bus 
+            bus = SpringBusFactory.newInstance().createBus();
+        }
+        return bus;
+    }
 
     public String getDataFormat() {
         return dataFormat;

Modified: 
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java?rev=883695&r1=883694&r2=883695&view=diff
==============================================================================
--- 
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
 (original)
+++ 
camel/branches/camel-1.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
 Tue Nov 24 13:50:44 2009
@@ -95,22 +95,6 @@
 
     // If cfb is null, we will try to find the right cfb to use.
     private Client createClientFromClientFactoryBean(ClientProxyFactoryBean 
cfb) throws Exception {
-        Bus bus = null;
-        if (endpoint.getApplicationContext() != null) {            
-            if (endpoint.getCxfEndpointBean() != null) {
-                bus = endpoint.getCxfEndpointBean().getBus();                
-            } else {
-                SpringBusFactory busFactory = new 
SpringBusFactory(endpoint.getApplicationContext());
-                bus = busFactory.createBus();
-            }
-            if (CxfEndpointUtils.getSetDefaultBus(endpoint)) {
-                BusFactory.setDefaultBus(bus);
-            }
-        } else {
-            // now we just use the default bus here
-            bus = BusFactory.getDefaultBus();
-        }
-        
         Class serviceClass = CxfEndpointUtils.getServiceClass(endpoint);
         // We need to choose the right front end to create the 
clientFactoryBean        
         if (cfb == null) {
@@ -147,7 +131,7 @@
             cfb.getFeatures().add(new PayLoadDataFormatFeature());
         }
         
-        cfb.setBus(bus);
+        cfb.setBus(endpoint.getBus());
         return 
((ClientProxy)Proxy.getInvocationHandler(cfb.create())).getClient();
     }
 

Modified: 
camel/branches/camel-1.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerStartTwiceTest.java
URL: 
http://svn.apache.org/viewvc/camel/branches/camel-1.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerStartTwiceTest.java?rev=883695&r1=883694&r2=883695&view=diff
==============================================================================
--- 
camel/branches/camel-1.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerStartTwiceTest.java
 (original)
+++ 
camel/branches/camel-1.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerStartTwiceTest.java
 Tue Nov 24 13:50:44 2009
@@ -53,7 +53,6 @@
             context.start();
             fail("Expect an exception here");
         } catch (Exception ex) {
-            ex.printStackTrace();
             assertTrue("Expect the exception message has a Soap errror", 
ex.getMessage().equals("Soap 1.1 endpoint already registered on address 
http://localhost:7070/test";));
             context.stop();
         }


Reply via email to