JavaScript
This component is used for executing JavaScript. The JavaScript to be executed is specified using the Custom Property Sheet (CPS). This component executes the script on documents it receives as input and returns the result.
- The component uses the document object to get the content and properties of the message. The result after executing of the script should be set back onto the document object.
- The component uses "bsf" API to evaluate the script.
Points to Note
- Input message content and properties can be accessed using document object. For example, 'document.getText()' returns input message content. To access a message property named 'TestProperty, 'document.getRecord().getProperty('TestProperty')' returns the value of the property. All the Properties can be accessed using document.getRecord().getProperty('PropertyName').
- Message properties can be set using 'document.getRecord().setProperty(String name, Object value)' method.
- Message properties which are set on input message also appear on output message unless they are changed in the script. For example, if a property named 'TestProperty' is present on input message then output message also contains the property unless it is changed in script provided.
- Output message content can be set either by using 'document.setText(String value)' of document object.
- In message properties, property with name 'ESBX__SYSTEM__CARRY_FORWARD_CONTEXT' contains application context object.
Application context schema can be accessed using document.getRecord().getProperty("ESBX__SYSTEM__CARRY_FORWARD_CONTEXT").getAppContext() method.
Similarly setAppContext(String appContext) can be used to modify application context. - JMS Correlation ID can be accessed/set using document.getRecord().getJMSCorrelationID() and document.getRecord().setJMSCorrelationID(String correlationID) methods.
- document.getRecord() return an instance of ESB Record which can be referred to by users for performing any other advanced operations.
Accessing Source Contexts
Carry forward context contains a vector of source context objects in the service execution order. This vector is updated after every service instance execution.
Following code returns an Enumeration of Source context objects.
contexts = document.getRecord().getProperty("ESBX__SYSTEM__CARRY_FORWARD_CONTEXT").getContexts();
contexts.hasMoreElements()
can be used to iterate over the enumerationcontexts.nextElement()
can be used to get the context object.
Context object contains Service Instance Name, Application Name, Application Version, Node Name. Following codes can be used to access the respective fields.
Method | Description |
---|---|
getSrvInstName() | Returns Service Insatnce Name for this context object. |
getAppInstName() | Returns Application Insatnce Name to which service instance belongs. |
getNodeName() | Returns Node Name on which service instance is running. |
getAppInstVersion() | Returns Version of the application to which service instance belongs. |
Example
Following script can be used to get the list of service instances that a message has passed through
contexts = document.getRecord().getProperty("ESBX__SYSTEM__CARRY_FORWARD_CONTEXT").getContexts();
instanceList = "";
while(contexts.hasMoreElements()){
instanceList = instanceList + contexts.nextElement().getSrvInstName() + ",";
}
document.setText(instanceList);
Configuration and Testing
Interaction Configuration
Figure 1: Interaction Configurations panel in JavaScript CPS
Attributes
Refer the Pre/Post Processing XSL Configuration and Process Message Based On a Property sections.
Read Script from file?
If enabled, Script file path property appears where you can provide the location where the script file is saved.
Script File Path
Provide the complete path of the Java Scriptfile (file should have .js extension) which you want to execute.
Figure 2: Script file path property to provide the location where the script file is saved
JavaScript
If Read Script from file ?property is disabled, populate the JavaScript property with theJava Script.
Replace Control Characters
If this property is enabled, Control Characters present in the input will be replaced by a string representation of the same value during script evaluation. This is an expert property.
Scheduler Configuration
Please refer the respective section in Common Configurations page.
Transport Configurations
Please refer the respective section in Common Configurations page.
Transport Configurations panel will be available only if scheduling is enabled in Scheduler Configurations panel.
Error Handling
Please refer the sections Request Processing Error and Invalid Request Error in the Error Handling section of Common Configurations page for details.
Sample Input and Output
The configuration can be tested by clicking the Test button in the interaction Configuration panel.
Below is a sampleJava script.
var time = 15;
if (time < 10) {
document.setText("Good morning")
} else {
document.setText("Good Day")
}
Below are the sample input and the output respectively for the above script.
Figure 3: Sample Input Message
Figure 4: Response Generated
Functional Demonstration
Scenario
Execution of Java Script provided.
Configure theJava Scriptas described in Configuration and Testing section and use feeder and display component to send sample input and to check the response respectively. In the example given below, the script provided is:
var r = Math.random()
if (r > 0.5) {
document.setText("<a href='http://www.w3schools.com'>Learn Web Development!</a>")
} else {
document.setText("<a href='http://www.refsnesdata.no'>Visit Refsnes Data!</a>")
}
Figure 5: Scenario demonstration with sample input and output
Useful Tips
The component uses the document object to get the content and properties of the message. The Script Execution result should be set back onto the document object.
In message properties, property with name "ESBX__SYSTEM__CARRY_FORWARD_CONTEXT" contains application context object.
Application context schema can be accessed using document.getRecord().getProperty("ESBX__SYSTEM__CARRY_FORWARD_CONTEXT").getAppContext().
Similarly setAppContext(String appContext) can be used to modify application context.