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