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 2011/03/28 15:45:08 UTC

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

Author: ningjiang
Date: Mon Mar 28 13:45:07 2011
New Revision: 1086231

URL: http://svn.apache.org/viewvc?rev=1086231&view=rev
Log:
CAMEL-3806 set the SOAPAction Header rightly from CXF message to Camel message

Modified:
    camel/trunk/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
    camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyMessageModeNoSpringTest.java
    camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringSoap12Test.java
    camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringTest.java
    camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerProtocalHeaderTest.java

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=1086231&r1=1086230&r2=1086231&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 Mar 28 13:45:07 2011
@@ -38,7 +38,9 @@ import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.spi.HeaderFilterStrategy;
 import org.apache.camel.spi.HeaderFilterStrategyAware;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.cxf.attachment.AttachmentImpl;
+import org.apache.cxf.binding.soap.SoapBindingConstants;
 import org.apache.cxf.binding.soap.SoapHeader;
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.endpoint.Endpoint;
@@ -463,7 +465,6 @@ public class DefaultCxfBinding implement
             }
         }
         
-        
         // propagate SOAP/protocol header list
         String key = Header.HEADER_LIST;
         Object value = cxfMessage.get(key);
@@ -474,7 +475,22 @@ public class DefaultCxfBinding implement
             } else {
                 ((List<?>)value).clear();
             }
-        }       
+        }
+        
+        // propagate the SOAPAction header
+        String soapAction = (String)camelHeaders.get(SoapBindingConstants.SOAP_ACTION);
+        // Remove SOAPAction from the protocol header, as it will not be overrided
+        if (ObjectHelper.isEmpty(soapAction) || "\"\"".equals(soapAction)) {
+            camelHeaders.remove(SoapBindingConstants.SOAP_ACTION);
+        }
+        soapAction = (String)cxfMessage.get(SoapBindingConstants.SOAP_ACTION);
+        if (soapAction != null) {
+            if (!headerFilterStrategy.applyFilterToExternalHeaders(SoapBindingConstants.SOAP_ACTION, soapAction, exchange)) {
+                camelHeaders.put(SoapBindingConstants.SOAP_ACTION, soapAction);
+                LOG.trace("Populate header from CXF header={} value={}", SoapBindingConstants.SOAP_ACTION, soapAction);
+            } 
+        }
+        
     }
     
     // replace the multi-part content-type

Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyMessageModeNoSpringTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyMessageModeNoSpringTest.java?rev=1086231&r1=1086230&r2=1086231&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyMessageModeNoSpringTest.java (original)
+++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyMessageModeNoSpringTest.java Mon Mar 28 13:45:07 2011
@@ -16,6 +16,8 @@
  */
 package org.apache.camel.component.cxf;
 
+import org.apache.camel.Exchange;
+
 public class CXFWsdlOnlyMessageModeNoSpringTest extends CXFWsdlOnlyPayloadModeNoSpringTest {
 
     @Override

Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringSoap12Test.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringSoap12Test.java?rev=1086231&r1=1086230&r2=1086231&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringSoap12Test.java (original)
+++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringSoap12Test.java Mon Mar 28 13:45:07 2011
@@ -18,6 +18,7 @@ package org.apache.camel.component.cxf;
 
 import javax.xml.ws.Endpoint;
 
+import org.apache.camel.Exchange;
 import org.apache.camel.wsdl_first.PersonImpl12;
 import org.junit.BeforeClass;
 
@@ -34,4 +35,9 @@ public class CXFWsdlOnlyPayloadModeNoSpr
         return "{http://camel.apache.org/wsdl-first}PersonService12";
     }
     
+    @Override
+    protected void checkSOAPAction(Exchange exchange) {
+        assertEquals(exchange.getIn().getHeader("SOAPAction"), "GetPersonAction");
+    }
+    
 }

Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringTest.java?rev=1086231&r1=1086230&r2=1086231&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringTest.java (original)
+++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CXFWsdlOnlyPayloadModeNoSpringTest.java Mon Mar 28 13:45:07 2011
@@ -22,6 +22,8 @@ import javax.xml.namespace.QName;
 import javax.xml.ws.Endpoint;
 import javax.xml.ws.Holder;
 
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.test.junit4.CamelTestSupport;
 import org.apache.camel.wsdl_first.Person;
@@ -58,12 +60,26 @@ public class CXFWsdlOnlyPayloadModeNoSpr
         }
 
     }
+    
+    protected void checkSOAPAction(Exchange exchange) {
+        // check the SOAPAction to be null
+        assertNull(exchange.getIn().getHeader("SOAPAction"));
+        
+    }
 
     @Override
     protected RouteBuilder createRouteBuilder() {
         return new RouteBuilder() {
             public void configure() {
                 from("cxf://http://localhost:8092/PersonService?" + PORT_NAME_PROP + "&" + SERVICE_NAME_PROP + getServiceName() + "&" + WSDL_URL_PROP + "&dataFormat=" + getDataFormat())
+                    .process(new Processor() {
+
+                        @Override
+                        public void process(Exchange exchange) throws Exception {
+                            checkSOAPAction(exchange);
+                        }
+                        
+                    })
                     .to("cxf://http://localhost:8093/PersonService?" + PORT_NAME_PROP + "&" + SERVICE_NAME_PROP + getServiceName() + "&" + WSDL_URL_PROP + "&dataFormat=" + getDataFormat());
             }
         };

Modified: camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerProtocalHeaderTest.java
URL: http://svn.apache.org/viewvc/camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerProtocalHeaderTest.java?rev=1086231&r1=1086230&r2=1086231&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerProtocalHeaderTest.java (original)
+++ camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfProducerProtocalHeaderTest.java Mon Mar 28 13:45:07 2011
@@ -41,6 +41,7 @@ public class CxfProducerProtocalHeaderTe
 
                     public void process(Exchange exchange) throws Exception {
                         assertNull("We should not get this header", exchange.getIn().getHeader("CamelCxfTest"));
+                        System.out.println("header " + exchange.getIn().getHeader("SOAPAction"));
                         assertNull("We should not get this header", exchange.getIn().getHeader("Transfer-Encoding"));
                        // check the headers
                         exchange.getOut().setHeader("Content-Type", "text/xml");
@@ -62,7 +63,8 @@ public class CxfProducerProtocalHeaderTe
                 exchange.getIn().setBody(params);
                 exchange.getIn().setHeader(CxfConstants.OPERATION_NAME, "echo");
                 // Test the CxfHeaderFilterStrategy
-                exchange.getIn().setHeader("CamelCxfTest", "test");
+                exchange.getIn().setHeader("CamelCxfTest", "\"test\"");
+                exchange.getIn().setHeader("SOAPAction", "\"test\"");
                 exchange.getIn().setHeader("Transfer-Encoding", "chunked");
             }
         });