Jean Phillippe,

Axis2 is not able to the extract the fault information in this case
because the SOAP fault is invalid: the element children of the Fault
element must be unqualified [1].

Andreas

[1] http://www.ws-i.org/Profiles/BasicProfile-1.1.html#R1001

On Thu, Feb 4, 2010 at 17:35, Jean Philippe DUMAS
<[email protected]> wrote:
> Hello,
>
> Working recently on a webservice, i have to deal with a reponse Soap message
> that contain SoapFault element
> Here is the Soap Fault part of the message :
>
> <e:Envelope xmlns:e="http://schemas.xmlsoap.org/soap/envelope/";><Header
> xmlns="http://schemas.xmlsoap.org/soap/envelope/";>......
> <e:Body>
> <e:Fault>
> <e:faultcode>Client</e:faultcode>
> <e:faultstring>Processing Error</e:faultstring>
> <e:detail>Error detail message .... </ErrorDetail></e:detail>
> </e:Fault>
> </e:Body>
> </e:Envelope>
>
> With axis 1.5.1 (using axiom 1.2.8), axis generated stub was not able to
> populate  the soapFaultElement correctly.
> After more research, I found that it was due to the Qname prefix (e: in my
> example) that axiom was not able to take into account.
>
> Here is a short change I made to the code to resolve it.
>
> class : axiom-impl /
> org.apache.axiom.soap.impl.llom.soap11.SOAP11FaultImpl.java
>
> public SOAPFaultCode getCode() {
>       //return (SOAPFaultCode)
> getFirstChildWithName(SOAP11Constants.QNAME_FAULT_CODE);
>       return (SOAPFaultCode)getFirstChildWithName(new
> QName(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI,SOAP11Constants.SOAP_FAULT_CODE_LOCAL_NAME,getQName().getPrefix()));
>   }
>
>   public SOAPFaultReason getReason() {
>       //return (SOAPFaultReason)
> getFirstChildWithName(SOAP11Constants.QNAME_FAULT_REASON);
>       return (SOAPFaultReason)getFirstChildWithName(new
> QName(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI,SOAP11Constants.SOAP_FAULT_STRING_LOCAL_NAME,getQName().getPrefix()));
>   }
>
>
>   public SOAPFaultRole getRole() {
>       //return (SOAPFaultRole)
> getFirstChildWithName(SOAP11Constants.QNAME_FAULT_ROLE);
>       return (SOAPFaultRole)getFirstChildWithName(new
> QName(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI,SOAP11Constants.SOAP_FAULT_ACTOR_LOCAL_NAME,getQName().getPrefix()));
>   }
>
>   public SOAPFaultDetail getDetail() {
>       //return (SOAPFaultDetail)
> getFirstChildWithName(SOAP11Constants.QNAME_FAULT_DETAIL);
>       return (SOAPFaultDetail)getFirstChildWithName(new
> QName(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI,SOAP11Constants.SOAP_FAULT_DETAIL_LOCAL_NAME,getQName().getPrefix()));
>   }
>
>
> To take into account also SOAP V1.2, this change will have to be inserted in
> the corresponding SOAP 1.2 implementation class.
> Watch out about a possible regression. I haven't found any but ... I a m not
> an official contributor to the project.
>
> Hope my work will help you to improve Axiom .
>
> Regards
>
> Jean Philippe DUMAS
>
>
>

Reply via email to