1

Java埋め込みアクティビティで配列(BPELへの入力)をトラバースする必要があり、BPELプロセスの応答(出力変数)を生成する必要があります。

JdeveloperとSOA11gを使用しています

以下は私のxsdです

<?xml version="1.0" encoding="UTF-8"?>
<schema attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://xmlns.oracle.com/BPELInpuandOutPutArray_jws/Project1/BPEL_input_output_array" xmlns="http://www.w3.org/2001/XMLSchema">
      <element name="process">
            <complexType>
                  <sequence>
                        <element name="simpleinput" type="string"/>
                        <element name="arrayofObjects" maxOccurs="unbounded" nillable="true">
                              <complexType>
                                    <sequence>
                                          <element name="input1" type="string"/>
                                          <element name="input2" type="string"/>
                                    </sequence>
                              </complexType>
                        </element>
                  </sequence>
            </complexType>
      </element>
      <element name="processResponse">
            <complexType>
                  <sequence>
                        <element name="arrayofObjectsoutput" maxOccurs="unbounded" nillable="true">
                              <complexType>
                                    <sequence>
                                          <element name="output1" type="string"/>
                                          <element name="output2" type="string"/>
                                    </sequence>
                              </complexType>
                        </element>
                  </sequence>
            </complexType>
      </element>
</schema>

これまでのところ、入力配列のトラバースを管理できます

oracle.xml.parser.v2.XMLElement e1=
(oracle.xml.parser.v2.XMLElement)getVariableData("inputVariable","payload","/client:process/client:arrayofObjects[1]/client:input1"); 

System.out.println(e1.getFirstChild().getNodeValue());

しかし、私のビジネス要件は、いくつかのロジックに基づいて出力配列の値を設定することです。このために、次のサンプルコードを使用しました。

for(int i=1; i < 4 ;i++) 
{ 
setVariableData("outputVariable","payload","/client:processResponse/client:arrayofObjectsoutput['i']/client:output1",i);
setVariableData("outputVariable","payload","/client:processResponse/client:arrayofObjectsoutput['i']/client:output2",i);
}

私の感じでは、配列は長さ3で作成され、値はsettes(1,1)(2,2)(3,3)になりますが、出力値は(3,3)のみです。どうすれば同じことを達成できるか教えてください。

サンプルコードをいただければ幸いです。

4

3 に答える 3

1

独自の拡張機能が機能しない場合は、標準のBPELアプローチを試し、XSLTスクリプトを使用して結果ドキュメントを繰り返し作成できます。

例は、BPEL 2.0仕様の65ページに記載されており、反復ドキュメントの構築を探します。

基本的に、リストと追加する要素は(doXSLTransform XPath関数を介して)XSLTスクリプトに渡されます。このスクリプトは、リストに追加する要素をコピーして、新しいドキュメントを返します。次に、これが変数に割り当てられます。

于 2011-05-03T10:15:38.047 に答える
1

同様の状況で私が行った方法は、変換を使用して最初の要素を作成し、次にを使用しbpelx:insertAfterて追加の配列要素を挿入し、それらを設定することでした。

<assign name="Assign_2">
      <bpelx:insertAfter>
        <bpelx:from variable="outputVariable" part="payload"
                    query="/client:ArrayManipulationProcessResponse/client:arrayofObjectsoutput"/>
        <bpelx:to variable="outputVariable" part="payload"
                  query="/client:ArrayManipulationProcessResponse/client:arrayofObjectsoutput"/>
      </bpelx:insertAfter>
      <copy>
        <from expression="'MyOutput1-Index2'"/>
        <to variable="outputVariable" part="payload"
            query="/client:ArrayManipulationProcessResponse/client:arrayofObjectsoutput[2]/client:output1"/>
      </copy>
      <copy>
        <from expression="'MyOutput2-Index2'"/>
        <to variable="outputVariable" part="payload"
            query="/client:ArrayManipulationProcessResponse/client:arrayofObjectsoutput[2]/client:output2"/>
      </copy>
</assign>
于 2011-05-07T06:25:15.777 に答える
0

このような単純なタスクのためにカスタムJavaコードを書く必要はないと思います。次のコード(BPEL2.0)は、値をコピーする役割を果たします。

<assign name="Copy values">
      <extensionAssignOperation>
          <bpelx:copyList>
               <bpelx:from>$inputVariable.payload/ns1:arrayofObjects</bpelx:from>
               <bpelx:to>$outputVariable.payload/ns1:arrayofObjectsoutput</bpelx:to>
           </bpelx:copyList>
      </extensionAssignOperation>
</assign>

于 2011-05-03T17:02:30.397 に答える