Repository: camel Updated Branches: refs/heads/master feda8de9c -> d62f5120f
CAMEL-7762 Fixed the Camel CxfPayload issue when using namespace with no prefix (xmlns:xmlns) Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/d62f5120 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/d62f5120 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/d62f5120 Branch: refs/heads/master Commit: d62f5120f41ffcf9815451457b184c61ee3fdbba Parents: 72dd7a0 Author: Willem Jiang <willem.ji...@gmail.com> Authored: Fri Aug 29 17:19:20 2014 +0800 Committer: Willem Jiang <willem.ji...@gmail.com> Committed: Fri Aug 29 17:20:01 2014 +0800 ---------------------------------------------------------------------- .../apache/camel/component/cxf/CxfPayload.java | 6 +++- .../camel/component/cxf/DefaultCxfBinding.java | 6 +++- .../component/cxf/DefaultCxfBindingTest.java | 35 ++++++++++++++++++++ 3 files changed, 45 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/d62f5120/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java index 2fad481..1330b0f 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/CxfPayload.java @@ -110,7 +110,11 @@ public class CxfPayload<T> { protected static void addNamespace(Element element, Map<String, String> nsMap) { if (nsMap != null) { for (String ns : nsMap.keySet()) { - element.setAttribute(XMLConstants.XMLNS_ATTRIBUTE + ":" + ns, nsMap.get(ns)); + if (XMLConstants.XMLNS_ATTRIBUTE.equals(ns)) { + element.setAttribute(ns, nsMap.get(ns)); + } else { + element.setAttribute(XMLConstants.XMLNS_ATTRIBUTE + ":" + ns, nsMap.get(ns)); + } } } } http://git-wip-us.apache.org/repos/asf/camel/blob/d62f5120/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java index e80c66a..1c79a4c 100644 --- a/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java +++ b/components/camel-cxf/src/main/java/org/apache/camel/component/cxf/DefaultCxfBinding.java @@ -735,7 +735,11 @@ public class DefaultCxfBinding implements CxfBinding, HeaderFilterStrategyAware protected static void addNamespace(Element element, Map<String, String> nsMap) { for (String ns : nsMap.keySet()) { - element.setAttribute(XMLConstants.XMLNS_ATTRIBUTE + ":" + ns, nsMap.get(ns)); + if (XMLConstants.XMLNS_ATTRIBUTE.equals(ns)) { + element.setAttribute(ns, nsMap.get(ns)); + } else { + element.setAttribute(XMLConstants.XMLNS_ATTRIBUTE + ":" + ns, nsMap.get(ns)); + } } } http://git-wip-us.apache.org/repos/asf/camel/blob/d62f5120/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java ---------------------------------------------------------------------- diff --git a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java index 2faa63f..2097f3e 100644 --- a/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java +++ b/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/DefaultCxfBindingTest.java @@ -27,10 +27,17 @@ import java.util.TreeMap; import javax.activation.DataHandler; import javax.activation.FileDataSource; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; import org.apache.camel.component.cxf.common.message.CxfConstants; +import org.apache.camel.converter.IOConverter; import org.apache.camel.impl.DefaultCamelContext; import org.apache.camel.impl.DefaultExchange; import org.apache.camel.impl.DefaultHeaderFilterStrategy; @@ -43,6 +50,7 @@ import org.apache.cxf.endpoint.Endpoint; import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.message.Attachment; import org.apache.cxf.message.Message; +import org.apache.cxf.message.MessageImpl; import org.easymock.EasyMock; import org.easymock.IMocksControl; import org.junit.Assert; @@ -52,6 +60,11 @@ import org.junit.Test; * */ public class DefaultCxfBindingTest extends Assert { + + private static final String SOAP_MESSAGE = "<soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"" + + " xmlns=\"http://www.mycompany.com/test/\" xmlns:ns1=\"http://www.mycompany.com/test/1/\">" + + " <soap:Body> <request> <ns1:identifier>TEST</ns1:identifier> </request>" + + " </soap:Body> </soap:Envelope>"; private DefaultCamelContext context = new DefaultCamelContext(); @Test @@ -64,6 +77,28 @@ public class DefaultCxfBindingTest extends Assert { } @Test + public void testPayloadBodyNamespace() throws Exception { + MessageImpl message = new MessageImpl(); + DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); + documentBuilderFactory.setNamespaceAware(true); + DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); + Document document = documentBuilder.parse(IOConverter.toInputStream(SOAP_MESSAGE, null)); + document.getDocumentElement().normalize(); + message.setContent(Node.class, document); + Map<String, String> nsMap = new HashMap<String, String>(); + DefaultCxfBinding.getPayloadBodyElements(message, nsMap); + + assertEquals(2, nsMap.size()); + assertEquals("http://www.mycompany.com/test/", nsMap.get("xmlns")); + + document = documentBuilder.newDocument(); + Element element = document.createElement("tag"); + DefaultCxfBinding.addNamespace(element, nsMap); + assertEquals("http://www.mycompany.com/test/", element.getAttribute("xmlns")); + assertEquals("http://www.mycompany.com/test/1/", element.getAttribute("xmlns:ns1")); + } + + @Test public void testSetCharsetWithContentType() { DefaultCxfBinding cxfBinding = new DefaultCxfBinding(); cxfBinding.setHeaderFilterStrategy(new DefaultHeaderFilterStrategy());