Hi,

I used fault mediator with both soap 1.1 and pox format where the format of
the generated fault response appeared to be different. With the pox format
some elements of the fault message was missing.

For e.g: This is the response getting for Soap 1.1 format
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
   <soapenv:Body>
      <soapenv:Fault>
         <faultcode xmlns:soap11Env="
http://schemas.xmlsoap.org/soap/envelope/
">soap11Env:VersionMismatch</faultcode>
         <faultstring>Version Mismatch!!</faultstring>
         <detail>There is a version mismatch in the input message</detail>
      </soapenv:Fault>
   </soapenv:Body>
</soapenv:Envelope>

This is how it looks like for POX format.
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/";>
   <soapenv:Header/>
   <soapenv:Body>
      <Exception>There is a version mismatch in the input
message</Exception>
   </soapenv:Body>
</soapenv:Envelope>

I have two concerns on this.

1. The fault reason, code entries we set in the mediator are ommitted when
creating POX fault.
2. For the Pox format it generates an empty <Header> element but in Soap
1.1 that is missing.

When debugging the fault mediator i could see the below reasons for this
output.

1. When we create POX fault there is an if-else block where it first checks
'faultDetail' and else if goes to 'faultDetailExpr' etc. Therefore when the
fault <detail> is there, the other values are ommitted for the fault
payload. However when we create SOAP fault all the details are taken and
set into SOAPFault  object as below.

        setFaultCode(synCtx, factory, fault, soapVersion);
        setFaultReason(synCtx, factory, fault, soapVersion);
        setFaultDetail(synCtx, factory, fault);

I would like to know whether there is any specific reason for doing that.
IMO there is no harm if we provide all data with the POX fault as well
rather than skipping them, since the data are already in the message
context.

2. In the POX fault we add the fault payload as a child and replace the
<body>. But in SOAP fault the whole envelope is getting replaced with new
fault envelope. May be this is why the <soapenv:Header/> is missing there ?

Thanks!
Ishara
-- 
Ishara Premasada
Software Engineer,
WSO2 Inc. http://wso2.com/


*Blog   :  http://isharapremadasa.blogspot.com/
<http://isharapremadasa.blogspot.com/>Twitter       :
https://twitter.com/ishadil <https://twitter.com/ishadil>Mobile       : +94
714445832*
_______________________________________________
Dev mailing list
[email protected]
http://wso2.org/cgi-bin/mailman/listinfo/dev

Reply via email to