Hi everyone,
I want to direct your attention to how OUT_FAULT_FLOW is triggered in Axis2.


1) The short story

When a request is received by the TransportListener (TL) (e.g. AxisServlet)
then it invokes the AxisEngine (i.e. AxisEngine#receive(msgContext)). If
there is a fault condition it is thrown by the engine and caught by the
TransportListener. What happens is that the whole logic about triggering the
OUT_FAULT_FLOW phases is placed into the TL, but not into the engine itself.

You can refer to the AxisEngine#doPost() which in turn invokes its private
processAxisFault() when there is a fault condition.

2) The problem

IMHO we can meet the following issue. If someone wants to create a custom TL
then it should have the "processAxisFault" logic implemented into it. Since
this is not well documented (I did not find a proper docu about this) it
come out that the TL is missing this logic need and will not work properly.


3) The proposal

a) I did a short research and did not find any obstacle to include the the
"processAxisFault" logic into the engine itself (basically
AxisEngine#sendFault(faultContext) should be called). IMHO doing so the
architecture of Axis2 will be simplified and the fault logic will be
decoupled from the TL implementation. Of course some HttpServletResponse
processing should take place into the TL, but this is something more natural
to do ( ;) better known and/or understanded/documented).

I think that this is worth having to be discussed.

Please share your comments/opinions.

Thank you in advance,
Dobri

Reply via email to