Author: ningjiang
Date: Mon Sep 27 12:37:55 2010
New Revision: 1001706
URL: http://svn.apache.org/viewvc?rev=1001706&view=rev
Log:
CAMEL-3166 Set the cxf response message context even the exception is thrown
Modified:
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
Modified:
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java?rev=1001706&r1=1001705&r2=1001706&view=diff
==============================================================================
---
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
(original)
+++
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfClientCallback.java
Mon Sep 27 12:37:55 2010
@@ -48,7 +48,8 @@ public class CxfClientCallback extends C
public void handleResponse(Map<String, Object> ctx, Object[] res) {
try {
- super.handleResponse(ctx, res);
+ super.handleResponse(ctx, res);
+ } finally {
// bind the CXF response to Camel exchange
if (!boi.getOperationInfo().isOneWay()) {
// copy the InMessage header to OutMessage header
@@ -56,7 +57,6 @@ public class CxfClientCallback extends C
endpoint.getCxfBinding().populateExchangeFromCxfResponse(camelExchange,
cxfExchange,
ctx);
}
- } finally {
if (LOG.isDebugEnabled()) {
LOG.debug(Thread.currentThread().getName() + "calling
handleResponse");
}
@@ -69,6 +69,13 @@ public class CxfClientCallback extends C
super.handleException(ctx, ex);
camelExchange.setException(ex);
} finally {
+ // copy the context information
+ if (!boi.getOperationInfo().isOneWay()) {
+ // copy the InMessage header to OutMessage header
+
camelExchange.getOut().getHeaders().putAll(camelExchange.getIn().getHeaders());
+
endpoint.getCxfBinding().populateExchangeFromCxfResponse(camelExchange,
cxfExchange,
+ ctx);
+ }
if (LOG.isDebugEnabled()) {
LOG.debug(Thread.currentThread().getName() + "calling
handleException");
}
Modified:
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java?rev=1001706&r1=1001705&r2=1001706&view=diff
==============================================================================
---
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
(original)
+++
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfProducer.java
Mon Sep 27 12:37:55 2010
@@ -123,16 +123,18 @@ public class CxfProducer extends Default
invocationContext.put(Client.RESPONSE_CONTEXT, responseContext);
invocationContext.put(Client.REQUEST_CONTEXT,
prepareRequest(camelExchange, cxfExchange));
- // send the CXF request
- client.invoke(boi, getParams(endpoint, camelExchange),
+ try {
+ // send the CXF request
+ client.invoke(boi, getParams(endpoint, camelExchange),
invocationContext, cxfExchange);
-
- // bind the CXF response to Camel exchange
- if (!boi.getOperationInfo().isOneWay()) {
- // copy the InMessage header to OutMessage header
-
camelExchange.getOut().getHeaders().putAll(camelExchange.getIn().getHeaders());
-
endpoint.getCxfBinding().populateExchangeFromCxfResponse(camelExchange,
cxfExchange,
- responseContext);
+ } finally {
+ // bind the CXF response to Camel exchange
+ if (!boi.getOperationInfo().isOneWay()) {
+ // copy the InMessage header to OutMessage header
+
camelExchange.getOut().getHeaders().putAll(camelExchange.getIn().getHeaders());
+
endpoint.getCxfBinding().populateExchangeFromCxfResponse(camelExchange,
cxfExchange,
+ responseContext);
+ }
}
}
Modified:
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
URL:
http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java?rev=1001706&r1=1001705&r2=1001706&view=diff
==============================================================================
---
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
(original)
+++
camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
Mon Sep 27 12:37:55 2010
@@ -119,6 +119,10 @@ public class DefaultCxfBinding implement
Map<String, Object> responseContext) {
Message cxfMessage = cxfExchange.getInMessage();
+ // Need to check if the inMessage is set
+ if (cxfMessage == null) {
+ return;
+ }
if (LOG.isTraceEnabled()) {
LOG.trace("Populate exchange from CXF response message: " +
cxfMessage);
@@ -577,6 +581,9 @@ public class DefaultCxfBinding implement
protected static List<Element> getPayloadBodyElements(Message message) {
MessageContentsList inObjects =
MessageContentsList.getContentsList(message);
+ if (inObjects == null) {
+ return null;
+ }
org.apache.cxf.message.Exchange exchange = message.getExchange();
BindingOperationInfo boi = exchange.getBindingOperationInfo();