Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

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 EIPFigure 2: Selective Consumer Example Scenario
Specifying ProducerSimple Stock Quote Client 
Messages with Selection ValuesSimple Stock Quote Request
Selective ConsumerSchema Validator (Validate Mediator)
ReceiverSimple 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
languagehtml/xml
linenumberstrue
<?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 &#34;fault&#34; 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. 

...