WSO2 ESB provides the flexibility to use function of
scripting language like JavaScript, Ruby or groovy.
This script mediator can be used in a separate file
located in local registry or also can be written in embedded inline synapse
configuration.
To
support scripting language, synapse uses Bean
Scripting Framework. To use scripting mediator we have to use a pre-defined
mc variable. The mc variable represents an implementation of
the MessageContext, named ScriptMessageContext.java, which contains
the following methods that can be accessed within the script
as mc.methodName.
These
are the list of Method names and its description to be used in script mediator.
Return Type
|
Method Name
|
Description
|
Yes
|
getPayloadXML()
|
This gets an XML representation of SOAP Body payload.
|
No
|
setPayloadXML(payload)
|
This sets the SOAP body payload from XML.
|
No
|
addHeader(mustUnderstand, content)
|
This adds a new SOAP header to the message.
|
Yes
|
getEnvelopeXML()
|
This gets the XML representation of the complete SOAP
envelope.
|
No
|
setTo(reference)
|
This is used to set the value which specifies the receiver of
the message.
|
Yes
|
setFaultTo(reference)
|
This is used to set the value which specifies the receiver of
the faults relating to the message.
|
No
|
setFrom(reference)
|
This is used to set the value which specifies the sender of
the message.
|
No
|
setReplyTo(reference)
|
This is used to set the value which specifies the receiver of
the replies to the message.
|
Yes
|
getPayloadJSON()
|
This gets the JSON representation of a SOAP Body payload.
|
No
|
setPayloadJSON(payload)
|
This sets the JSON representation of a payload obtained via
the getPayloadJSON() method and sets it in the current message context.
|
Yes
|
getProperty(name)
|
This gets a property from the current message context.
|
No
|
setProperty(key, value)
|
This is used to set a property in the current message context.
The previously set property values are replaced by this method.
|
Syntax:
To
define the script mediator in synapse file you have put a single line in which
you have to provide java script file and its key name. in below example we are
calling a java script file which has the function to get employee details.
<localEntry
key="EmpDetailsScript" src="file:repository/conf/emp/resources/scripts/EmpDetailsTransform.js"/>
Call
Function from synapse:
To call the function we have write below code, in which
we have to supply its key name and the function name which is to be called. In below
code we are calling a function “getITEmployee”
which will get get all IT employee details.
<script
language="js" key="CallITEmployee" function=" getITEmployee"/>
Function
in Java script:
We are using a payload method in which we are calling
another request which will fetch the Employee details of a particular
department.
function
getITEmployee(mc) {
var Department =
mc.getProperty("Department");
mc.setPayloadXML(
<emp:getEmployeeDetailRequest
xmlns:emp="http://shriwithjava.blogspot.com/services/empdetails">
<emp:Department>{Department}</emp:Department>
</emp:getEmployeeDetailRequest>
);
}
UI
Configurations:
Below is the step to call script mediator from console
UI. When you click on ‘script’ then below screen will appear.
In below screen you have to pass Script Type, Language Its function name and key of this java script.
Click on apply to use this mediator. Once you click on
the save it will be added in service.
To see this is in coding format then click on the “Switch to design view”.
You can use normal other java script function as well
to make your logic as required.