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>