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/08/17 04:01:43 UTC

svn commit: r1158488 - in /camel/branches/camel-2.8.x: ./ components/camel-cxf/src/main/java/org/apache/camel/component/cxf/ components/camel-cxf/src/test/java/org/apache/camel/component/cxf/

Author: ningjiang
Date: Wed Aug 17 02:01:43 2011
New Revision: 1158488

URL: http://svn.apache.org/viewvc?rev=1158488&view=rev
Log:
Merged revisions 1157831,1158153 via svnmerge from 
https://svn.apache.org/repos/asf/camel/trunk

........
  r1157831 | ningjiang | 2011-08-15 21:00:13 +0800 (Mon, 15 Aug 2011) | 1 line
  
  CAMEL-4336 camel-cxf payload should take consideration of the namespace which is defined in the soap envelope
........
  r1158153 | ningjiang | 2011-08-16 16:34:23 +0800 (Tue, 16 Aug 2011) | 1 line
  
  CAMEL-4336 clean up the test code
........

Added:
    camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConusmerNamespacePayLoadTest.java
      - copied, changed from r1157831, camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConusmerNamespacePayLoadTest.java
Modified:
    camel/branches/camel-2.8.x/   (props changed)
    camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
    camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerMessageTest.java
    camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java

Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Aug 17 02:01:43 2011
@@ -1 +1 @@
-/camel/trunk:1155230,1156108,1156260,1156524,1157348,1157798,1157878
+/camel/trunk:1155230,1156108,1156260,1156524,1157348,1157798,1157831,1157878,1158153

Propchange: camel/branches/camel-2.8.x/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java?rev=1158488&r1=1158487&r2=1158488&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java (original)
+++ camel/branches/camel-2.8.x/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java Wed Aug 17 02:01:43 2011
@@ -28,6 +28,7 @@ import java.util.TreeMap;
 
 import javax.activation.DataHandler;
 import javax.security.auth.Subject;
+import javax.xml.XMLConstants;
 import javax.xml.namespace.QName;
 import javax.xml.transform.Source;
 import javax.xml.transform.dom.DOMSource;
@@ -35,6 +36,7 @@ import javax.xml.ws.Holder;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
 import org.apache.camel.Exchange;
@@ -44,6 +46,8 @@ import org.apache.camel.spi.HeaderFilter
 import org.apache.camel.spi.HeaderFilterStrategyAware;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.cxf.attachment.AttachmentImpl;
+import org.apache.cxf.binding.soap.Soap11;
+import org.apache.cxf.binding.soap.Soap12;
 import org.apache.cxf.binding.soap.SoapBindingConstants;
 import org.apache.cxf.binding.soap.SoapHeader;
 import org.apache.cxf.endpoint.Client;
@@ -618,9 +622,28 @@ public class DefaultCxfBinding implement
         }
         return answer;
     }
-    
+
+    protected static void addNamespace(Element element, Map<String, String> nsMap) {
+        for (String ns : nsMap.keySet()) {
+            element.setAttribute(XMLConstants.XMLNS_ATTRIBUTE + ":" + ns, nsMap.get(ns));
+        }
+                     
+    }
 
     protected static List<Element> getPayloadBodyElements(Message message) {
+        // take the namespace attribute from soap envelop
+        Document soapEnv = (Document) message.getContent(Node.class);
+        Map<String, String> nsMap = new HashMap<String, String>();
+        if (soapEnv != null) {
+            NamedNodeMap attrs = soapEnv.getFirstChild().getAttributes();
+            for (int i = 0; i < attrs.getLength(); i++) {
+                Node node = attrs.item(i);
+                if (!node.getNodeValue().equals(Soap11.SOAP_NAMESPACE)
+                      && !node.getNodeValue().equals(Soap12.SOAP_NAMESPACE)) {
+                    nsMap.put(node.getLocalName(), node.getNodeValue());
+                }
+            }
+        }
         MessageContentsList inObjects = MessageContentsList.getContentsList(message);
         if (inObjects == null) {
             return null;
@@ -667,6 +690,7 @@ public class DefaultCxfBinding implement
                 }
 
                 if (element != null) {
+                    addNamespace(element, nsMap);
                     answer.add(element);
                 }
                 
@@ -675,6 +699,7 @@ public class DefaultCxfBinding implement
                               element == null ? "null" : XMLUtils.toString(element));
                 }
             } else if (part instanceof Element) {
+                addNamespace((Element)part, nsMap);
                 answer.add((Element)part);
             } else {
                 if (LOG.isDebugEnabled()) {

Modified: camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerMessageTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerMessageTest.java?rev=1158488&r1=1158487&r2=1158488&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerMessageTest.java (original)
+++ camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerMessageTest.java Wed Aug 17 02:01:43 2011
@@ -72,7 +72,7 @@ public class CxfConsumerMessageTest exte
     }
     
     @Test
-    public void testInvokingServiceFromCXFClient() throws Exception {
+    public void testInvokingServiceFromClient() throws Exception {
         ClientProxyFactoryBean proxyFactory = new ClientProxyFactoryBean();
         ClientFactoryBean clientBean = proxyFactory.getClientFactoryBean();
         clientBean.setAddress(simpleEndpointAddress);

Modified: camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java?rev=1158488&r1=1158487&r2=1158488&view=diff
==============================================================================
--- camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java (original)
+++ camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConsumerPayloadTest.java Wed Aug 17 02:01:43 2011
@@ -39,6 +39,16 @@ public class CxfConsumerPayloadTest exte
             + "<arg0 xmlns=\"http://cxf.component.camel.apache.org/\">Hello World!</arg0></ns1:echo>";
     private static final String ECHO_BOOLEAN_REQUEST = "<ns1:echoBoolean xmlns:ns1=\"http://cxf.component.camel.apache.org/\">"
             + "<arg0 xmlns=\"http://cxf.component.camel.apache.org/\">true</arg0></ns1:echoBoolean>";
+    
+    private static final String ELEMENT_NAMESPACE = "http://cxf.component.camel.apache.org/";
+    
+    protected void checkRequest(String expect, String request) {
+        if (expect.equals("ECHO_REQUEST")) {
+            assertEquals("Get a wrong request", ECHO_REQUEST, request);
+        } else {
+            assertEquals("Get a wrong request", ECHO_BOOLEAN_REQUEST, request);
+        }
+    }
 
     // START SNIPPET: payload
     protected RouteBuilder createRouteBuilder() {
@@ -54,11 +64,17 @@ public class CxfConsumerPayloadTest exte
                         String request = exchange.getIn().getBody(String.class);
                         XmlConverter converter = new XmlConverter();
                         String documentString = ECHO_RESPONSE;
+                        
+                        // Just check the element namespace
+                        if (!inElements.get(0).getNamespaceURI().equals(ELEMENT_NAMESPACE)) {
+                            throw new IllegalArgumentException("Wrong element namespace");
+                        }
                         if (inElements.get(0).getLocalName().equals("echoBoolean")) {
                             documentString = ECHO_BOOLEAN_RESPONSE;
-                            assertEquals("Get a wrong request", ECHO_BOOLEAN_REQUEST, request);
+                            checkRequest("ECHO_BOOLEAN_REQUEST", request);
                         } else {
-                            assertEquals("Get a wrong request", ECHO_REQUEST, request);
+                            documentString = ECHO_RESPONSE;
+                            checkRequest("ECHO_REQUEST", request);
                         }
                         Document outDocument = converter.toDOMDocument(documentString);
                         outElements.add(outDocument.getDocumentElement());

Copied: camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConusmerNamespacePayLoadTest.java (from r1157831, camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConusmerNamespacePayLoadTest.java)
URL: http://svn.apache.org/viewvc/camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConusmerNamespacePayLoadTest.java?p2=camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConusmerNamespacePayLoadTest.java&p1=camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConusmerNamespacePayLoadTest.java&r1=1157831&r2=1158488&rev=1158488&view=diff
==============================================================================
--- camel/trunk/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConusmerNamespacePayLoadTest.java (original)
+++ camel/branches/camel-2.8.x/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/CxfConusmerNamespacePayLoadTest.java Wed Aug 17 02:01:43 2011
@@ -25,6 +25,11 @@ import org.apache.http.util.EntityUtils;
 import org.junit.Test;
 
 public class CxfConusmerNamespacePayLoadTest extends CxfConsumerPayloadTest {
+    private static final String ECHO_RESPONSE = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"
+        + "<soap:Body><ns1:echoResponse xmlns:ns1=\"http://cxf.component.camel.apache.org/\">"
+        + "<return xmlns=\"http://cxf.component.camel.apache.org/\">echo Hello World!</return>"
+        + "</ns1:echoResponse></soap:Body></soap:Envelope>";
+    
     private static final String ECHO_REQUEST = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" "
         + "xmlns:ns1=\"http://cxf.component.camel.apache.org/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" "
         + "xmlns:ns2=\"http://cxf.component.camel.apache.org/\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"><soap:Body>"
@@ -49,11 +54,10 @@ public class CxfConusmerNamespacePayLoad
 
         try {
             HttpResponse response = httpclient.execute(post);
-            //assertEquals(200, response.getStatusLine().getStatusCode());
+            assertEquals(200, response.getStatusLine().getStatusCode());
             String responseBody = EntityUtils.toString(response.getEntity());
-            System.out.println(responseBody);
             
-            //assertEquals("Get a wrong response", correct, responseBody);
+            assertEquals("Get a wrong response", ECHO_RESPONSE, responseBody);
         } finally {
             httpclient.getConnectionManager().shutdown();
         }