Creating a AxisFault using the SOAPFactory does not include the FaultReason in
the SOAP fault response
------------------------------------------------------------------------------------------------------
Key: AXIS2-2752
URL: https://issues.apache.org/jira/browse/AXIS2-2752
Project: Axis 2.0 (Axis2)
Issue Type: Bug
Components: kernel
Affects Versions: 1.2
Reporter: Wolfgang Moestl
Priority: Minor
First creating a AxisFault using the SOAPFactory and throw it
SOAPFactory soapFactory = OMAbstractFactory.getSOAP12Factory();
SOAPFaultCode soapFaultCode = soapFactory.createSOAPFaultCode();
SOAPFaultValue soapFaultValue =
soapFactory.createSOAPFaultValue(soapFaultCode);
soapFaultValue.setText(new
QName(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI, "Sender"));
SOAPFaultReason soapFaultReason =
soapFactory.createSOAPFaultReason();
SOAPFaultText soapFaultText =
soapFactory.createSOAPFaultText(soapFaultReason);
soapFaultText.setText("ReasonValue");
SOAPFaultDetail soapFaultDetail =
soapFactory.createSOAPFaultDetail();
QName qName = new QName("http://mycompany.com",
"FaultException", "ex");
OMElement exception = soapFactory.createOMElement(qName,
soapFaultDetail);
exception.setText("Detail text");
throw new AxisFault(soapFaultCode, soapFaultReason, null, null,
soapFaultDetail);
The resulting SOAP envelope will look like:
<?xml version='1.0' encoding='UTF-8'?>
<soapenv:Envelope xmlns:wsa="http://www.w3.org/2005/08/addressing"
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
<soapenv:Header>
<wsa:Action>http://www.w3.org/2005/08/addressing/soap/fault</wsa:Action>
<wsa:RelatesTo>urn:uuid:EAC15BF38C43D5DD571180618021415</wsa:RelatesTo>
</soapenv:Header>
<soapenv:Body>
<soapenv:Fault>
<soapenv:Code>
<soapenv:Value>soapenv:Sender</soapenv:Value>
</soapenv:Code>
<soapenv:Reason>
<soapenv:Text xml:lang="en-US">unknown</soapenv:Text>
</soapenv:Reason>
<soapenv:Detail>
<ex:FaultException xmlns:ex="http://mycompany.com">Detail
text</ex:FaultException>
</soapenv:Detail>
</soapenv:Fault>
</soapenv:Body>
</soapenv:Envelope>
Please note that the Code and Detail are present as expected, but the Reason
has been substituted with the default reason "unknown".
Fix: If you put the soapFaultReason into the MessageContext before you throw
the AxisFault, the reason appears in the SOAP Fault:
// ... SAME CODE AS ABOVE FROM THE BEGINNING TO THE THROW
COMMAND HERE
MessageContext inMessageContext =
MessageContext.getCurrentMessageContext();
inMessageContext.setProperty(SOAP12Constants.SOAP_FAULT_CODE_LOCAL_NAME,
soapFaultCode);
inMessageContext.setProperty(SOAP12Constants.SOAP_FAULT_REASON_LOCAL_NAME,
soapFaultReason);
inMessageContext.setProperty(SOAP12Constants.SOAP_FAULT_DETAIL_LOCAL_NAME,
soapFaultDetail);
throw new AxisFault(soapFaultCode, soapFaultReason, null, null,
soapFaultDetail);
Putting the reason into the MessageContext should not be necessary IMHO. Either
all 3 items (code, reason, detail) have to be put into the MessageContext or
none of them.
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]