...
Before digging into implementation details, let's take a look at the relationship between the example scenario and the Composed Msg. Processor EIP by comparing their core components.
Composed Msg. Processor EIP (Figure 1) | Composed Msg. Processor Example Scenario (Figure 2) |
---|---|
New Order | Stock Quote Request |
Splitter | |
Router | Switch Mediator |
Widget/Gadget Inventory | Stock Quote Service Instance |
Aggregator | |
Validated Order | Aggregated Stock Quote Response |
Environment setup
- Download and install WSO2 ESB from http://wso2.com/products/enterprise-service-bus. For a list of prerequisites and step-by-step installation instructions, refer to Installation Guide in the WSO2 ESB documentation.
- Start two Sample Axis2 server instances in ports 9000 and 9001. For instructions, refer to the section Setting up the ESB Samples - Starting the Axis2 server in the WSO2 ESB documentation.
...
Code Block | ||||
---|---|---|---|---|
| ||||
<?xml version="1.0" encoding="UTF-8"?> <definitions xmlns="http://ws.apache.org/ns/synapse"> <proxy name="ComposedMessageProxy" startOnLoad="true"> <target> <inSequence> <log level="full"/> <iterate xmlns:m0="http://services.samples" preservePayload="true" attachPath="//m0:getQuote" expression="//m0:getQuote/m0:request"> expression="//m0:getQuote/m0:request"> <target> <target> <sequence> <sequence> <switch xmlns:m1="http://services.samples/xsd" source="//m1:symbol"> <case regex="IBM"> <send> <endpoint> <address uri="http://localhost:9000/services/SimpleStockQuoteService"/> </endpoint> </send> </case> <case regex="WSO2"> <send> <endpoint> <address uri="http://localhost:9001/services/SimpleStockQuoteService"/> </endpoint> </send> </case> <default> <drop/> </default> </switch> </sequence> </target> </iterate> </inSequence> <outSequence> <aggregate> <completeCondition> <messageCount/> </completeCondition> <onComplete xmlns:m0="http://services.samples" expression="//m0:getQuoteResponse"> <send/> </onComplete> </aggregate> </outSequence> </target> <publishWSDL uri="file:repositorysamples/samplesservice-bus/resources/proxy/sample_proxy_1.wsdl"/> </proxy> </definitions> |
Simulating the sample scenario
Send the following request using a SOAP client such as SoapUI.
Code Block | ||
---|---|---|
| ||
<soapenv:Envelope <sequence name="fault"> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://services.samples" xmlns:xsd="http://services.samples/xsd"> <soapenv:Header/> <soapenv:Body> <log level="full"> <ser:getQuote> <property name="MESSAGE" value="Executing default "fault" sequence"/> <ser:request> <property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/> <property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/> <xsd:symbol>IBM</xsd:symbol> </log>ser:request> <ser:request> <drop/><xsd:symbol>WSO2</xsd:symbol> </sequence> <sequence name="main">ser:request> <ser:request> <xsd:symbol>IBM</xsd:symbol> <log</>ser:request> <drop</>ser:getQuote> </sequence>soapenv:Body> </definitions> |
Simulating the sample scenario
...
soapenv:Envelope>
|
Note that the three responses are merged together.
Code Block | ||
---|---|---|
| ||
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <ns:getQuoteResponse xmlns:serns="http://services.samples"> <ns:return xsi:type="ax21:GetQuoteResponse" xmlns:xsdax21="http://services.samples/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ax21:change>-2.3524349166988148</ax21:change> <ax21:earnings>13.039287427943174</ax21:earnings> <ax21:high>-147.82215416089954</ax21:high> <ax21:last>150.42944098590854</ax21:last> <ax21:lastTradeTimestamp>Wed Nov <soapenv:Header/> <soapenv:Body>29 13:10:16 IST 2017</ax21:lastTradeTimestamp> <ax21:low>156.00309322666212</ax21:low> <ax21:marketCap>4.0704702811974496E7</ax21:marketCap> <ax21:name>IBM Company</ax21:name> <ser:getQuote><ax21:open>156.54563823303528</ax21:open> <ax21:peRatio>24.744940446245423</ax21:peRatio> <ser:request> <ax21:percentageChange>-1.4082628986156709</ax21:percentageChange> <ax21:prevClose>167.04515321757532</ax21:prevClose> <xsd<ax21:symbol>IBM</xsdax21:symbol> <ax21:volume>19856</ax21:volume> </ser:request>ns:return> </ns:getQuoteResponse> <ns:getQuoteResponse xmlns:ns="http://services.samples"> <ns:return xsi:type="ax21:GetQuoteResponse" xmlns:ax21="http://services.samples/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ax21:change>4.338630296226518</ax21:change> <ax21:earnings>-9.981195004808995</ax21:earnings> <ax21:high>-93.23101400112802</ax21:high> <ax21:last>93.78054915571116</ax21:last> <ax21:lastTradeTimestamp>Wed Nov 29 13:10:16 IST 2017</ax21:lastTradeTimestamp> <ax21:low>-91.67657115464598</ax21:low> <ax21:marketCap>1.2048601227631677E7</ax21:marketCap> <ax21:name>IBM Company</ax21:name> <ax21:open>97.71302391406073</ax21:open> <ax21:peRatio>23.753214298084966</ax21:peRatio> <ser:request><ax21:percentageChange>-4.997221061621991</ax21:percentageChange> <ax21:prevClose>-86.8208598884415</ax21:prevClose> <xsd <ax21:symbol>WSO2<symbol>IBM</xsdax21:symbol> </ser:request><ax21:volume>7120</ax21:volume> </ns:return> </ns:getQuoteResponse> <ns:getQuoteResponse xmlns:ns="http://services.samples"> <ns:return xsi:type="ax21:GetQuoteResponse" xmlns:ax21="http://services.samples/xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <ax21:change>-2.8758173622682595</ax21:change> <ax21:earnings>13.587800448945982</ax21:earnings> <ax21:high>-60.60915794654595</ax21:high> <ax21:last>61.521647372674394</ax21:last> <ax21:lastTradeTimestamp>Wed Nov 29 13:10:16 IST 2017</ax21:lastTradeTimestamp> <ax21:low>63.7318273151116</ax21:low> <ax21:marketCap>1319867.136948647</ax21:marketCap> <ax21:name>WSO2 Company</ax21:name> <ax21:open>64.03367826249405</ax21:open> <ax21:peRatio>23.802458318708982</ax21:peRatio> <ser:request><ax21:percentageChange>-4.319528792063117</ax21:percentageChange> <ax21:prevClose>66.57710830756369</ax21:prevClose> <xsd <ax21:symbol>IBM<symbol>WSO2</xsdax21:symbol> <ax21:volume>16990</ax21:volume> </serns:request>return> </serns:getQuote>getQuoteResponse> </soapenv:Body> </soapenv:Envelope> |
...
How the implementation works
...