Jeff Thomas created AXIS2-5835:
----------------------------------
Summary: AxisFault(SOAPFault) Constructor with SOAP 1.2 SOAPFault
incorrectly propagates FaultCode
Key: AXIS2-5835
URL: https://issues.apache.org/jira/browse/AXIS2-5835
Project: Axis2
Issue Type: Bug
Components: kernel
Affects Versions: 1.7.4
Reporter: Jeff Thomas
Fix For: 1.7.5
If the AxisFault constuctor is used with a SOAP 1.2 SOAPFault representation
(containing SOAP12FaultCodeImpl), the fault-code is incorrectly propagated to
the new fault MessageContext.
Original SOAPFault:
{code:xml}
<soapenv:Fault xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Code>
<soapenv:Value>soapenv:Receiver</soapenv:Value>
<soapenv:SubCode>
<soapenv:Value
xmlns:test="http://www.test.com">test:SOME_CODE</soapenv:Value>
</soapenv:SubCode>
</soapenv:Code>
<soapenv:Reason>
<soapenv:Text xml:lang="en-US">Exception occurred.</soapenv:Text>
</soapenv:Reason>
<soapenv:Detail/>
</soapenv:Fault>
{code}
The result:
{code:xml}
<soapenv:Fault xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Code>
<soapenv:Value/>
<soapenv:SubCode>
<soapenv:Value
xmlns:test="http://www.test.com">test:SOME_CODE</soapenv:Value>
</soapenv:SubCode>
</soapenv:Code>
<soapenv:Reason>
<soapenv:Text xml:lang="en-US">Exception occurred.</soapenv:Text>
</soapenv:Reason>
<soapenv:Detail/>
</soapenv:Fault>
{code}
NOTE: Here the Code/Value should be "soapenv:Receiver" but is empty.
Possible/Probable Reason: (?)
In private static method
"MessageContextBuilder.createFaultEnvelope(MessageContext, Throwable)",
{code:title=MessageContextBuilder.java|borderStyle=solid}
...
else if (axisFault != null) {
...
if (axisFault.getFaultCodeElement() != null) {
fault.setCode(axisFault.getFaultCodeElement());
soapFaultCode = axisFault.getFaultCodeElement().getText();
}
{code}
If the SOAPFaultCodeElement is SOAP 1.2,
{code}axisFault.getFaultCodeElement().getText() = null{code}. I believe here a
check needs to be done on the SOAPFaultCode if SOAP 1.1 or 1.2 and in the event
of 1.2 it should be {code}soapFaultCode =
axisFault.getFaultCodeElement().getValue().getText();{code}.
The result is that in the follow-up code-block the value text is set to an
empty string.
{code}
if (context.isSOAP11()) {
...
} else {
...
SOAPFaultValue value = fault.getCode().getValue();
...
OMNamespace namespace = value.getNamespace();
soapFaultCode = switchNamespacePrefix(soapFaultCode, namespace);
value.setText(soapFaultCode);
}
{code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]