@@ -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