This documentation is for WSO2 Enterprise Service Bus version 4.7.0 . View documentation for the latest release.
Skip to end of metadata
Go to start of metadata

Introduction

This sample demonstrates the functionality of local (static) registry entries and the Validate Mediator. It sends a message from a sample client to a back-end service through the ESB and shows how a static XML fragment could be made available to the ESB's local registry. It is assumed that the resources defined in the local registry are static (never changes over the lifetime of the configuration) and may be specified as a source URL, inline text or inline XML.

Prerequisites

For a list of prerequisites, see the Prerequisites section in ESB Samples Setup.

Building the Sample

1. Start the ESB with sample 7 configuration using the instructions given in Starting Sample ESB Configurations.

2. A message should appear in the command or text Linux console stating the server started successfully.

3. The synapse configuration in the ESB used for message mediation in this sample is provided in <ESB_HOME>/repository/samples/synapse_sample_7.xml as shown below:

<definitions xmlns="http://ws.apache.org/ns/synapse">
    <localEntry key="validate_schema">
        <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="stocksymbol" type="xs:string"/>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
        </xs:schema>
    </localEntry>
    <in>
        <validate>
            <schema key="validate_schema"/>
            <on-fail>
                <!-- if the request does not validate againt schema throw a fault -->
                <makefault>
                    <code value="tns:Receiver"
                            xmlns:tns="http://www.w3.org/2003/05/soap-envelope"/>
                    <reason value="Invalid custom quote request"/>
                </makefault>
                <property name="RESPONSE" value="true"/>
                <header name="To" expression="get-property('ReplyTo')"/>
            </on-fail>
        </validate>
    </in>
    <send/>
</definitions>

4. Deploy the back-end service 'SimpleStockQuoteService' and start the Axis2 server using the instructions given in section Starting Sample Back-End Services.

5. Now you have a running ESB instance and a back-end service deployed. In the next section, we will send a message to the back-end service through the ESB using a sample client.

Executing the Sample

The sample client used here is 'Stock Quote Client' which can operate in several modes. For instructions on this sample client and its operation modes, refer to Stock Quote Client

1. According to synapse_sample_7.xml specified above, the schema is made available under the "validate_schema" key. The Validate Mediator by default operates on the first child element of the SOAP body. You may specify an XPath expression using the source attribute to override this behavior. The Validate Mediator now uses the "validate_schema" resource to validate the incoming message. If the message validation fails, it invokes the "on-fail" sequence of mediators.

2. Run the following ant command from <ESB_HOME>/samples/axis2Client directory.

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

3. The schema validation fails and a fault is generated back with the message "Invalid custom quote request". This is because the schema used in the example expects a slightly different message than what is created by the stock quote client. The schema used in the example expects a stocksymbol element instead of "symbol" to specify the stock symbol.