Skip to content

Commit cf9515e

Browse files
committed
SWS-329
1 parent bb84529 commit cf9515e

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

core/src/main/java/org/springframework/ws/soap/saaj/support/SaajContentHandler.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,9 @@ public void startElement(String uri, String localName, String qName, Attributes
9292
for (Iterator iterator = namespaces.keySet().iterator(); iterator.hasNext();) {
9393
String namespacePrefix = (String) iterator.next();
9494
String namespaceUri = (String) namespaces.get(namespacePrefix);
95-
child.addNamespaceDeclaration(namespacePrefix, namespaceUri);
95+
if (!findParentNamespaceDeclaration(child, namespacePrefix, namespaceUri)) {
96+
child.addNamespaceDeclaration(namespacePrefix, namespaceUri);
97+
}
9698
}
9799
element = child;
98100
}
@@ -101,6 +103,25 @@ public void startElement(String uri, String localName, String qName, Attributes
101103
}
102104
}
103105

106+
private boolean findParentNamespaceDeclaration(SOAPElement element, String prefix, String namespaceUri) {
107+
String result = element.getNamespaceURI(prefix);
108+
if (namespaceUri.equals(result)) {
109+
return true;
110+
}
111+
else {
112+
try {
113+
SOAPElement parent = element.getParentElement();
114+
if (parent != null) {
115+
return findParentNamespaceDeclaration(parent, prefix, namespaceUri);
116+
}
117+
}
118+
catch (UnsupportedOperationException ex) {
119+
// ignore
120+
}
121+
return false;
122+
}
123+
}
124+
104125
public void endElement(String uri, String localName, String qName) throws SAXException {
105126
Assert.isTrue(localName.equals(element.getElementName().getLocalName()), "Invalid element on stack");
106127
Assert.isTrue(uri.equals(element.getElementName().getURI()), "Invalid element on stack");

0 commit comments

Comments
 (0)