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