BPEL 1.1のbpelx:copyList
次に、BPELバージョン1.1をサポートするBPELプロジェクトのbpelx:copyList
の例を示します。
<bpel:assign> <bpelx:copyList> <bpelx:from ... /> <bpelx:to ... /> </bpelx:copyList> </bpel:assign>
from-spec
問合せでは、すべての属性ノードまたはすべての要素ノードのリストを取得できます。to-spec
問合せでは、L-Valueノード(すべての属性ノードまたはすべての要素ノード)のリストを取得できます。
to-spec
問合せで返される要素ノードは、すべて同じ親要素を持つ必要があります。to-spec
問合せで要素ノードのリストが返される場合は、すべての要素ノードが連続している必要があります。
from-spec
問合せで属性ノードが返される場合、to-spec
問合せでは属性ノードが返される必要があります。同様に、from-spec
問合せで要素ノードが返される場合、to-spec
問合せでは要素ノードが返される必要があります。それ以外の場合は、bpws:mismatchedAssignmentFailure
フォルトがスローされます。
from-spec
問合せでは0(ゼロ)個のノードを返すことができますが、to-spec
問合せではノードを1個以上返す必要があります。from-spec
問合せで0(ゼロ)個のノードが返される場合、copyList
操作の効果はremove
操作と同様になります。
copyList
操作には、次の機能があります。
-
to-spec
問合せが指すノードがすべて削除されます。 -
to-spec
問合せで要素ノードのリストが返され、そのノードが削除された後に子ノードが残っている場合、from-spec
問合せで返されたノードは、to-spec
問合せで指定した最後の要素と同レベルの次の要素の前に挿入されます。残りの子ノードがない場合は、append
操作が実行されます。 -
to-spec
問合せで属性ノードのリストが返される場合は、その属性が親要素から削除されます。次に、from-spec
問合せで返された属性が親要素に追加されます。
たとえば、次に示すようなスキーマが定義されているとします。
<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>
from
変数には、次の例に示すコンテンツが含まれています。
<ns1:process xmlns:ns1="http://xmlns.oracle.com/Event_jws/Event/EventTest"> <ns1: payload >a</ns1: payload > <ns1: payload >b</ns1: payload > </ns1:process>
to
変数には、次の例に示すコンテンツが含まれています。
<ns1:processResponse xmlns:ns1="http://xmlns.oracle.com/Event_ jws/Event/EventTest"> <ns1: payload >c</ns1: payload > </ns1:process>
bpelx:copyList
操作は、次の例のようになります。
<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>
これによって、次の例のようにto
変数が定義されます。
<ns1:processResponse xmlns:ns1="http://xmlns.oracle.com/Event_ jws/Event/EventTest"> <ns1: payload >a</ns1: payload > <ns1: payload >b</ns1: payload > </ns1:process>