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