This site contains the documentation that is relevant to older WSO2 product versions and offerings.
For the latest WSO2 documentation, visit https://wso2.com/documentation/.

Sample 156: Service Integration with specifying the receiving sequence

Note that WSO2 EI is shipped with the following changes to what is mentioned in this documentation:

  • <PRODUCT_HOME>/repository/samples/ directory that includes all Integration profile samples is changed to <EI_HOME>/samples/service-bus/.
  • <PRODUCT_HOME>/repository/samples/resources/ directory that includes all artifacts related to the Integration profile samples is changed to <EI_HOME>/samples/service-bus/resources/.

Objective: Using synapse to integrate services.

<definitions xmlns="http://ws.apache.org/ns/synapse">
    <localEntry key="sec_policy" src="file:repository/conf/sample/resources/policy/policy_3.xml"/>
    <proxy name="StockQuoteProxy">
        <target>
            <inSequence>
                <enrich>
                    <source type="body"/>
                    <target type="property" property="REQUEST"/>
                </enrich>

                <send receive="SimpleServiceSeq">
                    <endpoint name="secure">
                        <address uri="http://localhost:9000/services/SecureStockQuoteService">
                            <enableSec policy="sec_policy"/>
                        </address>
                    </endpoint>
                </send>
            </inSequence>
            <outSequence>
                <drop/>
            </outSequence>
        </target>
    </proxy>
    <sequence name="SimpleServiceSeq">
        <property name="SECURE_SER_AMT" expression="//ns:getQuoteResponse/ns:return/ax21:last"
                xmlns:ns="http://services.samples" xmlns:ax21="http://services.samples/xsd"/>
        <log level="custom">
            <property name="SecureStockQuoteService-Amount" expression="get-property('SECURE_SER_AMT')"/>
        </log>
        <enrich>
            <source type="body"/>
            <target type="property" property="SecureService_Res"/>
        </enrich>
        <enrich>
            <source type="property" property="REQUEST"/>
            <target type="body"/>
        </enrich>
        <header name="Action" scope="default" value="urn:getQuote"/>
        <send receive="ClientOutSeq">
            <endpoint name="SimpleStockQuoteService">
                <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
            </endpoint>
        </send>
    </sequence>
    <sequence name="ClientOutSeq">
        <property name="SIMPLE_SER_AMT" expression="//ns:getQuoteResponse/ns:return/ax21:last"
                       xmlns:ns="http://services.samples" xmlns:ax21="http://services.samples/xsd"/>
        <log level="custom">
            <property name="SimpleStockQuoteService-Amount" expression="get-property('SIMPLE_SER_AMT')"/>
        </log>
        <enrich>
            <source type="body"/>
            <target type="property" property="SimpleService_Res"/>
        </enrich>
        <filter xpath="fn:number(get-property('SIMPLE_SER_AMT')) > fn:number(get-property('SECURE_SER_AMT'))">
            <then>
                <log>
                    <property name="StockQuote" value="SecureStockQuoteService"/>
                </log>
                <enrich>
                    <source type="property" property="SecureService_Res"/>
                    <target type="body"/>
                </enrich>
            </then>
            <else>
                <log>
                    <property name="StockQuote" value="SimpleStockQuoteService"/>
                </log>
            </else>
        </filter>
        <send/>
    </sequence>
</definitions>

Prerequisites:
We will be using two services in this sample; i.e. SimpleStockQuoteService and SecureStockQuoteService. Therefore the prerequisites of sample 100 is also applied here.

  • Start the Synapse configuration numbered 156: i.e. wso2ei-samples.sh -sn 156
  • Start the Axis2 server and deploy the SimpleStockQuoteService if not already done.

This sample contains a proxy service which provides the seamless integration of SimpleStockQuoteService and SecureStockQuoteService. Once a client send a request to this proxy service, it sends the same request to both these services and resolve the service with cheapest stock quote price.

Execute the stock quote client by requesting for a cheapest stock quote from the proxy service as follows:

ant stockquote -Daddurl=http://localhost:8280/services/StockQuoteProxy

Above sample uses the concept of specifying the receiving sequence in the send mediator. In this case once the message is sent from the in sequence then the response won't come to out sequence as the receiving sequence is specified in the send mediator.