This section explains, through an example scenario, how the Selective Consumer EIP can be implemented using WSO2 ESB. The following topics are covered:
Table of Contents |
---|
...
Before digging into implementation details, let's take a look at the relationship between the example scenario and the Selective Consumer EIP by comparing their core components.
Figure 1: Selective Consumer EIP | Figure 2: Selective Consumer Example Scenario |
---|---|
Specifying Producer | Simple Stock Quote Client |
Messages with Selection Values | Simple Stock Quote Request |
Selective Consumer | Schema Validator (Validate Mediator) |
Receiver | Simple Stock Quote Server |
Environment Set up
1. Download an install the WSO2 ESB from http://wso2.com/products/enterprise-service-bus. For a list of prerequisites and step-by-step installation instructions, refer to Getting Started in the WSO2 ESB documentation.
...
Code Block | ||||
---|---|---|---|---|
| ||||
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://ws.apache.org/ns/synapse">
<localEntry key="selective_criteria">
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="http://www.apache-synapse.org/test"
elementFormDefault="qualified"
attributeFormDefault="unqualified"
targetNamespace="http://services.samples">
<xs:element name="getQuote">
<xs:complexType>
<xs:sequence>
<xs:element name="request">
<xs:complexType>
<xs:sequence>
<xs:element name="stockvalue" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
</localEntry>
<sequence name="fault">
<log level="full">
<property name="MESSAGE" value="Executing default "fault" sequence"/>
<property name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
<property name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
</log>
<drop/>
</sequence>
<sequence name="main">
<in>
<validate>
<schema key="selective_criteria"/>
<on-fail>
<makefault>
<code xmlns:tns="http://www.w3.org/2003/05/soap-envelope" value="tns:Receiver"/>
<reason value="Invalid custom quote request"/>
</makefault>
<property name="RESPONSE" value="true"/>
<header name="To" expression="get-property('ReplyTo')"/>
<drop/>
</on-fail>
</validate>
<send>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService?wsdl"/>
</endpoint>
</send>
</in>
<out>
<send/>
</out>
</sequence>
</definitions> |
Simulating the Sample Scenario
4. Send the following request using a client like SOAP UI.
...
Let's investigate the elements of the ESB configuration in detail. The line numbers below are mapped with refer to the ESB configuration illustrated in step 3 abovein step 3 above.
- localEntry [line 3 in ESB config] - a A local registry entry with key 'selective_criteria' is used to define the XML Schema that will be schema used for validation inside the main sequence.
- validate [line 34] in ESB config] - this This mediator is used to define the portion of a message that is going to be used for validation - in the case . In this example, no source attribute is specified using an XPath expression, which . It makes the ESB perform the validation on the first child of the SOAP body.
- scehma [line 35 in ESB config] - this defines Defines which schema to use for validation - in this case . In this example, the local registry entry definition made in line 3 is used.
- on-fail [line 36 in ESB config] - this defines Defines what is to be carried out on failure of a validation - in this case . In this example, a fault is created and the message is dropped.
...