-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
+1 for a SenderFault AND also for a ReceiverFault classe as that eases
users requiring to understand SOAP Fault codes and Axis2 fault processing ;)
Chinthaka
Glen Daniels wrote:
> Hi all!
>
> Comments inline.
>
> Eran Chinthaka wrote:
>>> * Further debugging showed me Axis2 defaults to FaultCode Sender if
>>> the faultcode is null and if the there isn't a SOAPEnvelope (line 484-
>>> MessageContextBuilder), which is the exact case when throwing an
>>> exception from the messageReceiver...
>>
>> Yes this I did intentionally. The reason is that if there is no fault
>> code, what will be the default fault code? When I was writing this code
>> I searched this in SOAP 1.2 spec[1] and WS-I BP also but couldn't find
>> one.
>> So I assumed whatever the service implementation is always correct and
>> it is client that is always wrong if there is a problem :). Well you
>> have to make either the sender or receiver guilty if you have to guess
>> at one point. So I selected to make sender guilty.
>
> I'm not sure it's a huge deal, but I think this was the wrong decision.
>
> The Sender fault code indicates to the sender that there's a good chance
> that if they were to fix some problem in their message and try again,
> the request might succeed. In the case of a random fault thrown by some
> component in the Axis2 processing chain, I don't think we have any such
> knowledge. There are really two issues here - one is that we SHOULD
> make it easier to be more clear about whether a fault is due to sender
> error or a server problem. The second is what we should do when we
> really have no idea. I think this is exactly equivalent to what Tomcat
> or Apache have to do when a generic exception is caught - the answer
> there is typically an HTTP 500 "General Server Error" or the like. The
> SOAP equivalent is not a Sender fault, but a Receiver one, so I think
> that should be our default.
>
> As for the issue of ease-of-use, perhaps we should consider extending
> AxisFault with a "SenderFault" class (which would set the fault code
> explicitly to Sender), and then custom exceptions which had to do with
> bad data could extend or throw that? I.e.
>
> class MyMessageReceiver {
> public invokeBusinessLogic() {
> if (value > max) throw new SenderFault("Out of range!");
> if (somethingElseBad) throw new AxisFault("Failed");
> }
> }
>
>>> * Then in the AxisServlet (line 385) when using SOAP12 we are setting
>>> the response http status code to BAD_REQUEST(400) if the FaultCode is
>>> sender which was the result of the SOAPFault with http-400...
>>
>> According to RFC2616 HTTP 400 is the correct HTTP status code if the
>> fault is with the client. Also according to SOAP 1.2 HTTP binding[2]
>> status code should be 400 when the fault code is Sender
>
> +1
>
>>> * Axis2 client does not process the body of the message if the http
>>> status code is 400...
>>
>> I think this can be a bug in Axis2 code as status code 400 doesn't mean
>> it should not process this.
>
> +1, we should definitely be looking for SOAP faults unless there's a
> known code like 404. But we need to make sure we handle HTML responses
> from servers too if at all possible.
>
> Thanks,
> --Glen
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.3 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQFGgelcjON2uBzUhh8RAvFEAJ0Qyt09L7dvRDohcTLVIg69y9fK1QCgl2mI
5wuY2N/LkmBaBfzogmIYfj0=
=N3zd
-----END PGP SIGNATURE-----
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]