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]

Reply via email to