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();
 


Reply via email to