CAMEL-7194 Added features option to the cxfrs endpoint
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/f8b6d5bd Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/f8b6d5bd Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/f8b6d5bd Branch: refs/heads/master Commit: f8b6d5bd32df1dd42ec09206f5a2f47994b0f5ed Parents: 5dfee2b Author: Willem Jiang <willem.ji...@gmail.com> Authored: Thu Feb 13 14:35:24 2014 +0800 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Thu Feb 13 20:38:42 2014 +0800 ---------------------------------------------------------------------- .../component/cxf/jaxrs/CxfRsEndpoint.java | 72 ++++++++------------ .../cxf/jaxrs/CxfRsSpringEndpoint.java | 12 ---- .../component/cxf/jaxrs/CxfRsProducerTest.java | 43 ++++++++++-- .../component/cxf/jaxrs/CxfRsSpringProducer.xml | 7 ++ .../CxfRsSpringProducerAddressOverride.xml | 7 ++ 5 files changed, 83 insertions(+), 58 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/f8b6d5bd/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 0b4c816..9cb0b1d 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 @@ -39,6 +39,8 @@ import org.apache.camel.spi.HeaderFilterStrategyAware; import org.apache.camel.util.ObjectHelper; import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; +import org.apache.cxf.common.util.ModCountCopyOnWriteArrayList; +import org.apache.cxf.feature.Feature; import org.apache.cxf.feature.LoggingFeature; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; @@ -89,6 +91,8 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate private boolean isSetDefaultBus; + private List<Feature> features = new ModCountCopyOnWriteArrayList<Feature>(); + @Deprecated @@ -188,6 +192,16 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate } sfb.setResourceClasses(res); } + // let customer to override the default setting of provider + if (!getProviders().isEmpty()) { + sfb.setProviders(getProviders()); + } + // setup the features + if (!getFeatures().isEmpty()) { + for (Feature feature: getFeatures()) { + sfb.getFeatures().add(feature); + } + } sfb.setStart(false); } @@ -200,6 +214,14 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate cfb.setResourceClass(getResourceClasses().get(0)); cfb.getServiceFactory().setResourceClasses(getResourceClasses()); } + // let customer to override the default setting of provider + if (!getProviders().isEmpty()) { + cfb.setProviders(getProviders()); + } + // setup the features + if (!getFeatures().isEmpty()) { + cfb.setFeatures(getFeatures()); + } if (isLoggingFeatureEnabled()) { if (getLoggingSizeLimit() > 0) { cfb.getFeatures().add(new LoggingFeature(getLoggingSizeLimit())); @@ -238,29 +260,8 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate public JAXRSServerFactoryBean createJAXRSServerFactoryBean() { - JAXRSServerFactoryBean answer = newJAXRSServerFactoryBean(); setupJAXRSServerFactoryBean(answer); - // let customer to override the default setting of provider - if (!getProviders().isEmpty()) { - answer.setProviders(getProviders()); - } - if (schemaLocations != null) { - answer.setSchemaLocations(schemaLocations); - } - if (isLoggingFeatureEnabled()) { - if (getLoggingSizeLimit() > 0) { - answer.getFeatures().add(new LoggingFeature(getLoggingSizeLimit())); - } else { - answer.getFeatures().add(new LoggingFeature()); - } - } - if (this.isSkipFaultLogging()) { - if (answer.getProperties() == null) { - answer.setProperties(new HashMap<String, Object>()); - } - answer.getProperties().put(FaultListener.class.getName(), new NullFaultListener()); - } return answer; } @@ -270,29 +271,8 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate } public JAXRSClientFactoryBean createJAXRSClientFactoryBean(String address) { - JAXRSClientFactoryBean answer = newJAXRSClientFactoryBean(); setupJAXRSClientFactoryBean(answer, address); - // let customer to override the default setting of provider - if (!getProviders().isEmpty()) { - answer.setProviders(getProviders()); - } - if (schemaLocations != null) { - answer.setSchemaLocations(schemaLocations); - } - if (isLoggingFeatureEnabled()) { - if (getLoggingSizeLimit() > 0) { - answer.getFeatures().add(new LoggingFeature(getLoggingSizeLimit())); - } else { - answer.getFeatures().add(new LoggingFeature()); - } - } - if (this.isSkipFaultLogging()) { - if (answer.getProperties() == null) { - answer.setProperties(new HashMap<String, Object>()); - } - answer.getProperties().put(FaultListener.class.getName(), new NullFaultListener()); - } return answer; } @@ -413,6 +393,14 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate return schemaLocations; } + public List<Feature> getFeatures() { + return features; + } + + public void setFeatures(List<Feature> features) { + this.features = features; + } + /** * See documentation of {@link BindingStyle}. */ http://git-wip-us.apache.org/repos/asf/camel/blob/f8b6d5bd/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java index 1738215..fa96d3c 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpoint.java @@ -53,18 +53,6 @@ public class CxfRsSpringEndpoint extends CxfRsEndpoint implements BeanIdAware { } @Override - protected void setupJAXRSServerFactoryBean(JAXRSServerFactoryBean sfb) { - // Do nothing here - } - - @Override - protected void setupJAXRSClientFactoryBean(JAXRSClientFactoryBean cfb, String address) { - cfb.setAddress(address); - // Need to enable the option of ThreadSafe - cfb.setThreadSafe(true); - } - - @Override protected JAXRSServerFactoryBean newJAXRSServerFactoryBean() { checkBeanType(bean, JAXRSServerFactoryBean.class); return (JAXRSServerFactoryBean)bean; http://git-wip-us.apache.org/repos/asf/camel/blob/f8b6d5bd/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java index 546f074..8eb6d0d 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducerTest.java @@ -33,6 +33,11 @@ import org.apache.camel.component.cxf.common.message.CxfConstants; import org.apache.camel.component.cxf.jaxrs.testbean.Customer; import org.apache.camel.test.spring.CamelSpringTestSupport; import org.apache.camel.util.CastUtils; +import org.apache.cxf.Bus; +import org.apache.cxf.endpoint.Client; +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.feature.Feature; +import org.apache.cxf.interceptor.InterceptorProvider; import org.junit.Test; import org.springframework.context.support.AbstractXmlApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @@ -70,7 +75,7 @@ public class CxfRsProducerTest extends CamelSpringTestSupport { } @Test - public void testGetCostumerWithClientProxyAPI() { + public void testGetCustomerWithClientProxyAPI() { // START SNIPPET: ProxyExample Exchange exchange = template.send("direct://proxy", new Processor() { public void process(Exchange exchange) throws Exception { @@ -101,7 +106,7 @@ public class CxfRsProducerTest extends CamelSpringTestSupport { } @Test - public void testGetCostumersWithClientProxyAPI() { + public void testGetCustomersWithClientProxyAPI() { Exchange exchange = template.send("direct://proxy", new Processor() { public void process(Exchange exchange) throws Exception { exchange.setPattern(ExchangePattern.InOut); @@ -127,7 +132,7 @@ public class CxfRsProducerTest extends CamelSpringTestSupport { } @Test - public void testGetCostumerWithHttpCentralClientAPI() { + public void testGetCustomerWithHttpCentralClientAPI() { // START SNIPPET: HttpExample Exchange exchange = template.send("direct://http", new Processor() { public void process(Exchange exchange) throws Exception { @@ -188,7 +193,7 @@ public class CxfRsProducerTest extends CamelSpringTestSupport { } @Test - public void testGetCustumerWithCxfRsEndpoint() { + public void testGetCustomerWithCxfRsEndpoint() { Exchange exchange = template.send("cxfrs://http://localhost:" + getPort1() + "/" + getClass().getSimpleName() + "/?httpClientAPI=true", new Processor() { public void process(Exchange exchange) throws Exception { @@ -376,5 +381,35 @@ public class CxfRsProducerTest extends CamelSpringTestSupport { assertNotNull(response); assertTrue(response.endsWith("<name>Donald Duck</name></Customer>")); } + + static class TestFeature implements Feature { + boolean initialized; + @Override + public void initialize(InterceptorProvider interceptorProvider, Bus bus) { + initialized = true; + } + @Override + public void initialize(Client client, Bus bus) { + //Do nothing + } + @Override + public void initialize(Server server, Bus bus) { + //Do nothing + } + @Override + public void initialize(Bus bus) { + //Do nothing + } + }; + + @Test + public void testProducerWithFeature() { + TestFeature feature = context().getRegistry().lookupByNameAndType("testFeature", TestFeature.class); + + template.requestBodyAndHeader("cxfrs:http://localhost:" + getPort1() + "/" + getClass().getSimpleName() + "/customerservice/customers/123?features=#myFeatures", + null, Exchange.HTTP_METHOD, "GET", String.class); + + assertTrue("The feature should be initialized", feature.initialized); + } } http://git-wip-us.apache.org/repos/asf/camel/blob/f8b6d5bd/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml index 4500667..6f8add8 100644 --- a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml +++ b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducer.xml @@ -19,8 +19,10 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:jaxrs="http://cxf.apache.org/jaxrs" + xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd @@ -59,5 +61,10 @@ </camelContext> <bean id="myProcessor" class="org.apache.camel.component.cxf.jaxrs.CxfRsProducerTest$JettyProcessor"/> + <bean id ="testFeature" class="org.apache.camel.component.cxf.jaxrs.CxfRsProducerTest$TestFeature" /> + + <util:list id="myFeatures" > + <ref bean="testFeature"/> + </util:list> </beans> http://git-wip-us.apache.org/repos/asf/camel/blob/f8b6d5bd/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducerAddressOverride.xml ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducerAddressOverride.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducerAddressOverride.xml index f13cd8a..e346ab7 100644 --- a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducerAddressOverride.xml +++ b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringProducerAddressOverride.xml @@ -19,8 +19,10 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://camel.apache.org/schema/cxf" xmlns:jaxrs="http://cxf.apache.org/jaxrs" + xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd + http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd @@ -59,5 +61,10 @@ </camelContext> <bean id="myProcessor" class="org.apache.camel.component.cxf.jaxrs.CxfRsProducerTest$JettyProcessor"/> + <bean id ="testFeature" class="org.apache.camel.component.cxf.jaxrs.CxfRsProducerTest$TestFeature" /> + + <util:list id="myFeatures" > + <ref bean="testFeature"/> + </util:list> </beans>