This page provides information on WSO2 BPS's compliance to the final WS-BPEL 2.0 specification released by OASIS.
Variable Initialization
Variable initialization using in-line spec is fully supported. (WS-BPEL 2.This page provides information on WSO2 BPS's compliance to the final WS-BPEL 2.0 specification released by OASIS.
Variable Initialization
Variable initialization using in-line spec is fully supported. (WS-BPEL 2.0 Section 8.1: http://docs.oasis-open.org/wsbpel/2.0/OS/wsbpel-v2.0-OS.html#_Toc164738495)
...
Ode currently uses the expressionLanguage attribute to determine the language used in assignments instead of using the queryLanguage attribute. WSO2 BPS provides certain (non-standard) extensions to the <assign> activity that do not conform to the specification's requirements for assignment extensions. Some of them are discussed through the following synopsis.
...
Code Block | ||
---|---|---|
| ||
<assignvalidate="yes|no"? standard-attributes> standard-elements ( <copykeepSrcElementName="yes|no"? ignoreMissingFromData="yes|no"?> from-spec to-spec </copy> | <extensionAssignOperation> assign-element-of-other-namespace </extensionAssignOperation> )+ </assign> |
...
Throws following faults:
...
- bpel:invalidVariables
- bpel:selectionFailure
- bpel:subLanguageExecutionFault
- bpel:uninitializedVariable
- bpel:mismatchedAssignmentFailure
- bpel:uninitializedPartnerRole
...
The following types of variants are available for in the <assign> activity.
- From/To-Spec Variants
- Variable Variant
From/To-Spec Variants
The <assign> activity copies a type-compatible value from the source ("from-spec") to the destination ("to-spec"), using <copy> element. The from-spec must be one of the following:
Code Block | ||
---|---|---|
| ||
<fromvariable="BPELVariableName"part="NCName"?><queryqueryLanguage="anyURI"?>? queryContent </query></from> <frompartnerLink="NCName"endpointReference="myRole|partnerRole"/> <fromvariable="BPELVariableName"property="QName"/> <fromexpressionLanguage="anyURI"?>expression</from> <from><literal>literal value</literal></from> <fromvariable="BPELVariableName"extension="QName"/><!-- non-standard extension --> |
...
The to-spec must be one of the following:
Code Block | ||
---|---|---|
| ||
<tovariable="BPELVariableName"part="NCName"?><queryqueryLanguage="anyURI"?>? queryContent </query></to> <topartnerLink="NCName"/> <tovariable="BPELVariableName"property="QName"/> <toexpressionLanguage="anyURI"?>expression</to> <tovariable="BPELVariableName"extension="QName"/><!-- WSO2 BPS SPECIFIC --> |
...
A to-spec must return an lvalue. If a to-spec does not return an lvalue then a bpel:selectionFailure will be thrown. In the context of XPath, an lvalue is a node-list containing a single node from a variable or a partnerLink identified by the to-spec (e.g. the XPath expression concat("foo""bar") is not an lvalue).
Assignment is an atomic operation; that is, either all <copy> s succeed, or no changes are made. In WSO2 BPS each <copy> is atomic
...
Selects value stored in a BPEL variable
Code Block | ||
---|---|---|
| ||
<to|from variable="BPELVariableName"part="NCName"? |
...
><queryqueryLanguage="anyURI"?>? queryContent </ |
...
query></to| |
...
from> |
- variable - (required) name of the variable
- part - (optional) if the type of this variable is a WSDL messageType, this attribute may be used to provide the name of a part within that variable. This attribute must not be used when the variable is defined using XML schema types or element.
- <query> element may be used to select a value from the source or target variable or message part. The computed value of the query must be one the following:
- a sigle XML node, for example an attribute or an element
- test(i. e. a text node, CDATA section, string-valued XPath expression, etc..)
PartnerLink Variant
Allows manipulation of the endpoint references associated with partnerLinks.
...
Code Block | ||
---|---|---|
| ||
<frompartnerLink="NCName"endpointReference="myRole|partnerRole"/> |
...
<topartnerLink="NCName"/> |
- partnerLink - name of the partnerLink
- role - the role or "side" of the partnerLink
- myRole - the endpoint reference of the process
- partnerRole - the partner's endpoint reference
For from-specs, the role attribute must be specified, while for the to-spec, the assignment is only possible to the partnerRole, hence there is no need to specify the role. Therefore, . Therefore, specifying the role is not required and the to-spec can only refer to a <partnerLink> of which the declaration specifies the partnerRole attribute. The type of the value referenced by partnerLink-style from/to-specs is always a <sref:service-ref> element.
An attempt during process execution to read a partner link before its partnerRole EPR is initialized, results in the bpel:uninitializedPartnerRole standard fault. Partner roles of partner links are read when they are referenced in an <invoke> or the <from> part of a <copy> in an <assign> activity.
Property Variant
Allows data manipulation using properties. The property value generated by the from-spec is generated in the same manner as the value returned by the bpel:getVariableProperty() function.() function.
Code Block | ||
---|---|---|
| ||
<to|from variable="BPELVariableName"property="QName"/> |
- variable - name of the variable referenced
- property - name of the property to apply to the variable
Expression Variant
In the Expression Variant, an expression language (typically XPath), is used to calculate a value.
Code Block | ||
---|---|---|
| ||
<to|from expressionLanguage="anyURI"? |
...
>expression</from> |
- expressionLanguage - (optional) identifies the expression language.
- expression - the expression ; whose syntax is determined by the expression language.
The computed value of the expression must be one of the following:
- a single XML node, for example, an attribute or an element.
- text(i. e. a text node, CDATA section, string-valued XPath expression, etc..)
Literal Variant
The literal variant allows a literal value to be given as the rvalue.
...
Code Block | ||
---|---|---|
| ||
<from><literal>literal value</literal></from> |
- literal value - value to be assigned
The type of the literal value may be optionally indicated inline with the value by using XML Schema's instance type mechanism (xsi:type). The literal content must be either a single element or text. An empty <literal/> element is equivalent to an empty text node.
Empty Variant
Empty variant exist exists for extensibility purposes; it . It is not supported by WSO2 BPS.
<from|to/>
Insert Variant (
...
Non-
...
Standard Extension)
Faults
- bpel:invalidVariables - A modified variable does not conform to its schema and the validate flag was is set to yes.
- bpel:selectionFailure - The node(s) selected by a from/to-spec is (are) invalid. This includes cases when the to-spec returns a node that is not an lvalue, when multiple nodes are selected, or when no node is selected.
- bpel:subLanguageExecutionFault - Evaluating the expression (in the expression variant), or the query (in the variable variant) generated generates an error. For example, if when a divide-by-zero is attempted.
- bpel:uninitializedVariable - The variable referenced in the from-spec has is not been initialized.
- bpel:mismatchedAssignmentFailure - The nodes selected by the to-spec and from-spec are not compatible. This For example, this could occur if for example an attempt was made to assign a text node to an element variable, or an element variable was assigned to a message variable.
Examples
- The following assigns a childless element bar in namespace http://example.com to an element-typed variable myFooBarElemVar:
...
Code Block | ||
---|---|---|
| ||
<assign> <copy> <from><literalxmlns:foo="http://example.com" |
...
><foo:bar/ |
...
></literal></from><tovariable="myFooBarElemVar"/> </ |
...
copy> </ |
...
assign> |
- The following assigns the string "FooBar" to a string-typed variable myStringVar:
...
Code Block | ||
---|---|---|
| ||
<assign> <copy> <from> <literal><![CDATA[FooBar]] |
...
></literal> </from> <tovariable="myStringVar"/> </ |
...
copy> </ |
...
assign> |
- The following assigns the string "" (i.e. the empty string) to a string-typed variable myStringVar:
...
Code Block | ||
---|---|---|
| ||
<assign> <copy> <from> <literal/> </from> <tovariable="myStringVar"/> </ |
...
copy> </ |
...
assign> |
- The following illustrates copying one variable (c1) to another (c2) as well as copying a variable part (address part of variable c1) to a variable of compatible element type (c3):
...
Code Block | ||
---|---|---|
| ||
<assign> <copy> <fromvariable="c1"/> <tovariable="c2"/> |
...
</copy> <copy> <from>$c1.address</from> <tovariable="c3"/> </ |
...
copy> </ |
...
assign> |
Excerpt | ||
---|---|---|
| ||
WS-BPEL 2.0 specification compliance of the WSO2 BPS. |