Over a million developers have joined DZone.
{{announcement.body}}
{{announcement.title}}

WSO2 ESB Enrich Mediator Fast Tutorial

DZone's Guide to

WSO2 ESB Enrich Mediator Fast Tutorial

· Integration Zone ·
Free Resource

WSO2 is the only open source vendor to be named a leader in The Forrester Wave™: API Management Solutions, Q4 2018 Report. Download the report now or try out our product for free.

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> 

IAM is now more than a security project. It’s an enabler for an integration agile enterprise. If you’re currently evaluating an identity solution or exploring IAM, join this webinar.

Topics:

Published at DZone with permission of

Opinions expressed by DZone contributors are their own.

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

{{ parent.tldr }}

{{ parent.urlSource.name }}