Soap envelope rpc-encoded namespace issue
------------------------------------------
Key: WSCOMMONS-459
URL: https://issues.apache.org/jira/browse/WSCOMMONS-459
Project: WS-Commons
Issue Type: Bug
Components: AXIOM
Affects Versions: Axiom 1.2.8
Environment: java 1.6
Reporter: Luca Cavanna
I have replaced saaj with axiom in my projects to manage soap handling.
I have an rpc-encoded soap envelope containing the declarations of soapenv
(xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/") and xsi
(xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance") namespaces.
The first element of the soap body references soapenv in one of his attributes
(soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"). Some xml
elements in the soap body reference the xsi namespace
(xsi:type="soapenc:string") as well.
When I try to parse the soap body (extracted from the soap envelope) using JDOM
or DOM4J I get a SaxParseException because the soapenv and xsi namespaces are
not bound:
org.xml.sax.SAXParseException: The prefix "soapenv" for attribute
"soapenv:encodingStyle" associated with an element type "ns1:sendMessage" is
not bound.
Saaj handles correctly the soapenv and and xsi declarations moving them in the
soap body; with axiom the soap body contain only the reference to those
namespaces and not the declarations.
The issue seems to be creating a StAXSource from Axiom payload element
(obtained by calling
axiomSoapMessage.getSOAPEnvelope().getBody().getFirstElement()); serializing
payload calling serialize method namespace are correctly handled, but
creating a StAXSource using XMLStreamReader and transforming it to a
StreamResult I get an xml not parseable because namespaces are not bound.
I have found a workaround transforming the StAXSource in a JDOMResult.
The problem rises when you create a StAXSource from an Axiom payload element
(calling axiomSoapMessage.getSOAPEnvelope().getBody().getFirstElement()). When
you call the serialize method, namespaces are correctly handled; but if you
create a StAXSource using an XMLStreamReader and try to transform it to a
StreamResult you get the SaxParseException mentioned above.
I have found a workaround transforming the StAXSource in a JDOMResult.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.