You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by ni...@apache.org on 2014/04/29 08:14:24 UTC

git commit: CAMEL-7401 Added continuationTimeout option to camel-cxf component

Repository: camel
Updated Branches:
  refs/heads/master d906885f5 -> 0a60bfdf1


CAMEL-7401 Added continuationTimeout option to camel-cxf component


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/0a60bfdf
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/0a60bfdf
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/0a60bfdf

Branch: refs/heads/master
Commit: 0a60bfdf1c977e66e4ac297faeb85d2558218f31
Parents: d906885
Author: Willem Jiang <wi...@gmail.com>
Authored: Tue Apr 29 14:12:14 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Tue Apr 29 14:12:54 2014 +0800

----------------------------------------------------------------------
 .../java/org/apache/camel/component/cxf/CxfConsumer.java |  7 ++++---
 .../java/org/apache/camel/component/cxf/CxfEndpoint.java | 11 +++++++++++
 .../apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java  | 11 +++++++++++
 .../apache/camel/component/cxf/jaxrs/CxfRsInvoker.java   |  7 +++----
 .../src/main/resources/schema/blueprint/camel-cxf.xsd    |  1 +
 .../camel-cxf/src/main/resources/schema/cxfEndpoint.xsd  |  1 +
 .../org/apache/camel/component/cxf/CxfEndpointTest.java  |  8 ++++++++
 .../camel/component/cxf/jaxrs/CxfRsEndpointTest.java     |  6 +++++-
 .../camel/component/cxf/spring/CxfEndpointBeanTest.java  |  3 ++-
 .../camel/component/cxf/spring/CxfEndpointBeans.xml      |  2 +-
 10 files changed, 47 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
index 7585b38..20f1209 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfConsumer.java
@@ -57,10 +57,11 @@ import org.slf4j.LoggerFactory;
 public class CxfConsumer extends DefaultConsumer {
     private static final Logger LOG = LoggerFactory.getLogger(CxfConsumer.class);
     private Server server;
+    private CxfEndpoint cxfEndpoint;
 
     public CxfConsumer(final CxfEndpoint endpoint, Processor processor) throws Exception {
         super(endpoint, processor);
-        
+        cxfEndpoint = endpoint;
         // create server
         ServerFactoryBean svrBean = endpoint.createServerFactoryBean();
         svrBean.setInvoker(new Invoker() {
@@ -86,9 +87,9 @@ public class CxfConsumer extends DefaultConsumer {
                         
                         // Now we don't set up the timeout value
                         LOG.trace("Suspending continuation of exchangeId: {}", camelExchange.getExchangeId());
-                        // TODO Support to set the timeout in case the Camel can't send the response back on time.
+                        
                         // The continuation could be called before the suspend is called
-                        continuation.suspend(0);
+                        continuation.suspend(cxfEndpoint.getContinuationTimeout());
 
                         // use the asynchronous API to process the exchange
                         getAsyncProcessor().process(camelExchange, new AsyncCallback() {

http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
index bde547d..2261c18 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfEndpoint.java
@@ -160,6 +160,9 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
     private Object serviceFactoryBean;
     private CxfEndpointConfigurer configurer;
     
+    // The continuation timeout value for CXF continuation to use
+    private long continuationTimeout = 30000;
+    
     // basic authentication option for the CXF client
     private String username;
     private String password;
@@ -1183,5 +1186,13 @@ public class CxfEndpoint extends DefaultEndpoint implements HeaderFilterStrategy
         this.configurer = configurer;
     }
 
+    public long getContinuationTimeout() {
+        return continuationTimeout;
+    }
+
+    public void setContinuationTimeout(long continuationTimeout) {
+        this.continuationTimeout = continuationTimeout;
+    }
+
     
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
index 8c3ff1b..ab0572d 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
@@ -90,6 +90,8 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
     private int loggingSizeLimit;
     private boolean skipFaultLogging;
     private BindingStyle bindingStyle = BindingStyle.Default;
+    // The continuation timeout value for CXF continuation to use
+    private long continuationTimeout = 30000;
    
     private boolean isSetDefaultBus;
     
@@ -489,6 +491,15 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
     }
 
 
+    public long getContinuationTimeout() {
+        return continuationTimeout;
+    }
+
+    public void setContinuationTimeout(long continuationTimeout) {
+        this.continuationTimeout = continuationTimeout;
+    }
+
+
     private static class InterceptorHolder extends AbstractBasicInterceptorProvider {
     }
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java
index 4f617a7..ec51874 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsInvoker.java
@@ -34,8 +34,8 @@ import org.slf4j.LoggerFactory;
 public class CxfRsInvoker extends JAXRSInvoker {
     private static final Logger LOG = LoggerFactory.getLogger(CxfRsInvoker.class);
     private static final String SUSPENED = "org.apache.camel.component.cxf.jaxrs.suspend";
-    private CxfRsConsumer cxfRsConsumer;
-    private CxfRsEndpoint endpoint;
+    private final CxfRsConsumer cxfRsConsumer;
+    private final CxfRsEndpoint endpoint;
     
     public CxfRsInvoker(CxfRsEndpoint endpoint, CxfRsConsumer consumer) {
         this.endpoint = endpoint;
@@ -82,9 +82,8 @@ public class CxfRsInvoker extends JAXRSInvoker {
                 cxfRsConsumer.createUoW(camelExchange);
                 // Now we don't set up the timeout value
                 LOG.trace("Suspending continuation of exchangeId: {}", camelExchange.getExchangeId());
-                // TODO Support to set the timeout in case the Camel can't send the response back on time.
                 // The continuation could be called before the suspend is called
-                continuation.suspend(0);
+                continuation.suspend(endpoint.getContinuationTimeout());
                 cxfExchange.put(SUSPENED, Boolean.TRUE);
                 cxfRsConsumer.getAsyncProcessor().process(camelExchange, new AsyncCallback() {
                     public void done(boolean doneSync) {

http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/main/resources/schema/blueprint/camel-cxf.xsd
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/resources/schema/blueprint/camel-cxf.xsd b/components/camel-cxf/src/main/resources/schema/blueprint/camel-cxf.xsd
index 76ad5d9..500f61a 100644
--- a/components/camel-cxf/src/main/resources/schema/blueprint/camel-cxf.xsd
+++ b/components/camel-cxf/src/main/resources/schema/blueprint/camel-cxf.xsd
@@ -59,6 +59,7 @@
           <xsd:attribute name="serviceName" type="xsd:QName"/>
           <xsd:attribute name="loggingFeatureEnabled" type="xsd:boolean"/>
           <xsd:attribute name="loggingSizeLimit" type="xsd:integer" />
+          <xsd:attribute name="continuationTimeout" type="xsd:long" />
         </xsd:extension>
       </xsd:complexContent>
     </xsd:complexType>

http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd b/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd
index ddd1657..a9eff65 100644
--- a/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd
+++ b/components/camel-cxf/src/main/resources/schema/cxfEndpoint.xsd
@@ -58,6 +58,7 @@
           <xsd:attribute name="loggingFeatureEnabled" type="xsd:boolean"/>
           <xsd:attribute name="loggingSizeLimit" type="xsd:integer" />
           <xsd:attribute name="skipFaultLogging" type="xsd:boolean" />
+          <xsd:attribute name="continuationTimeout" type="xsd:long" />
         </xsd:extension>
       </xsd:complexContent>
     </xsd:complexType>

http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java
index ae7be2c..284f7a4 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfEndpointTest.java
@@ -51,6 +51,14 @@ public class CxfEndpointTest extends Assert {
         + "&dataFormat=PAYLOAD";
 
     @Test
+    public void testSettingContinucationTimout() throws Exception {
+        CamelContext context = new DefaultCamelContext();
+        CxfEndpoint endpoint = context.getEndpoint(routerEndpointURI + "&continuationTimeout=800000",
+                                                   CxfEndpoint.class);
+        assertEquals("Get a wrong continucationTimeout value", 800000, endpoint.getContinuationTimeout());
+    }
+    
+    @Test
     public void testSpringCxfEndpoint() throws Exception {
 
         ClassPathXmlApplicationContext ctx =

http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointTest.java
index 0534f6c..d8ae6c4 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointTest.java
@@ -49,13 +49,15 @@ public class CxfRsEndpointTest extends CamelTestSupport {
     public void testCxfRsEndpointParameters() throws Exception {
         CxfRsComponent component = new CxfRsComponent(context);
         String endpointUri = "cxfrs://http://localhost:" + CTX + "/templatetest/TID/ranges/start=0;end=1?"
-            + "httpClientAPI=true&loggingFeatureEnabled=true&loggingSizeLimit=200&q1=11&q2=12";
+            + "continuationTimeout=80000&httpClientAPI=true&loggingFeatureEnabled=true&loggingSizeLimit=200&q1=11&q2=12";
+           
         CxfRsEndpoint endpoint = (CxfRsEndpoint)component.createEndpoint(endpointUri);
         
         assertEquals("Get a wrong URI ", endpointUri, endpoint.getEndpointUri());
         assertEquals("Get a wrong usingClientAPI option", true, endpoint.isHttpClientAPI());
         assertNotNull("The Parameter should not be null" + endpoint.getParameters());
         assertEquals("Get a wrong parameter map", "{q1=11, q2=12}", endpoint.getParameters().toString());
+        assertEquals("Get a wrong continucationTimeout", 80000, endpoint.getContinuationTimeout());
     }
     
     @Test
@@ -70,6 +72,8 @@ public class CxfRsEndpointTest extends CamelTestSupport {
         assertEquals("Get a wrong address ", endpointUri, endpoint.getEndpointUri());
         assertEquals("Get a wrong size of resouces classes", 1, endpoint.getResourceClasses().size());
         assertEquals("Get a wrong resources class", CustomerService.class, endpoint.getResourceClasses().get(0));
+        // check the default continuation value
+        assertEquals("Get a wrong continucationTimeout", 30000, endpoint.getContinuationTimeout());
     }
     
     @Test

http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java
index 7e3c003..912ab99 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/spring/CxfEndpointBeanTest.java
@@ -56,7 +56,8 @@ public class CxfEndpointBeanTest extends AbstractSpringBeanTestSupport {
         assertEquals("Got the wrong handlers size", 1, routerEndpoint.getHandlers().size());
         assertEquals("Got the wrong schemalocations size", 1, routerEndpoint.getSchemaLocations().size());
         assertEquals("Got the wrong schemalocation", "classpath:wsdl/Message.xsd", routerEndpoint.getSchemaLocations().get(0));
-
+        assertEquals("Got the wrong continuationTimeout", 60000, routerEndpoint.getContinuationTimeout());
+        
         CxfEndpoint myEndpoint = ctx.getBean("myEndpoint", CxfEndpoint.class);
         assertEquals("Got the wrong endpointName", endpointName, myEndpoint.getPortName());
         assertEquals("Got the wrong serviceName", serviceName, myEndpoint.getServiceName());

http://git-wip-us.apache.org/repos/asf/camel/blob/0a60bfdf/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml
index 0504561..b0a2067 100644
--- a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml
+++ b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/spring/CxfEndpointBeans.xml
@@ -31,7 +31,7 @@
   <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"/>
 
   <cxf:cxfEndpoint id="routerEndpoint" address="http://localhost:${CXFTestSupport.port1}/CxfEndpointBeanTest/router"
-    serviceClass="org.apache.camel.component.cxf.HelloService">
+    serviceClass="org.apache.camel.component.cxf.HelloService" continuationTimeout="60000">
     <cxf:schemaLocations>
     	<cxf:schemaLocation>classpath:wsdl/Message.xsd</cxf:schemaLocation>
     </cxf:schemaLocations>