From cf9515e2698867d3b4330b58a1c00ac087889fe5 Mon Sep 17 00:00:00 2001 From: Arjen Poutsma Date: Tue, 6 May 2008 11:28:16 +0000 Subject: [PATCH] SWS-329 --- .../soap/saaj/support/SaajContentHandler.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/springframework/ws/soap/saaj/support/SaajContentHandler.java b/core/src/main/java/org/springframework/ws/soap/saaj/support/SaajContentHandler.java index 6da25b46..55481f1a 100644 --- a/core/src/main/java/org/springframework/ws/soap/saaj/support/SaajContentHandler.java +++ b/core/src/main/java/org/springframework/ws/soap/saaj/support/SaajContentHandler.java @@ -92,7 +92,9 @@ public class SaajContentHandler implements ContentHandler { for (Iterator iterator = namespaces.keySet().iterator(); iterator.hasNext();) { String namespacePrefix = (String) iterator.next(); String namespaceUri = (String) namespaces.get(namespacePrefix); - child.addNamespaceDeclaration(namespacePrefix, namespaceUri); + if (!findParentNamespaceDeclaration(child, namespacePrefix, namespaceUri)) { + child.addNamespaceDeclaration(namespacePrefix, namespaceUri); + } } element = child; } @@ -101,6 +103,25 @@ public class SaajContentHandler implements ContentHandler { } } + private boolean findParentNamespaceDeclaration(SOAPElement element, String prefix, String namespaceUri) { + String result = element.getNamespaceURI(prefix); + if (namespaceUri.equals(result)) { + return true; + } + else { + try { + SOAPElement parent = element.getParentElement(); + if (parent != null) { + return findParentNamespaceDeclaration(parent, prefix, namespaceUri); + } + } + catch (UnsupportedOperationException ex) { + // ignore + } + return false; + } + } + public void endElement(String uri, String localName, String qName) throws SAXException { Assert.isTrue(localName.equals(element.getElementName().getLocalName()), "Invalid element on stack"); Assert.isTrue(uri.equals(element.getElementName().getURI()), "Invalid element on stack");