<assign> — update the values of variables with new data
<assign validate="yes|no"? standard-attributes> standard-elements ( <copy keepSrcElementName="yes|no"? ignoreMissingFromData="yes|no"?> from-spec to-spec </copy> | <extensionAssignOperation> assign-element-of-other-namespace </extensionAssignOperation> )+ </assign>
throws bpel:invalidVariables, bpel:selectionFailure, bpel:subLanguageExecutionFault, bpel:uninitializedVariable, bpel:mismatchedAssignmentFailure, bpel:uninitializedPartnerRole
The <assign> activity can be used to copy data from one variable to another, as well as to construct and insert new data using expressions. The <assign> activity can also be used to copy endpoint references to and from partnerLinks.
Each <assign> is made up of any number of <copy> entries which are each made up of a "to-spec" (lvalue), and a from-spec (rvalue).
| The ignoreMissingFromData element has been implemented in ODE 1.3+ (i.e., it is coming soon). See ODE-141 for issue tracking. |
| ODE currently disregards the value of this attribute — validation is never performed. |
| Since version 2.0 ODE fully supports extensionAssingOperation functionality. |
The <assign> activity copies a type-compatible value from the source ("from-spec") to the destination ("to-spec"), using the <copy> element. The from-spec must be one of the following variants:
<from variable="BPELVariableName" part="NCName"?> <query queryLanguage="anyURI"?>? queryContent </query> </from>
<from partnerLink="NCName" endpointReference="myRole|partnerRole" />
<from variable="BPELVariableName" property="QName" />
<from expressionLanguage="anyURI"?>expression</from>
<from><literal>literal value</literal></from>
<from/> <!-- DO NOT USE -->
<from variable="BPELVariableName" extension="QName" /> <!-- non-standard extension -->
| The <from extension="QName" /> from-spec variant is not part of the WS-BPEL 2.0 specification. It is a non-standard ODE extension. |
The to-spec must be one of the following variants:
<to variable="BPELVariableName" part="NCName"?> <query queryLanguage="anyURI"?>? queryContent </query> </to>
<to partnerLink="NCName" />
<to variable="BPELVariableName" property="QName" />
<to expressionLanguage="anyURI"?>expression</to>
<to/> <!-- DO NOT USE -->
<to variable="BPELVariableName" extension="QName" /> <!-- ODE SPECIFIC -->
| The <to extension="QName" /> to-spec variant is not part of the WS-BPEL 2.0 specification. It is a non-standard ODE extension. |
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).
| XPaths used as lvalues must begin with an XPath VariableReference. |
Assignment is an atomic operation; that is, either all <copy> s succeed, or no changes are made.
| In ODE, each <copy> is atomic. |
Selects value stored in a BPEL variable.
<to|from variable="BPELVariableName" part="NCName"?> <query queryLanguage="anyURI"?>? queryContent </query> </to|from>
Allows manipulation of the endpoint references associated with partnerLinks.
<from partnerLink="NCName" endpointReference="myRole|partnerRole" />
<to partnerLink="NCName" />
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, 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.
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.
<to|from variable="BPELVariableName" property="QName" />
In the Expression Variant, an expression language (typically XPath), is used to calculate a value.
<to|from expressionLanguage="anyURI"?>expression</from>
The computed value of the expression must be one of the following:
The Literal Variant allows a literal value to be given as the rvalue.
<from><literal>literal value</literal></from>
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.
The empty variant exist for extensibility purposes; it is not supported by ODE.
<from|to/>
The variable extension variants are non-standard extensions implemented by ODE to allow manipulation of protocol-specific properties from within a BPEL process.
<from variable="BPELVariableName" extension="QName" />
The variable referenced by this variant must be message-typed. The following extensions are supported:
| Extension Namespace | Name | Description |
|---|---|---|
| urn:ode.apache.org/axis2-il/headers/ | in | When using the AXIS2 integration layer, this extension returns the headers that were received with the message but that did not map to any message parts in the portType. The return value will be a wrapper element(with the same name as the extension) containing the SOAP header elements. |
| urn:ode.apache.org/axis2-il/headers/ | out | When using the AXIS2 integration layer, this extension holds the headers that should be sent with the mesage but are not mapped to any message parts in the portType. The rvalue should be a wrapper element (with the same name as the extension) containing the SOAP header elements to be sent. |
| The use of this feature is not encouraged. Processes using this feature will not be compatible with WS-BPEL 2.0 conformant systems. |
See copy with insert attribute
| ODE does not perform schema type validation, hence this fault is never thrown. |
The following assigns a childless element bar in namespace http://example.com to an element-typed variable myFooBarElemVar:
<assign> <copy> <from> <literal xmlns:foo="http://example.com"> <foo:bar /> </literal> </from> <to variable="myFooBarElemVar" /> </copy> </assign>
The following assigns the string "FooBar" to a string-typed variable myStringVar:
<assign> <copy> <from> <literal> <![CDATA[FooBar]]> </literal> </from> <to variable="myStringVar" /> </copy> </assign>
The following assigns the string "" (i.e. the empty string) to a string-typed variable myStringVar:
<copy> <from> <literal /> </from> <to variable="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):
<assign> <copy> <from variable="c1" /> <to variable="c2" /> </copy> <copy> <from>$c1.address</from> <to variable="c3" /> </copy> </assign>
