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 <willem.ji...@gmail.com> Authored: Tue Apr 29 14:12:14 2014 +0800 Committer: Willem Jiang <willem.ji...@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>