You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by "Jörg Eichhorn (JIRA)" <ji...@apache.org> on 2006/03/26 20:40:22 UTC

[jira] Created: (AXIS2-517) Additional namespace definition is added to the SOAPEnvelope when loading an existing soapmessage using SAAJ

Additional namespace definition is added to the SOAPEnvelope when loading an existing soapmessage using SAAJ
------------------------------------------------------------------------------------------------------------

         Key: AXIS2-517
         URL: http://issues.apache.org/jira/browse/AXIS2-517
     Project: Apache Axis 2.0 (Axis2)
        Type: Bug
  Components: om  
 Environment: Sun JDK 1.5.0_06
    Reporter: Jörg Eichhorn


When loading a soap message which was created using a different namespace prefix for the soapenvelope than Axis2 does, the namespace definition using the 'soapenv' prefix is added.

When loading the message using the MessageFactory it will internally create a new instance of the class org.apache.axis2.soap.impl.dom.SOAPEnvelopeImpl by using the constructor:
 public SOAPEnvelopeImpl(DocumentImpl doc, OMXMLParserWrapper builder,
                         SOAPFactory factory)

In this constructor it calls the parent constructor with the new namespace definition using the default prefix. When the to be loaded soap message uses a different prefix, this will result into two xmlns definitions with the soap envelope namespace url when writing the message out again. 

A possible solution could be just don't create a the new namespace in the class SOAPEnvelopeImpl and pass null to the parent constructor. 

I tested with axis2 from svn trunk revision 388932.


Sample code:
import java.io.FileInputStream;
import java.io.InputStream;

import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;

public class Test
{
    public static void main(String[] args)
    {
        InputStream in = null;
        try
        {
            in = new FileInputStream("minimalMessage.xml");
            SOAPMessage msg = MessageFactory.newInstance().createMessage(null, in);
            msg.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
            msg.writeTo(System.out);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try { in.close(); } catch (Exception e) { }
        }
    }
}



MinimalMessage:
<?xml version='1.0' ?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Body/>
</env:Envelope>


Output:
<?xml version='1.0' encoding='utf-8'?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Body/>
</env:Envelope>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


[jira] Resolved: (AXIS2-517) Additional namespace definition is added to the SOAPEnvelope when loading an existing soapmessage using SAAJ

Posted by "Ruchith Udayanga Fernando (JIRA)" <ji...@apache.org>.
     [ http://issues.apache.org/jira/browse/AXIS2-517?page=all ]
     
Ruchith Udayanga Fernando resolved AXIS2-517:
---------------------------------------------

    Resolution: Fixed

Revision: 388950
Testcase added:  org.apache.axis2.saaj.SOAPNamespaceTest


> Additional namespace definition is added to the SOAPEnvelope when loading an existing soapmessage using SAAJ
> ------------------------------------------------------------------------------------------------------------
>
>          Key: AXIS2-517
>          URL: http://issues.apache.org/jira/browse/AXIS2-517
>      Project: Apache Axis 2.0 (Axis2)
>         Type: Bug
>   Components: om
>  Environment: Sun JDK 1.5.0_06
>     Reporter: Jörg Eichhorn

>
> When loading a soap message which was created using a different namespace prefix for the soapenvelope than Axis2 does, the namespace definition using the 'soapenv' prefix is added.
> When loading the message using the MessageFactory it will internally create a new instance of the class org.apache.axis2.soap.impl.dom.SOAPEnvelopeImpl by using the constructor:
>  public SOAPEnvelopeImpl(DocumentImpl doc, OMXMLParserWrapper builder,
>                          SOAPFactory factory)
> In this constructor it calls the parent constructor with the new namespace definition using the default prefix. When the to be loaded soap message uses a different prefix, this will result into two xmlns definitions with the soap envelope namespace url when writing the message out again. 
> A possible solution could be just don't create a the new namespace in the class SOAPEnvelopeImpl and pass null to the parent constructor. 
> I tested with axis2 from svn trunk revision 388932.
> Sample code:
> import java.io.FileInputStream;
> import java.io.InputStream;
> import javax.xml.soap.MessageFactory;
> import javax.xml.soap.SOAPMessage;
> public class Test
> {
>     public static void main(String[] args)
>     {
>         InputStream in = null;
>         try
>         {
>             in = new FileInputStream("minimalMessage.xml");
>             SOAPMessage msg = MessageFactory.newInstance().createMessage(null, in);
>             msg.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
>             msg.writeTo(System.out);
>         }
>         catch (Exception e)
>         {
>             e.printStackTrace();
>         }
>         finally
>         {
>             try { in.close(); } catch (Exception e) { }
>         }
>     }
> }
> MinimalMessage:
> <?xml version='1.0' ?>
> <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
>     <env:Body/>
> </env:Envelope>
> Output:
> <?xml version='1.0' encoding='utf-8'?><env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
>     <soapenv:Body/>
> </env:Envelope>

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira