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/02/18 13:41:33 UTC
git commit: CAMEL-7207 CxfRsEndpoint should accept in/out
interceptors and properties with thanks to Sergey
Repository: camel
Updated Branches:
refs/heads/master 4ecb445e9 -> ca480add1
CAMEL-7207 CxfRsEndpoint should accept in/out interceptors and properties with thanks to Sergey
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/ca480add
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/ca480add
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/ca480add
Branch: refs/heads/master
Commit: ca480add108946b52294d6e46df00351034491ec
Parents: 4ecb445
Author: Willem Jiang <wi...@gmail.com>
Authored: Tue Feb 18 20:40:51 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Tue Feb 18 20:40:51 2014 +0800
----------------------------------------------------------------------
.../component/cxf/jaxrs/CxfRsEndpoint.java | 101 +++++++++++++++----
.../cxf/jaxrs/CxfRsEndpointWithProperties.java | 12 +++
.../cxf/jaxrs/CxfRsSpringEndpointTest.java | 9 ++
.../cxf/jaxrs/CxfRsEndpointWithProperties.xml | 3 +
.../cxf/jaxrs/CxfRsSpringEndpointBeans-2.6.xml | 3 +
5 files changed, 109 insertions(+), 19 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/ca480add/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 242c027..625643b 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
@@ -42,9 +42,13 @@ 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.interceptor.AbstractBasicInterceptorProvider;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.jaxrs.AbstractJAXRSFactoryBean;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
import org.apache.cxf.logging.FaultListener;
+import org.apache.cxf.message.Message;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -92,7 +96,8 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
private boolean isSetDefaultBus;
private List<Feature> features = new ModCountCopyOnWriteArrayList<Feature>();
-
+ private InterceptorHolder interceptorHolder = new InterceptorHolder();
+ private Map<String, Object> properties;
@Deprecated
@@ -192,16 +197,7 @@ 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);
- }
- }
+ setupCommonFactoryProperties(sfb);
sfb.setStart(false);
}
@@ -214,28 +210,48 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
cfb.setResourceClass(getResourceClasses().get(0));
cfb.getServiceFactory().setResourceClasses(getResourceClasses());
}
+ setupCommonFactoryProperties(cfb);
+ cfb.setThreadSafe(true);
+ }
+
+ protected void setupCommonFactoryProperties(AbstractJAXRSFactoryBean factory) {
// let customer to override the default setting of provider
if (!getProviders().isEmpty()) {
- cfb.setProviders(getProviders());
+ factory.setProviders(getProviders());
}
// setup the features
if (!getFeatures().isEmpty()) {
- cfb.setFeatures(getFeatures());
+ factory.getFeatures().addAll(getFeatures());
}
+
+ factory.setInInterceptors(interceptorHolder.getInInterceptors());
+ factory.setOutInterceptors(interceptorHolder.getOutInterceptors());
+ factory.setOutFaultInterceptors(interceptorHolder.getOutFaultInterceptors());
+ factory.setInFaultInterceptors(interceptorHolder.getInFaultInterceptors());
+
+ if (getProperties() != null) {
+ if (factory.getProperties() != null) {
+ // add to existing properties
+ factory.getProperties().putAll(getProperties());
+ } else {
+ factory.setProperties(getProperties());
+ }
+ LOG.debug("JAXRS FactoryBean: {} added properties: {}", factory, getProperties());
+ }
+
if (isLoggingFeatureEnabled()) {
if (getLoggingSizeLimit() > 0) {
- cfb.getFeatures().add(new LoggingFeature(getLoggingSizeLimit()));
+ factory.getFeatures().add(new LoggingFeature(getLoggingSizeLimit()));
} else {
- cfb.getFeatures().add(new LoggingFeature());
+ factory.getFeatures().add(new LoggingFeature());
}
}
if (this.isSkipFaultLogging()) {
- if (cfb.getProperties() == null) {
- cfb.setProperties(new HashMap<String, Object>());
+ if (factory.getProperties() == null) {
+ factory.setProperties(new HashMap<String, Object>());
}
- cfb.getProperties().put(FaultListener.class.getName(), new NullFaultListener());
+ factory.getProperties().put(FaultListener.class.getName(), new NullFaultListener());
}
- cfb.setThreadSafe(true);
}
protected JAXRSServerFactoryBean newJAXRSServerFactoryBean() {
@@ -393,6 +409,38 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
return schemaLocations;
}
+ public List<Interceptor<? extends Message>> getOutFaultInterceptors() {
+ return interceptorHolder.getOutFaultInterceptors();
+ }
+
+ public List<Interceptor<? extends Message>> getInFaultInterceptors() {
+ return interceptorHolder.getInFaultInterceptors();
+ }
+
+ public List<Interceptor<? extends Message>> getInInterceptors() {
+ return interceptorHolder.getInInterceptors();
+ }
+
+ public List<Interceptor<? extends Message>> getOutInterceptors() {
+ return interceptorHolder.getOutInterceptors();
+ }
+
+ public void setInInterceptors(List<Interceptor<? extends Message>> interceptors) {
+ interceptorHolder.setInInterceptors(interceptors);
+ }
+
+ public void setInFaultInterceptors(List<Interceptor<? extends Message>> interceptors) {
+ interceptorHolder.setInFaultInterceptors(interceptors);
+ }
+
+ public void setOutInterceptors(List<Interceptor<? extends Message>> interceptors) {
+ interceptorHolder.setOutInterceptors(interceptors);
+ }
+
+ public void setOutFaultInterceptors(List<Interceptor<? extends Message>> interceptors) {
+ interceptorHolder.setOutFaultInterceptors(interceptors);
+ }
+
public List<Feature> getFeatures() {
return features;
}
@@ -401,6 +449,18 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
this.features = features;
}
+ public Map<String, Object> getProperties() {
+ return properties;
+ }
+
+ public void setProperties(Map<String, Object> properties) {
+ if (this.properties == null) {
+ this.properties = properties;
+ } else {
+ this.properties.putAll(properties);
+ }
+ }
+
/**
* See documentation of {@link BindingStyle}.
*/
@@ -426,4 +486,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
// noop
}
+
+ private static class InterceptorHolder extends AbstractBasicInterceptorProvider {
+ }
}
http://git-wip-us.apache.org/repos/asf/camel/blob/ca480add/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.java
index e51de63..9eb736d 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.java
@@ -16,8 +16,12 @@
*/
package org.apache.camel.component.cxf.jaxrs;
+import java.util.List;
+import java.util.Map;
+
import org.apache.camel.CamelContext;
import org.apache.camel.component.cxf.spring.AbstractSpringBeanTestSupport;
+import org.apache.cxf.feature.Feature;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
@@ -37,6 +41,14 @@ public class CxfRsEndpointWithProperties extends AbstractSpringBeanTestSupport {
CamelContext camelContext = ctx.getBean("camel", CamelContext.class);
CxfRsEndpoint testEndpoint = camelContext.getEndpoint("cxfrs:bean:testEndpoint", CxfRsEndpoint.class);
assertEquals("Got a wrong address", "http://localhost:9900/testEndpoint", testEndpoint.getAddress());
+
+ List<Feature> features = testEndpoint.getFeatures();
+ assertEquals("Single feature is expected", 1, features.size());
+
+ Map<String, Object> endpointProps = testEndpoint.getProperties();
+ assertEquals("Single endpoint property is expected", 1, endpointProps.size());
+ assertEquals("Wrong property value", "aValue", endpointProps.get("aKey"));
+
HttpGet get = new HttpGet(testEndpoint.getAddress());
CloseableHttpClient httpclient = HttpClientBuilder.create().build();
try {
http://git-wip-us.apache.org/repos/asf/camel/blob/ca480add/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointTest.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointTest.java
index 593630a..d80441e 100644
--- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointTest.java
+++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointTest.java
@@ -16,7 +16,10 @@
*/
package org.apache.camel.component.cxf.jaxrs;
+import java.util.Map;
+
import org.apache.camel.component.cxf.jaxrs.testbean.CustomerService;
+import org.apache.camel.component.cxf.spring.AbstractCxfBeanDefinitionParser;
import org.apache.camel.component.cxf.spring.SpringJAXRSClientFactoryBean;
import org.apache.camel.component.cxf.spring.SpringJAXRSServerFactoryBean;
import org.apache.camel.test.spring.CamelSpringTestSupport;
@@ -32,6 +35,7 @@ public class CxfRsSpringEndpointTest extends CamelSpringTestSupport {
public void testCreateCxfRsServerFactoryBean() {
CxfRsEndpoint endpoint = resolveMandatoryEndpoint("cxfrs://bean://rsServer", CxfRsEndpoint.class);
SpringJAXRSServerFactoryBean sfb = (SpringJAXRSServerFactoryBean)endpoint.createJAXRSServerFactoryBean();
+
assertEquals("Get a wrong provider size", 1, sfb.getProviders().size());
assertEquals("Get a wrong beanId", sfb.getBeanId(), "rsServer");
assertEquals("Get a wrong address", sfb.getAddress(), "http://localhost:9000/router");
@@ -39,6 +43,11 @@ public class CxfRsSpringEndpointTest extends CamelSpringTestSupport {
assertEquals("Get a wrong resource class", sfb.getResourceClasses().get(0), CustomerService.class);
assertEquals("Got the wrong loggingFeatureEnabled", true, sfb.isLoggingFeatureEnabled());
assertEquals("Got the wrong loggingSizeLimit", 200, sfb.getLoggingSizeLimit());
+
+ Map<String, Object> endpointProps = sfb.getProperties();
+ // The beanId key is put by the AbstractCxfBeanDefinitionParser, so the size is 2
+ assertEquals("Single endpoint property is expected", 2, endpointProps.size());
+ assertEquals("Wrong property value", "aValue", endpointProps.get("aKey"));
}
@Test
http://git-wip-us.apache.org/repos/asf/camel/blob/ca480add/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.xml
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.xml
index 7c9d63c..a3755d2 100644
--- a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.xml
+++ b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsEndpointWithProperties.xml
@@ -28,6 +28,9 @@
<cxf:rsServer id="testEndpoint" address="{{address}}"
serviceClass="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService"
loggingFeatureEnabled="true" loggingSizeLimit="200">
+ <cxf:properties>
+ <entry key="aKey" value="aValue"/>
+ </cxf:properties>
</cxf:rsServer>
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
http://git-wip-us.apache.org/repos/asf/camel/blob/ca480add/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointBeans-2.6.xml
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointBeans-2.6.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointBeans-2.6.xml
index 6e4d6b2..1290c71 100644
--- a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointBeans-2.6.xml
+++ b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringEndpointBeans-2.6.xml
@@ -27,6 +27,9 @@
<cxf:rsServer id="rsServer" address="http://localhost:9000/router"
serviceClass="org.apache.camel.component.cxf.jaxrs.testbean.CustomerService"
loggingFeatureEnabled="true" loggingSizeLimit="200">
+ <cxf:properties>
+ <entry key="aKey" value="aValue"/>
+ </cxf:properties>
<cxf:providers>
<ref bean="jsonProvider"/>
</cxf:providers>