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/09/26 09:10:36 UTC
[6/9] git commit: CAMEL-7856 Added igoreDeleteMethodMessageBody
option to CxfRsEndpoint
CAMEL-7856 Added igoreDeleteMethodMessageBody option to CxfRsEndpoint
Conflicts:
components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsEndpoint.java
Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3a5497af
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3a5497af
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3a5497af
Branch: refs/heads/camel-2.13.x
Commit: 3a5497afcb533f083cb726f57c0153b44e7f52ed
Parents: 55c5c4b
Author: Willem Jiang <wi...@gmail.com>
Authored: Fri Sep 26 15:02:27 2014 +0800
Committer: Willem Jiang <wi...@gmail.com>
Committed: Fri Sep 26 15:08:56 2014 +0800
----------------------------------------------------------------------
.../component/cxf/jaxrs/CxfRsEndpoint.java | 85 +++++++++++---------
.../component/cxf/jaxrs/CxfRsProducer.java | 17 ++--
.../component/cxf/jaxrs/CxfRsSpringRouter.xml | 7 +-
3 files changed, 61 insertions(+), 48 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/camel/blob/3a5497af/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 d3e29c2..b4b63a1 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
@@ -51,7 +51,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrategyAware, Service {
-
+
public enum BindingStyle {
/**
* <i>Only available for consumers.</i>
@@ -60,7 +60,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
* It also also adds more flexibility and simplicity to the response mapping.
*/
SimpleConsumer,
-
+
/**
* This is the traditional binding style, which simply dumps the {@link org.apache.cxf.message.MessageContentsList} coming in from the CXF stack
* onto the IN message body. The user is then responsible for processing it according to the contract defined by the JAX-RS method signature.
@@ -77,9 +77,9 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
private static final Logger LOG = LoggerFactory.getLogger(CxfRsEndpoint.class);
protected Bus bus;
-
+
protected List<Object> entityProviders = new LinkedList<Object>();
-
+
protected List<String> schemaLocations;
private Map<String, String> parameters;
@@ -87,6 +87,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
private HeaderFilterStrategy headerFilterStrategy;
private CxfRsBinding binding;
private boolean httpClientAPI = true;
+ private boolean ignoreDeleteMethodMessageBody;
private String address;
private boolean throwExceptionOnFailure = true;
private int maxClientCacheSize = 10;
@@ -94,13 +95,13 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
private int loggingSizeLimit;
private boolean skipFaultLogging;
private BindingStyle bindingStyle = BindingStyle.Default;
-
+
private boolean isSetDefaultBus;
-
+
private List<Feature> features = new ModCountCopyOnWriteArrayList<Feature>();
private InterceptorHolder interceptorHolder = new InterceptorHolder();
private Map<String, Object> properties;
-
+
@Deprecated
public CxfRsEndpoint(String endpointUri, CamelContext camelContext) {
@@ -171,7 +172,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
public CxfRsBinding getBinding() {
return binding;
}
-
+
public boolean isSkipFaultLogging() {
return skipFaultLogging;
}
@@ -179,7 +180,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
public void setSkipFaultLogging(boolean skipFaultLogging) {
this.skipFaultLogging = skipFaultLogging;
}
-
+
protected void checkBeanType(Object object, Class<?> clazz) {
if (!clazz.isAssignableFrom(object.getClass())) {
throw new IllegalArgumentException("The configure bean is not the instance of " + clazz.getName());
@@ -215,7 +216,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
setupCommonFactoryProperties(cfb);
cfb.setThreadSafe(true);
}
-
+
protected void setupCommonFactoryProperties(AbstractJAXRSFactoryBean factory) {
// let customer to override the default setting of provider
if (!getProviders().isEmpty()) {
@@ -225,11 +226,11 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
if (!getFeatures().isEmpty()) {
factory.getFeatures().addAll(getFeatures());
}
-
+
// we need to avoid flushing the setting from spring or blueprint
if (!interceptorHolder.getInInterceptors().isEmpty()) {
factory.setInInterceptors(interceptorHolder.getInInterceptors());
- }
+ }
if (!interceptorHolder.getOutInterceptors().isEmpty()) {
factory.setOutInterceptors(interceptorHolder.getOutInterceptors());
}
@@ -237,9 +238,9 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
factory.setOutFaultInterceptors(interceptorHolder.getOutFaultInterceptors());
}
if (!interceptorHolder.getInFaultInterceptors().isEmpty()) {
- factory.setInFaultInterceptors(interceptorHolder.getInFaultInterceptors());
+ factory.setInFaultInterceptors(interceptorHolder.getInFaultInterceptors());
}
-
+
if (getProperties() != null) {
if (factory.getProperties() != null) {
// add to existing properties
@@ -249,7 +250,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
}
LOG.debug("JAXRS FactoryBean: {} added properties: {}", factory, getProperties());
}
-
+
if (isLoggingFeatureEnabled()) {
if (getLoggingSizeLimit() > 0) {
factory.getFeatures().add(new LoggingFeature(getLoggingSizeLimit()));
@@ -264,15 +265,15 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
factory.getProperties().put(FaultListener.class.getName(), new NullFaultListener());
}
}
-
+
protected JAXRSServerFactoryBean newJAXRSServerFactoryBean() {
return new JAXRSServerFactoryBean();
}
-
+
protected JAXRSClientFactoryBean newJAXRSClientFactoryBean() {
return new JAXRSClientFactoryBean();
}
-
+
protected String resolvePropertyPlaceholders(String str) {
try {
if (getCamelContext() != null) {
@@ -291,12 +292,12 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
setupJAXRSServerFactoryBean(answer);
return answer;
}
-
+
public JAXRSClientFactoryBean createJAXRSClientFactoryBean() {
return createJAXRSClientFactoryBean(getAddress());
}
-
+
public JAXRSClientFactoryBean createJAXRSClientFactoryBean(String address) {
JAXRSClientFactoryBean answer = newJAXRSClientFactoryBean();
setupJAXRSClientFactoryBean(answer, address);
@@ -320,7 +321,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
public void setResourceClasses(Class<?>... classes) {
setResourceClasses(Arrays.asList(classes));
}
-
+
public void setAddress(String address) {
this.address = address;
}
@@ -366,7 +367,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
public int getMaxClientCacheSize() {
return maxClientCacheSize;
}
-
+
public void setBus(Bus bus) {
this.bus = bus;
if (isSetDefaultBus) {
@@ -378,7 +379,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
public Bus getBus() {
return bus;
}
-
+
public void setSetDefaultBus(boolean isSetDefaultBus) {
this.isSetDefaultBus = isSetDefaultBus;
}
@@ -386,31 +387,39 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
public boolean isSetDefaultBus() {
return isSetDefaultBus;
}
-
+
+ public boolean isIgnoreDeleteMethodMessageBody() {
+ return ignoreDeleteMethodMessageBody;
+ }
+
+ public void setIgnoreDELETEMethodMessageBody(boolean ignoreDELETEMethodMessageBody) {
+ this.ignoreDeleteMethodMessageBody = ignoreDELETEMethodMessageBody;
+ }
+
public BindingStyle getBindingStyle() {
return bindingStyle;
}
-
+
public List<?> getProviders() {
return entityProviders;
}
-
+
public void setProviders(List<?> providers) {
this.entityProviders.addAll(providers);
}
-
+
public void setProvider(Object provider) {
entityProviders.add(provider);
}
-
+
public void setSchemaLocation(String schema) {
- setSchemaLocations(Collections.singletonList(schema));
+ setSchemaLocations(Collections.singletonList(schema));
}
-
+
public void setSchemaLocations(List<String> schemas) {
- this.schemaLocations = schemas;
+ this.schemaLocations = schemas;
}
-
+
public List<String> getSchemaLocations() {
return schemaLocations;
}
@@ -446,7 +455,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
public void setOutFaultInterceptors(List<Interceptor<? extends Message>> interceptors) {
interceptorHolder.setOutFaultInterceptors(interceptors);
}
-
+
public List<Feature> getFeatures() {
return features;
}
@@ -458,7 +467,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
public Map<String, Object> getProperties() {
return properties;
}
-
+
public void setProperties(Map<String, Object> properties) {
if (this.properties == null) {
this.properties = properties;
@@ -466,14 +475,14 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
this.properties.putAll(properties);
}
}
-
+
/**
* See documentation of {@link BindingStyle}.
*/
public void setBindingStyle(BindingStyle bindingStyle) {
this.bindingStyle = bindingStyle;
}
-
+
@Override
protected void doStart() throws Exception {
if (headerFilterStrategy == null) {
@@ -488,7 +497,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
// if the user has set a binding, do nothing, just make sure that BindingStyle = Custom for coherency purposes
if (binding != null) {
bindingStyle = BindingStyle.Custom;
- }
+ }
// set the right binding based on the binding style
if (bindingStyle == BindingStyle.SimpleConsumer) {
@@ -498,7 +507,7 @@ public class CxfRsEndpoint extends DefaultEndpoint implements HeaderFilterStrate
} else {
binding = new DefaultCxfRsBinding();
}
-
+
if (binding instanceof HeaderFilterStrategyAware) {
((HeaderFilterStrategyAware) binding).setHeaderFilterStrategy(getHeaderFilterStrategy());
}
http://git-wip-us.apache.org/repos/asf/camel/blob/3a5497af/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
index c580445..7129829 100644
--- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
+++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/jaxrs/CxfRsProducer.java
@@ -57,12 +57,15 @@ public class CxfRsProducer extends DefaultProducer {
private boolean throwException;
+ private CxfRsEndpoint cxfRsEndpoint;
+
// using a cache of factory beans instead of setting the address of a single cfb
// to avoid concurrent issues
private ClientFactoryBeanCache clientFactoryBeanCache;
public CxfRsProducer(CxfRsEndpoint endpoint) {
super(endpoint);
+ cxfRsEndpoint = endpoint;
this.throwException = endpoint.isThrowExceptionOnFailure();
clientFactoryBeanCache = new ClientFactoryBeanCache(endpoint.getMaxClientCacheSize());
}
@@ -158,11 +161,15 @@ public class CxfRsProducer extends DefaultProducer {
// set the body
Object body = null;
- if (!"GET".equals(httpMethod) && !"DELETE".equals(httpMethod)) {
- // need to check the request object if the http Method is not GET or DELETE
- body = binding.bindCamelMessageBodyToRequestBody(inMessage, exchange);
- if (LOG.isTraceEnabled()) {
- LOG.trace("Request body = " + body);
+ if (!"GET".equals(httpMethod)) {
+ // need to check the request object if the http Method is not GET
+ if ("DELETE".equals(httpMethod) && cxfRsEndpoint.isIgnoreDeleteMethodMessageBody()) {
+ // just ignore the message body if the ignoreDeleteMethodMessageBody is true
+ } else {
+ body = binding.bindCamelMessageBodyToRequestBody(inMessage, exchange);
+ if (LOG.isTraceEnabled()) {
+ LOG.trace("Request body = " + body);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/camel/blob/3a5497af/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringRouter.xml
----------------------------------------------------------------------
diff --git a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringRouter.xml b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringRouter.xml
index 9f51dd6..172aac1 100644
--- a/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringRouter.xml
+++ b/components/camel-cxf/src/test/resources/org/apache/camel/component/cxf/jaxrs/CxfRsSpringRouter.xml
@@ -63,12 +63,9 @@
<!-- The camel route context -->
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<route>
- <from uri="cxfrs://bean://rsServer"/>
+ <!-- Just need to ignoreDeleteMethodMessageBody -->
+ <from uri="cxfrs://bean://rsServer?ignoreDeleteMethodMessageBody=true"/>
<to uri="log:body?level=INFO"/>
- <!-- We can remove this configure as the CXFRS producer is using the HttpAPI by default -->
- <setHeader headerName="CamelCxfRsUsingHttpAPI">
- <constant>True</constant>
- </setHeader>
<to uri="cxfrs://bean://rsClient"/>
</route>
</camelContext>