Hi,
We are planning to introduce/enhance XML and JSON variable (ATM JSON
support is available partially) support for BPMN in WSO2 BPS.
Case 01 : JSON Support
ATM Activiti provides JSON as a data type. Hence, I did some investigation
on how extend JSON support is provided. The following table depicts results
summary.
Access From
Read
Create/Update
Java Service Task
✓
✓
Condition Expressions
✓
-
Script Task
✓
✗
BPMN REST API
✗
✗
We are planning to enhance JSON support by introducing following in WSO2
BPS BPMN support:
1.
Create/Update JSON variables from Script Task.
2.
Create/Update and Read JSON variables from BPMN REST API.
For more information how JSON variables can be used within BPMN processes
ATM (with WSO2 BPS 3.5.1), refer [1].
Case 02 : XML Support
XML support is not provided in Activiti BPMN engine. So we are going to
provide it from ground up.
With XML support users can create variables in “xml” as the data type and
able to extract or set XML content with the help of simple Java API that
will provided in BPS.
Consider there is an XML variable with name “userInfo” for example with the
content:
<User>
<Name>Mark</Name>
<Country>SL</Country>
<Address>
<State>Western</State>
<City>Colombo<City>
<Street>ABC Street</Street>
</Address>
</User>
To provide XML support, we have to provide XML manipulation
(Create/Update/Read) support in Java Service Task, Condition Expressions,
Script Task and BPMN REST API
1.
Java Service Task
Within Java service task users can use XML Java api that will provided
within BPS to create, update, and read/query xml.
1.
Create
When creating new XML variable and setting it process variable
XML VARIABLE = XML.createInstance(“[XML String]”);
execution.setVariable(“[Variable_name]”, VARIABLE);
1.
Read/Query
When querying, user should be able to access element contents as follows:
[VARIABLE NAME].XPath(“[XPATH EXPRESSION]”)
Eg: To retrieve City : userInfo.XPath(“/User/Address/City”)
1.
Update
To update an element in a XML variable
VARIABLE.set(“[XPATH EXPRESSION]”, [String Value])
Eg: To update City : userInfo.set(“/User/Address/City”, “Kandy”)
1.
Condition Expressions
Within condition expression users can use the same methods provided from
the Java API to query xml element contents
<conditionExpression xsi:type="tFormalExpression">
<![CDATA[${xmlVar.XPath("[XPATH EXPRESSION]").asInt() > 10}]]>
</conditionExpression>
1.
Script Task
Within script task users will be able to use XML DOM (which is standard way
of manipulating XML in javascript) for manipulating xml within the script
(ATM we are focusing in JavaScript)
1.
BPMN REST API
Same as for JSON, need to introduce way to create, update and read xml
variables.
REST API Improvements
Create/Update xml and json variables over REST API
POST runtime/process-instances/{processInstanceId}/variables
PUT runtime/process-instances/{processInstanceId}/variables
Suggested payload for JSON:
[
{
"name":"VariableName",
"type":"json",
"value":"{\"id\":1,\"name\":{\"first\":\"Yong\",\"last\":\"Mook
Kim\"},\"priority\":5}"
}
]
Suggested payload for XML:
[
{
"name":"VariableName",
"Type":"xml",
"value":"<root><id>1</id><name><first>fname</first><last>lname</last></name><priority>5</priority></root>"
}
]
Get xml and json variables over REST API
GET runtime/process-instances/{processInstanceId}/variables/{variableName}
Response will be (for JSON):
{
"name":"variableName",
"type":"json",
"value":"{\"id\":1,\"name\":{\"first\":\"Yong\",\"last\":\"Mook
Kim\"},\"priority\":5}",
"scope":"local"
}
XML variable response will be similar.
The details mentioned above are to share the rough idea about XML/JSON
enhancements that we planned to do. Appreciate for your suggestion and
feedbacks on this.
[1]
http://milindaperera.blogspot.com/2016/05/json-variable-ussage-within-bpmn.html
Thanks,
Milinda
--
Milinda Perera
Software Engineer;
WSO2 Inc. http://wso2.com ,
Mobile: (+94) 714 115 032
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture