It is surely cold here in northeast right now. January does have its own teeth! 😦
I am posting something I found during a SOAP Webservice invocation, which I hope can help you save some time in your development.
There was an error message when a SOAP client gets and parses a response from a SOAP Webservice and it started to complain about something like:
Attribute “xmlns:ns2” was already specified for element …..
It puzzled me at the first glance because in the actual captured SOAP response, the element the error is complaining about has no prefix “ns2” at all. After a couple days of not knowing what is wrong, I finally noticed that the element in the SOAP response has an empty seemingly benign namespace attribute:
This one is actually the culprit! The error is actually indicating that the element SHOULD have a namespace based on the WSDL/XSD (in this case it was designed to have namespace of http://www.w3.org/2005/08/addressing). The empty namespace xmlns=”” triggered the error during parsing! After fixing at the server side to ensure the SOAP response has the correct namespace designated for the element as http://www.w3.org/2005/08/addressing, the problem went away!
Now, the question remains why the error is complaining about the xmlns:ns2? i.e. where does the ns2 prefix come from? It is actually quite obvious when I look at the whole SOAP response. The ns2 prefix is mapped to the URI http://www.w3.org/2005/08/addressing at the root element of the SOAP response, thus, the error is referring to that prefix throughout the whole document.
Next time when we see similar error message to this, we can easily find out what namespace the element of concern should have and enforce it to be assigned correctly.