This documentation is for WSO2 Enterprise Integrator version 6.1.1 . View documentation for the latest release in the 6.x.x family and the latest release in the 7.x.x family.

All docs This doc
Skip to end of metadata
Go to start of metadata

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:  Rule based routing - Switching routing decision according to the rules.

<!-- Simple rule based routing  of messages - same as filter mediator -->
<definitions xmlns="http://ws.apache.org/ns/synapse">

    <sequence name="main">

        <in>
            <rule xmlns="http://wso2.org/carbon/rules">
                <source>soapBody</source>
                <target action="replace" resultXpath="//accept/child::text()">$accept</target>
                <ruleSet>
                    <properties/>
                    <rule resourceType="regular" sourceType="inline">
                        <![CDATA[ package SimpleRoutingRules;

                        rule "Invoke IBM" no-loop true
                        when
                        symbol: String()eval( symbol.equals("IBM") )
                        then
                         update(drools.getWorkingMemory().getFactHandle(symbol),"ibmEndPoint");
                        end

                        rule "Invoke SUN" no-loop true
                        when
                        symbol: String()eval( symbol.equals("SUN") )
                        then
                         update(drools.getWorkingMemory().getFactHandle(symbol),"sunEndPoint");
                        end

                        rule "Invoke MFST" no-loop true
                        when
                        symbol: String()eval( symbol.equals("MFST") )
                        then
                         update(drools.getWorkingMemory().getFactHandle(symbol),"mfstEndPoint");
                        end
                        ]]>
                    </rule>
                </ruleSet>
                <input namespace="http://services.samples" wrapperElementName="getQuote">
                    <fact xmlns:m0="http://services.samples" elementName="symbol" namespace="http://services.samples"
                          type="java.lang.String" xpath="//m0:getQuote/m0:request/m0:symbol/child::text()"/>
                </input>
                <output namespace="http://services.samples" wrapperElementName="getQuoteRespone">
                    <fact elementName="accept" namespace="" type="java.lang.String"/>
                </output>
            </rule>


            <switch source="get-property('accept')">
                <case regex="ibmEndPoint">
                    <send>
                        <endpoint>
                            <address uri="http://localhost:9000/services/SimpleStockQuoteService"/>
                        </endpoint>
                    </send>
                </case>
                <case regex="sunEndPoint">
                    <sequence key="nonExistentService"/>
                </case>
                <case regex="mfstEndPoint">
                     <sequence key="nonExistentService"/>
                </case>
            </switch>

            <drop/>

        </in>
        <out>
            <send/>
        </out>

    </sequence>

    <sequence name="nonExistentService" onError="myFaultHandler">

        <send>
            <endpoint>
                <address uri="http://localhost:9009/services/NonExistentStockQuoteService"/>
            </endpoint>
        </send>
        <drop/>

    </sequence>
    <sequence name="myFaultHandler">
        <makefault>
            <code value="tns:Receiver" xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
            <reason expression="get-property('ERROR_MESSAGE')"/>
        </makefault>

        <property name="RESPONSE" value="true"/>
        <header name="To" expression="get-property('ReplyTo')"/>
        <send/>
    </sequence>

</definitions>

 

Prerequisites:

  • Start the Synapse configuration numbered 601: i.e. (i.e. ./wso2ei-samples.sh -sn 601)
  • Start the Axis2 server and deploy the SimpleStockQuoteService if not already deployed
  • In rule script , there are three cases each for 'IBM','SUN' and 'MSFT'. When condition is match , then corresponding rule will be got fire.
Invoke IBM rule by running client as,


ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ 

You will get stock quote price successfully

Then invoke SUN (or MSFT) rule by running client as,

ant stockquote -Daddurl=http://localhost:9000/services/SimpleStockQuoteService -Dtrpurl=http://localhost:8280/ -Dsymbol=SUN

Then will get,

<soapenv:Fault xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>soapenv:Server</faultcode>
<faultstring>java.net.ConnectException: Connection refused
</faultstring>
<detail />
</soapenv:Fault>






  • No labels