This documentation is for WSO2 ESB version 4.5.1. View documentation for the latest release.

Sample 15: Message Enrichment through Synapse

Introduction

This sample demonstrates various capabilities of the Enrich Mediator.

Prerequisites

Refer to Prerequisites section in ESB Samples Setup page.

Building the Sample

1. Start the ESB with sample 15 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 <ESB_HOME>/repository/samples/synapse_sample_15.xml as shown below:

<definitions xmlns="http://synapse.apache.org/ns/2010/04/configuration">
    <sequence name="main">
        <in>
            <enrich>
                <source type="custom"
                        xpath="//m0:getQuote/m0:request/m0:symbol/text()"
                        xmlns:m0="http://services.samples"/>
                <target type="property" property="ORIGINAL_REQ"/>
            </enrich>
            <enrich>
                <source type="body"/>
                <target type="property" property="REQUEST_PAYLOAD"/>
            </enrich>
            <enrich>
                <source type="inline" key="init_req"/>
                <target xmlns:m0="http://services.samples"
                        xpath="//m0:getQuote/m0:request/m0:symbol/text()"/>
            </enrich>
            <send>
                <endpoint>
                    <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
                </endpoint>
            </send>
            <drop/>
        </in>
        <out>
            <header xmlns:urn="http://synapse.apache.org" name="urn:lastTradeTimestamp" value="foo"/>
            <enrich>
                <source type="custom"
                        xpath="//ns:getQuoteResponse/ns:return/ax21:lastTradeTimestamp"
                        xmlns:ns="http://services.samples"
                        xmlns:ax21="http://services.samples/xsd"/>
                <target xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
                        xmlns:urn="http://synapse.apache.org"
                        xpath="/soapenv:Envelope/soapenv:Header/urn:lastTradeTimestamp"/>
            </enrich>
             <log level="full"/>
            <log>
                <property name="Original Request Symbol" expression="get-property('ORIGINAL_REQ')"/>
                <property name="Request Payload" expression="get-property('REQUEST_PAYLOAD')"/>
            </log>
            <send/>
        </out>
    </sequence>
    <localEntry key="init_req">MSFT</localEntry>
    <localEntry key="price_req">
        <m0:symbol xmlns:m0="http://services.samples">MSFT</m0:symbol>
    </localEntry>
</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

The sample client used here is 'Stock Quote Client' which can operate in multiple modes. For instructions on this sample client and its operation modes, refer to Stock Quote Client.

Inside the in-sequence we store/copy different parts of the message to properties. Just before sending the message to the a back-end service the request value is modified based on the local entry 'value-init_req'. Then in the out-sequence, the enrich mediator is used to enrich a soap header based on the 'lastTradeTimestamp' value of the response.

1. Run the following ant command from <ESB_HOME>/samples/axis2Client directory.

ant stockquote -Dtrpurl=http://localhost:8280/services/StockQuote

2. You can try this sample with different local entries as the source with the correct target xpath values.