bpelx:copyList in BPEL 1.1
The following provides an example of bpelx:copyList
in a BPEL project that supports BPEL version 1.1.
<bpel:assign> <bpelx:copyList> <bpelx:from ... /> <bpelx:to ... /> </bpelx:copyList> </bpel:assign>
The from-spec
query can yield a list of either all attribute nodes or all element nodes. The to-spec
query can yield a list of L-value nodes: either all attribute nodes or all element nodes.
All the element nodes returned by the to-spec
query must have the same parent element. If the to-spec
query returns a list of element nodes, all element nodes must be contiguous.
If the from-spec
query returns attribute nodes, then the to-spec
query must return attribute nodes. Likewise, if the from-spec
query returns element nodes, then the to-spec
query must return element nodes. Otherwise, a bpws:mismatchedAssignmentFailure
fault is thrown.
The from-spec
query can return zero nodes, while the to-spec
query must return at least one node. If the from-spec
query returns zero nodes, the effect of the copyList
operation is similar to the remove
operation.
The copyList
operation provides the following features:
-
Removes all the nodes pointed to by the
to-spec
query. -
If the
to-spec
query returns a list of element nodes and there are leftover child nodes after removal of those nodes, the nodes returned by thefrom-spec
query are inserted before the next sibling of the last element specified by theto-spec
query. If there are no leftover child nodes, anappend
operation is performed. -
If the
to-spec
query returns a list of attribute nodes, those attributes are removed from the parent element. The attributes returned by thefrom-spec
query are then appended to the parent element.
For example, assume a schema is defined as shown below:
<schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/Event_jws/Event/EventTest" xmlns="http://www.w3.org/2001/XMLSchema"> <element name="process"> <complexType> <sequence> <element name="payload" type="string" maxOccurs="unbounded"/> </sequence> </complexType> </element> <element name="processResponse"> <complexType> <sequence> <element name="payload" type="string" maxOccurs="unbounded"/> </sequence> </complexType> </element> </schema>
The from
variable contains the content shown in the following example:
<ns1:process xmlns:ns1="http://xmlns.oracle.com/Event_jws/Event/EventTest"> <ns1: payload >a</ns1: payload > <ns1: payload >b</ns1: payload > </ns1:process>
The to
variable contains the content shown in the following example:
<ns1:processResponse xmlns:ns1="http://xmlns.oracle.com/Event_ jws/Event/EventTest"> <ns1: payload >c</ns1: payload > </ns1:process>
The bpelx:copyList
operation looks as shown in the following example:
<assign> <bpelx:copyList> <bpelx:from variable="inputVariable" part="payload" query="/client:process/client:payload"/> <bpelx:to variable="outputVariable" part="payload" query="/client:processResponse/client:payload"/> </bpelx:copyList> </assign>
This defines the to
variable as shown in the following example:
<ns1:processResponse xmlns:ns1="http://xmlns.oracle.com/Event_ jws/Event/EventTest"> <ns1: payload >a</ns1: payload > <ns1: payload >b</ns1: payload > </ns1:process>