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 2010/09/27 14:37:55 UTC

svn commit: r1001706 - in /camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf: CxfClientCallback.java CxfProducer.java DefaultCxfBinding.java

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