Over a million developers have joined DZone.
Gold Partner

WSO2 ESB Enrich Mediator Fast Tutorial

· Integration Zone

The Integration Zone is brought to you in partnership with CA Technologies. Download their eBook to learn more about API Strategy and Architecture.

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> 

The Integration Zone is brought to you in partnership with CA Technologies. Use this model to create a sustainable API strategy that will help your organization adapt and succeed in the app economy.

Topics:

Published at DZone with permission of Madhuka Udantha , DZone MVB .

Opinions expressed by DZone contributors are their own.

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

{{ parent.tldr }}

{{ parent.urlSource.name }}