[
https://issues.apache.org/jira/browse/AXIOM-430?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Andreas Veithen updated AXIOM-430:
----------------------------------
Description:
The SOAPEnvelopeImpl#internalSerialize method contains code that skips the
serialization of the SOAP header if it is empty. Presumably this code is there
because SOAPFactory#getDefaultEnvelope() always creates a SOAP header, but one
doesn't want that header to appear in the output if there are no header blocks.
However, this only works when the SOAPEnvelope is serialized to an
XMLStreamWriter, OutputStream or Writer. The header is still present in the
sequence of events produced by getXMLStreamReader or getSAXSource. This can be
shown using the following piece of code:
{code:java}
SOAPFactory factory = OMAbstractFactory.getSOAP11Factory();
SOAPEnvelope envelope = factory.getDefaultEnvelope();
factory.createOMElement(new QName("urn:test", "test", "p"), envelope.getBody());
envelope.serialize(System.out);
System.out.println();
TransformerFactory.newInstance().newTransformer().transform(envelope.getSAXSource(true),
new StreamResult(System.out));
{code}
The output is:
{code:xml}
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><p:test
xmlns:p="urn:test"/></soapenv:Body></soapenv:Envelope>
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><p:test
xmlns:p="urn:test"/></soapenv:Body></soapenv:Envelope>
{code}
In addition to that, SOAPEnvelopeImpl#internalSerialize also skips
serialization of whitespace and comments.
was:
The SOAPEnvelopeImpl#internalSerialize method contains code that skips the
serialization of the SOAP header if it is empty. Presumably this code is there
because SOAPFactory#getDefaultEnvelope() always creates a SOAP header, but one
doesn't want that header to appear in the output if there are no header blocks.
However, this only works when the SOAPEnvelope is serialized to an
XMLStreamWriter, OutputStream or Writer. The header is still present in the
sequence of events produced by getXMLStreamReader or getSAXSource. This can be
shown using the following piece of code:
SOAPFactory factory = OMAbstractFactory.getSOAP11Factory();
SOAPEnvelope envelope = factory.getDefaultEnvelope();
factory.createOMElement(new QName("urn:test", "test", "p"),
envelope.getBody());
envelope.serialize(System.out);
System.out.println();
TransformerFactory.newInstance().newTransformer().transform(envelope.getSAXSource(true),
new StreamResult(System.out));
The output is:
<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><p:test
xmlns:p="urn:test"/></soapenv:Body></soapenv:Envelope>
<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><p:test
xmlns:p="urn:test"/></soapenv:Body></soapenv:Envelope>
In addition to that, SOAPEnvelopeImpl#internalSerialize also skips
serialization of whitespace and comments.
> Inconsistent serialization of SOAPEnvelope
> ------------------------------------------
>
> Key: AXIOM-430
> URL: https://issues.apache.org/jira/browse/AXIOM-430
> Project: Axiom
> Issue Type: Bug
> Components: DOOM, LLOM
> Affects Versions: 1.2.13
> Reporter: Andreas Veithen
> Priority: Minor
>
> The SOAPEnvelopeImpl#internalSerialize method contains code that skips the
> serialization of the SOAP header if it is empty. Presumably this code is
> there because SOAPFactory#getDefaultEnvelope() always creates a SOAP header,
> but one doesn't want that header to appear in the output if there are no
> header blocks. However, this only works when the SOAPEnvelope is serialized
> to an XMLStreamWriter, OutputStream or Writer. The header is still present in
> the sequence of events produced by getXMLStreamReader or getSAXSource. This
> can be shown using the following piece of code:
> {code:java}
> SOAPFactory factory = OMAbstractFactory.getSOAP11Factory();
> SOAPEnvelope envelope = factory.getDefaultEnvelope();
> factory.createOMElement(new QName("urn:test", "test", "p"),
> envelope.getBody());
> envelope.serialize(System.out);
> System.out.println();
> TransformerFactory.newInstance().newTransformer().transform(envelope.getSAXSource(true),
> new StreamResult(System.out));
> {code}
> The output is:
> {code:xml}
> <?xml version='1.0' encoding='utf-8'?><soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Body><p:test
> xmlns:p="urn:test"/></soapenv:Body></soapenv:Envelope>
> <?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header/><soapenv:Body><p:test
> xmlns:p="urn:test"/></soapenv:Body></soapenv:Envelope>
> {code}
> In addition to that, SOAPEnvelopeImpl#internalSerialize also skips
> serialization of whitespace and comments.
--
This message was sent by Atlassian JIRA
(v6.2#6252)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]