|Table of Contents|
This sample demonstrates the functionality of Switch-Case Mediator. A message is passed through the ESB using the Smart Client mode. The ESB acts as a gateway to accept all messages, write and read local properties on a message instance and then perform mediation based on message properties or content.
For a list of prerequisites, see the Prerequisites section in ESB Samples Setup.
Building the Sample
1. Start the ESB with sample 2 configuration using the instructions given in Starting Sample ESB Configurations.
2. A message should appear in the command or text Linux console stating the server started successfully.
3. The synapse configuration in the ESB used for message mediation in this sample is provided in
synapse_sample_2.xml as shown below:
<definitions xmlns="http://ws.apache.org/ns/synapse"> <sequence name="main"> <in> <switch source="//m0:getQuote/m0:request/m0:symbol" xmlns:m0="http://services.samples"> <case regex="IBM"> <!-- the property mediator sets a local property on the *current* message --> <property name="symbol" value="Great stock - IBM"/> </case> <case regex="MSFT"> <property name="symbol" value="Are you sure? - MSFT"/> </case> <default> <!-- it is possible to assign the result of an XPath expression as well --> <property name="symbol" expression="fn:concat('Normal Stock - ', //m0:getQuote/m0:request/m0:symbol)" xmlns:m0="http://services.samples"/> </default> </switch> <log level="custom"> <!-- the get-property() XPath extension function allows the lookup of local message properties as well as properties from the Axis2 or Transport contexts (i.e. transport headers) --> <property name="symbol" expression="get-property('symbol')"/> <!-- the get-property() function supports the implicit message headers To/From/Action/FaultTo/ReplyTo --> <property name="epr" expression="get-property('To')"/> </log> <!-- Send the messages where they are destined to (i.e. the 'To' EPR of the message) --> <send/> </in> <out> <send/> </out> </sequence> </definitions>
4. Deploy the back-end service 'SimpleStockQuoteService' and start the Axis2 server using the instructions given in section Starting Sample Back-End Services.
5. Now you have a running ESB instance and a back-end service deployed. In the next section, we will send a message to the back-end service through the ESB using a sample client.
Executing the Sample
1. The sample client used here is 'Stock Quote Client' which can operate in several modes. For instructions on this sample client and its operation modes, refer to Stock Quote Client.
Smart Client Mode
Run each of the following ant commands from
<ESB_HOME>/samples/axis2Client directory in the smart client mode, specifying "IBM," "MSFT" and "SUN" as the stock symbols.
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=IBM
2. When the symbol IBM is requested, note in the mediation logs in the ESB start-up console that the case statements' first case for "IBM" is executed and a local property named "symbol" is set to "Great stock - IBM." Subsequently, this local property value is looked up by the
get-property()XPath extension function.
INFO LogMediator - symbol = Great stock - IBM, epr = http://localhost:9000/axis2/services/SimpleStockQuoteService
3. Again execute the smart client as follows:
ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=MSFT
4. The mediation log will be displayed as follows in the ESB start-up console:
INFO LogMediator - symbol = Are you sure? - MSFT, epr = http://localhost:9000/axis2/services/SimpleStockQuoteService
Example of message mediation in WSO2 ESB.