Tuesday, August 25, 2015

[WSO2 ESB] How to replace message body by a value of a property

Here is how to do it. This will replace message body by the value of "xmlfile" property.

<property name="xmlfile" expression="get-property('registry', 'gov:/xml/body.xml')" type="OM" />
<enrich>
<source clone="true" xpath="get-property('xmlfile')" />
<target type="body" />
</enrich>
view raw syn.xml hosted with ❤ by GitHub
Make sure you set type="OM" in property. Otherwise you will get below error.

"ERROR - EnrichMediator Invalid Object type to be inserted into message body"


Monday, August 24, 2015

[WSO2 ESB] How to read a file from registry and store in a property

Here is how to do it. This will load body.xml file from governance registry, and store in 'xmlfile' property.

<property name="xmlfile" expression="get-property('registry', 'gov:/xml/body.xml')" type="OM" />
view raw reg.xml hosted with ❤ by GitHub
Having 'registry' scope is the key here. Type is "OM" because it is an xml file.

Related:
How to read a file from registry

Tuesday, August 18, 2015

How to Split a JSON array in WSO2 ESB

Say you have this JSON array.

{
"users":[
{"name":"X", "age":"10"},
{"name":"Y", "age":"12"},
{"name":"Z","age":"15"}
]
}
view raw input.json hosted with ❤ by GitHub
Now you want to split users, and call some backend service for each user. Here is how to do. (Here I'm logging each user details instead of calling a backend service.)

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
name="JsonSplitterBlog"
transports="https,http"
statistics="disable"
trace="disable"
startOnLoad="true">
<target>
<inSequence>
<payloadFactory media-type="json">
<format>{"users":[{"name":"X", "age":"10"},{"name":"Y", "age":"12"},{"name":"Z","age":"15"}]}</format>
<args/>
</payloadFactory>
<iterate continueParent="true" expression="//users">
<target>
<sequence>
<log level="custom">
<property name="Name is" expression="//users/name"/>
<property name="Age is" expression="//users/age"/>
</log>
</sequence>
</target>
</iterate>
</inSequence>
</target>
<description/>
</proxy>
Output will look like this.

[2015-08-18 15:49:27,200]  INFO - LogMediator Name is = X, Age is = 10
[2015-08-18 15:49:27,204]  INFO - LogMediator Name is = Y, Age is = 12
[2015-08-18 15:49:27,205]  INFO - LogMediator Name is = Z, Age is = 15

Hope this will be helpful to someone.

References
https://denuwanthi.wordpress.com/2015/06/03/wso2-esbaccess-an-array-defined-in-property-mediator/