<definitions xmlns="http://ws.apache.org/ns/synapse">
<!-- the default fault handling sequence used by Synapse - named 'fault' -->
<sequence name="fault">
<log level="custom">
<property name="text" value="An unexpected error occured"/>
<property name="message" expression="get-property('ERROR_MESSAGE')"/>
</log>
<drop/>
</sequence>
<sequence name="sunErrorHandler">
<log level="custom">
<property name="text" value="An unexpected error occured for stock SUN"/>
<property name="message" expression="get-property('ERROR_MESSAGE')"/>
<!--<property name="detail" expression="get-property('ERROR_DETAIL')"/>-->
</log>
<drop/>
</sequence>
<sequence name="main">
<in>
<switch xmlns:m0="http://services.samples" source="//m0:getQuote/m0:request/m0:symbol">
<case regex="IBM">
<send>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
</endpoint>
</send>
</case>
<case regex="MSFT">
<send>
<endpoint key="bogus"/>
</send>
</case>
<case regex="SUN">
<sequence key="sunSequence"/>
</case>
</switch>
<drop/>
</in>
<out>
<send/>
</out>
</sequence>
<sequence name="sunSequence" onError="sunErrorHandler">
<send>
<endpoint key="sunPort"/>
</send>
</sequence>
</definitions>
Executing the Client
First send a stock quote request from the sample client for the symbol 'IBM' as
follows.
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=IBM
The request will be routed to the Axis2 server and client will receive a response
as expected.
Standard :: Stock price = $95.26454380258552
Now send another stock quote request for the symbol 'MSFT' as follows.
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=MSFT
For MSFT requests Synapse is instructed to route the messages to an endpoint named
'bogus', which does not exist. Synapse executes the specified error handler
sequence closest to the point where the error was encountered. In this case, the
currently executing sequence is 'main' and it does not specify an 'onError'
attribute. Whenever Synapse cannot find an error handler, it looks for a sequence
named 'fault'. Thus the 'fault' sequence can be seen executing, and writing the
generic error message to the logs.
[HttpServerWorker-1] DEBUG SendMediator - Send mediator :: mediate()
[HttpServerWorker-1] ERROR IndirectEndpoint - Reference to non-existent endpoint for key : bogus
[HttpServerWorker-1] DEBUG MediatorFaultHandler - MediatorFaultHandler :: handleFault
[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator <fault> :: mediate()
[HttpServerWorker-1] DEBUG LogMediator - Log mediator :: mediate()
[HttpServerWorker-1] INFO LogMediator text = An unexpected error occured, message = Couldn't find the endpoint with the key : bogus
Now send another stock quote request for the symbol 'SUN'.
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=SUN
When the 'SUN' quote is requested, a custom sequence 'sunSequence' is invoked,
and it specifies 'sunErrorHandler' as its error handler. Hence when the send
fails, you could see the proper error handler invocation and the custom error
message printed as follows.
[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator <sunSequence> :: mediate()
[HttpServerWorker-1] DEBUG SequenceMediator - Setting the onError handler for the sequence
[HttpServerWorker-1] DEBUG AbstractListMediator - Implicit Sequence <SequenceMediator> :: mediate()
[HttpServerWorker-1] DEBUG SendMediator - Send mediator :: mediate()
[HttpServerWorker-1] ERROR IndirectEndpoint - Reference to non-existent endpoint for key : sunPort
[HttpServerWorker-1] DEBUG MediatorFaultHandler - MediatorFaultHandler :: handleFault
[HttpServerWorker-1] DEBUG SequenceMediator - Sequence mediator <sunErrorHandler> :: mediate()
[HttpServerWorker-1] DEBUG AbstractListMediator - Implicit Sequence <SequenceMediator> :: mediate()
[HttpServerWorker-1] DEBUG LogMediator - Log mediator :: mediate()
[HttpServerWorker-1] INFO LogMediator text = An unexpected error occured for stock SUN, message = Couldn't find the endpoint with the key : sunPort