You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by bu...@apache.org on 2002/11/01 19:43:14 UTC
DO NOT REPLY [Bug 14175] New: -
SOAPConnection.call() not behaving properly when a SOAP Fault is returned
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14175>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=14175
SOAPConnection.call() not behaving properly when a SOAP Fault is returned
Summary: SOAPConnection.call() not behaving properly when a SOAP
Fault is returned
Product: Axis
Version: 1.0-rc1
Platform: PC
OS/Version: Windows NT/2K
Status: NEW
Severity: Normal
Priority: Other
Component: Basic Architecture
AssignedTo: axis-dev@xml.apache.org
ReportedBy: Chris.Bowley@genericsgroup.com
I am using the JAXM & SAAJ APIs to write some client code that must be portable
across SOAP implementations. I find that the behaviour of Axis and the Java XML
Pack Summer 02 differs radically when a SOAP Fault is returned from the server.
In the following simple code fragment from my app where all the types are from
the jaxm.xml.soap namespace:
SOAPConnectionFactory connFctry = SOAPConnectionFactory.newInstance();
SOAPConnection conn = connFctry.createConnection();
// send the SOAP message and wait for the response
SOAPMessage respMsg = conn.call(m_reqMsg, soapAddressURL);
SOAPBody respBody = respMsg.getSOAPPart().getEnvelope().getBody();
if (respBody.hasFault())
{
m_responseFault = respBody.getFault();
the XML Pack returns a SOAPMessage from conn.call() which ultimately contains a
SOAPFault whereas Axis throws a SOAPException with the cause set to an
AxisFault in conn.call(). Some other sample code I have seen also assumes that
a SOAP Fault will be returned the way the XML Pack does it.
Tracing through the Axis code I see that
org.apache.axis.client.Call.invokeEngine() contains the lines
SOAPBodyElement respBody = resEnv.getFirstBody();
if (respBody instanceof SOAPFault) {
throw ((SOAPFault)respBody).getFault();
}
This first throw is caught and passed on a few times before returning to my
code. I haven't gone into the code deeply enough to figure out what it would
take to fix this.
For completeness here is the SOAP Response being sent back.
<?xml version="1.0" encoding="utf-8" ?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header/>
<soap:Body>
<soap:Fault>
<faultcode>client.gns.admin.test</faultcode>
<faultstring>test returned fault</faultstring>
<faultactor>tester</faultactor>
<detail>
<DetailString xmlns="http://vodafone.net/ns/gns/framework/1">This is a test
return message.</DetailString>
</detail>
</soap:Fault>
</soap:Body>
</soap:Envelope>