Platinum Partner
soa,enterprise-integration,integration,tips and tricks,wso2 esb

WSO2 ESB Enrich Mediator Fast Tutorial

Enrich Mediator can be used to perform transformations with in integration logic. It process a message based on a given source configuration and perform the specified action on the message by using the target configuration.


syntax

<enrich>
    <source \[clone=true\|false\] \[type=custom\|envelope\|body\|property\|inline\] xpath="" property="" />
    <target \[action=replace\|child\|sibiling\] \[type=custom\|envelope\|body\|property\|inline\] xpath="" property="" />
</enrich>

As above you can see there is main two configuration

  • Source
  • Target

Source Configuration

Clone : By this you can clone or used as a reference during enrich mediation. (default value is false)
Type :  Part that use from the original message to enrich the modified message
XPath Expression : Expression 


Target Configuration

Action : Action can be applied to outgoing messages and it is define by type
  Replace - replaces the XML message based on the target type specified (default action)
  Child  - Adding chile for the specified target type.
  Sibling  - Adding as a sibling of the specified target type.


eg:

<enrich xmlns="[a href="http://ws.apache.org/ns/synapse%22"]http://ws.apache.org/ns/synapse">
  <source clone="false" type="envelope" xpath="" property="" />
  <target action="replace" type="body" xpath="" property="" />
</enrich>


replacing xml part in payload

<proxy xmlns="http://ws.apache.org/ns/synapse" name="testingProxy4" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="full"/>
         <enrich>
            <source type="inline">
               <tran:rootId xmlns:tran="http://transport.org">5</tran:rootId>
            </source>
            <target xmlns:tran="http://transport.org" xpath="//tran:getBusNo/tran:rootId"/>
         </enrich>
         <log level="full"/>
         <send>
            <endpoint key="conf:/getBus"/>
         </send>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </target>
   <publishWSDL uri="http://localhost:9763/services/BusServices?wsdl"/>
   <description></description>
</proxy>

Here is sample proxy for Console:

image

Check with SOAP UI

image

Changing text in payload

<enrich>
  <source type="inline" clone="true">8</source>
  <target xmlns:tran="http://transport.org" xpath="//tran:getBusNo/tran:rootId/text()"/>
</enrich>
image

image

Adding new Property for that request body

      <enrich>
            <source type="inline" clone="true">
               <busName xmlns="">Testing</busName>
            </source>
            <target type="body" action="child"/>
        </enrich>

Adding body or any customer Xpath in to property (new Property)

     <enrich>
           <source type="body"/>
           <target type="property" property="REQUEST_PAYLOAD"/>
      </enrich>
        <log>
               <property name="Request Payload" expression="get-property('REQUEST_PAYLOAD')"/>
        </log>

image

Here is the last Proxy code in here

<proxy xmlns="http://ws.apache.org/ns/synapse" name="testingProxy4" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="full"/>
         <enrich>
            <source type="inline" clone="true">
               <busName xmlns="">Testing</busName>
            </source>
            <target type="body" action="child"/>
         </enrich>
         <enrich>
            <source type="body" clone="true"/>
            <target type="property" property="REQUEST_PAYLOAD"/>
         </enrich>
         <log>
            <property name="Request Payload" expression="get-property('REQUEST_PAYLOAD')"/>
         </log>
         <log level="full"/>
         <send>
            <endpoint key="conf:/getBus"/>
         </send>
      </inSequence>
      <outSequence>
         <send/>
      </outSequence>
   </target>
   <publishWSDL uri="http://localhost:9763/services/BusServices?wsdl"/>
   <description></description>
</proxy> 

Published at DZone with permission of {{ articles[0].authors[0].realName }}, DZone MVB. (source)

Opinions expressed by DZone contributors are their own.

{{ tag }}, {{tag}},

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}