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/07/26 15:25:40 UTC

svn commit: r979273 - in /camel/trunk/components/camel-cxf/src: main/java/org/apache/camel/component/cxf/ main/java/org/apache/camel/component/cxf/interceptors/ test/java/org/apache/camel/component/cxf/

Author: ningjiang
Date: Mon Jul 26 13:25:40 2010
New Revision: 979273

URL: http://svn.apache.org/viewvc?rev=979273&view=rev
Log:
CAMEL-2994 Fixed the issue of CxfClientCallback is invoked twice when only one was expected

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/interceptors/RawMessageContentRedirectInterceptor.java
    camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyTest.java
    camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/GreeterImplWithSleep.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=979273&r1=979272&r2=979273&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 Jul 26 13:25:40 2010
@@ -47,35 +47,33 @@ public class CxfClientCallback extends C
     }
     
     public void handleResponse(Map<String, Object> ctx, Object[] res) {
-        LOG.trace("Handling response +++ START +++");
-
-        super.handleResponse(ctx, res);
-        // 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,
-                    ctx);
+        try {
+            super.handleResponse(ctx, res);
+            // 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,
+                        ctx);
+            }
+        } finally {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug(Thread.currentThread().getName() + "calling handleResponse");
+            }
+            camelAsyncCallback.done(false);
         }
-
-        // TODO: callback should be in finally to ensure its invoked
-
-        LOG.trace("Handling response +++ DONE +++");
-        camelAsyncCallback.done(false);
-        LOG.trace("Handling response +++ END +++");
     }
     
     public void handleException(Map<String, Object> ctx, Throwable ex) {
-        LOG.trace("Handling exception +++ START +++");
-
-        super.handleException(ctx, ex);
-        camelExchange.setException(ex);
-
-        // TODO: callback should be in finally to ensure its invoked
-
-        LOG.trace("Handling response +++ DONE +++");
-        camelAsyncCallback.done(false);
-        LOG.trace("Handling response +++ END +++");
-    }
+        try {
+            super.handleException(ctx, ex);
+            camelExchange.setException(ex);
+        } finally {
+            if (LOG.isDebugEnabled()) {
+                LOG.debug(Thread.currentThread().getName() + "calling handleException");
+            }
+            camelAsyncCallback.done(false);
+        }
+    }        
 
 }

Modified: camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java?rev=979273&r1=979272&r2=979273&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java (original)
+++ camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/interceptors/RawMessageContentRedirectInterceptor.java Mon Jul 26 13:25:40 2010
@@ -53,7 +53,7 @@ public class RawMessageContentRedirectIn
             throw new Fault(e);
         } finally {
             IOHelper.close(is, "input stream", null);
-            IOHelper.close(os, "output stream", null);
+            // Should not close the output stream as the interceptor chain will close it
         }
     }
 }

Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyTest.java?rev=979273&r1=979272&r2=979273&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyTest.java (original)
+++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyTest.java Mon Jul 26 13:25:40 2010
@@ -80,24 +80,19 @@ public class CXFWsdlOnlyTest extends Cam
         personId.value = "hello";
         Holder<String> ssn = new Holder<String>();
         Holder<String> name = new Holder<String>();
-        System.out.println(">>>>>>>>>");
         client.getPerson(personId, ssn, name);
-        System.out.println("<<<<<<<<");
         assertEquals("Bonjour", name.value);
 
-        // TODO: camel-cxf invokes async callback 2 times, there is a problem with this kind of using CXF
-
-/*        Person client2 = ss.getSoap2();
+        Person client2 = ss.getSoap2();
         Holder<String> personId2 = new Holder<String>();
         personId2.value = "hello";
         Holder<String> ssn2 = new Holder<String>();
         Holder<String> name2 = new Holder<String>();
         client2.getPerson(personId2, ssn2, name2);
-        assertEquals("Bonjour", name2.value);*/
+        assertEquals("Bonjour", name2.value);
     }
     
     @Test
-    @Ignore
     public void testSoapFaultRoutes() {
         URL wsdlURL = getClass().getClassLoader().getResource("person.wsdl");
         PersonService ss = new PersonService(wsdlURL, new QName("http://camel.apache.org/wsdl-first",
@@ -117,6 +112,7 @@ public class CXFWsdlOnlyTest extends Cam
         }
         assertTrue(t instanceof UnknownPersonFault);
 
+        
         // test PAYLOAD mode
         Person client2 = ss.getSoap2();
         Holder<String> personId2 = new Holder<String>();

Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/GreeterImplWithSleep.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/GreeterImplWithSleep.java?rev=979273&r1=979272&r2=979273&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/GreeterImplWithSleep.java (original)
+++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/GreeterImplWithSleep.java Mon Jul 26 13:25:40 2010
@@ -23,9 +23,8 @@ public class GreeterImplWithSleep extend
 
     @Override
     public String greetMe(String hi) {
-
         try {            
-            Thread.sleep(10000);
+            Thread.sleep(2000);
         } catch (Exception ignore) {
 
         }