This section explains, through an example scenario, how the Normalizer EIP can be implemented using WSO2 ESB. The following topics are covered:
Table of Contents |
---|
...
Code Block | ||||
---|---|---|---|---|
| ||||
<definitions xmlns="http://ws.apache.org/ns/synapse">
<!-- The proxy service to receive all kinds of messages -->
<proxy name="ServiceProxy" transports="https http" startOnLoad="true" trace="disable">
<description/>
<target>
<inSequence>
<log level="full"/>
<!-- Filters incoming JSON messages -->
<filter xmlns:m0="http://services.samples" xpath="//m0:getQuote/m0:request/m0:symbol">
<then>
<sequence key="sendSeq"/>
</then>
<else>
<sequence key="jsonInTransformSeq"/>
</else>
</filter>
</inSequence>
<outSequence>
<!-- Filters outgoing JSON messages -->
<filter source="get-property('TRANSFORMATION')" regex="JSONtoSOAP">
<then>
<property name="messageType" value="application/json" scope="axis2" type="STRING"/>
</then>
</filter>
<log level="full"/>
<send/>
</outSequence>
</target>
</proxy>
<localEntry key="in_transform">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fn="http://www.w3.org/2005/02/xpath-functions"
xmlns:m0="http://services.samples"
version="2.0"
exclude-result-prefixes="m0 fn">
<xsl:output method="xml" omit-xml-declaration="yes" indent="yes"/>
<xsl:template match="*">
<xsl:element name="{local-name()}" namespace="http://services.samples">
<xsl:copy-of select="attribute::*"/>
<xsl:apply-templates/>
</xsl:element>
</xsl:template>
</xsl:stylesheet>
</localEntry>
<!-- Transform a JSON message -->
<sequence name="jsonInTransformSeq">
<xslt key="in_transform"/>
<property name="TRANSFORMATION" value="JSONtoSOAP" scope="default" type="STRING"/>
<enrich>
<source clone="true" xmlns:m0="http://services.samples" xmlns:ns="http://org.apache.synapse/xsd" xpath="//m0:getQuote"/>
<target type="body"/>
</enrich>
<header name="Action" scope="default" value="urn:getQuote"/>
<sequence key="sendSeq"/>
</sequence>
<!-- Normal flow of messages -->
<sequence name="sendSeq">
<send>
<endpoint>
<address uri="http://localhost:9000/services/SimpleStockQuoteService" format="soap11"/>
</endpoint>
</send>
</sequence>
<sequence name="fault">
<log level="full">
<property name="MESSAGE" value="Executing default 'fault' sequence"/>
<property xmlns:ns="http://org.apache.synapse/xsd" name="ERROR_CODE" expression="get-property('ERROR_CODE')"/>
<property xmlns:ns="http://org.apache.synapse/xsd" name="ERROR_MESSAGE" expression="get-property('ERROR_MESSAGE')"/>
</log>
<drop/>
</sequence>
<sequence name="main">
<log/>
<drop/>
</sequence>
</definitions> |
...
Simulating the sample scenario
You can test this configuration for JSON, SOAP, and POX messages using the sample Axis2 client that comes with WSO2 ESB. You can find examples below.
...