You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by John Smith <jo...@msn.com> on 2003/06/10 15:59:01 UTC

Possible Bug in Axis? Duplicate Namespace Declaration

I am using javax.xml.soap implementation to create the soap elements.

When i add a custom Namespace and keep adding the elements in that 
namespace,
then the custom namespace declaration is repeated.

    public void testquick() throws Exception {
        MessageFactory msgfactory = MessageFactory.newInstance();
        SOAPFactory factory = SOAPFactory.newInstance();

        SOAPMessage outputmsg = msgfactory.createMessage();

        SOAPBody bodyout = outputmsg.getSOAPPart().getEnvelope().getBody();

        Name n = factory.createName("HelloWorld","env", 
"http://helloworld.com");

         SOAPBodyElement entry = bodyout.addBodyElement(n);


         n = factory.createName("code","env", "http://helloworld.com");

         SOAPElement element = factory.createElement(n);

         entry.addChildElement(element);


        if (outputmsg != null) {
            if (outputmsg.saveRequired()) {
                outputmsg.saveChanges();
            }

            outputmsg.writeTo(System.out);
        }
    }


Output is:

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
  <env:HelloWorld xmlns:env="http://helloworld.com">
   <env:code xmlns:env="http://helloworld.com"/>  <-- see the Namespace 
declaration is repeated
  </env:HelloWorld>
</soapenv:Body>

Ideal Output is
<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
  <env:HelloWorld xmlns:env="http://helloworld.com">
   <env:code />
  </env:HelloWorld>
</soapenv:Body>


I personally feel this is because of the following code in MessageElement

public MessageElement(String localPart, String prefix, String namespace)
    {
        this.namespaceURI = namespace;
        this.name = localPart;
        this.prefix = prefix;
        addMapping(new Mapping(namespace, prefix)); <-- Adding prefix for 
each declaration without checking whether parent element is in same 
namespace.
    }


Note : Please suggest a solution (If any) using only javax.xml.soap 
interfaces. I want to keep the generic interfaces and not make direct calls 
to MessageElements.


Smith

_________________________________________________________________
Dress up your desktop! Get the best wallpapers. 
http://server1.msn.co.in/msnchannels/Entertainment/wallpaperhome.asp Just 
click here!