2017-06-19 14 views
0

要件は、ファイルからデータを読み取り、webserviceを呼び出します。ターゲットWebサービスは一度に1つのペイロードを処理できますが、ソースには複数のペイロードが存在します。 whileループを使用してペイロードを1つずつ処理しています。whileループ内の変換 - BPEL 10g

問題:ターゲットサービスでは、EarningTypeInclusionはオプションの要素なので、ソースではこの要素が存在し、一部のペイロードではこのオプション要素は存在しません。

<thresholdRequestInterface xmlns:xs="http://www.sample.com/ns/LMSReferrals"> 
<thresholdRequest> 
<Referral>11</Referral> 
<thresholdValue>100</thresholdValue> 
<EarningTypeInclusion> 
<earningType>positive</earningType> 
<ProvisionId>1000</ProvisionId> 
</EarningTypeInclusion> 
</thresholdRequest> 
<thresholdRequest> 
<Referral>11</Referral> 
<thresholdValue>100</thresholdValue> 
</thresholdRequest> 
</thresholdRequestInterface> 

assignアクティビティを使用している場合、ソースペイロードにオプションの要素が存在しない場合、選択エラーが発生します。私たちはBPEL 10gを使用していますが、選択失敗障害を押さえるためにアクティビティを割り当てるオプションはありません。 ループ内での変換を使用することに決めました。

ロジックは、ループペイロードのカウンタ= 1

数(ファイルから読み込み)

ペイロード

のループカウンタ< =カウントしばらく割り当てる

ファイル

から

読み取りを使用しました変換するループカウンタのパラメータ値

源はすなわちthresholdRequest [loopcounter】標的とするように変換

呼び出し対象のWebサービス

インクリメントループカウンタ

エンドループ。

同じデータがtrsnformedになっています。

以下の例では、参照11のデータが3回ロードされています。私はコンター値をチェックしていますが、その値は増えていますが、内部の変換は同じ値が変換されています。

<thresholdRequestInterface xmlns:xs="http://www.sample.com/ns/LMSReferrals"> 
<thresholdRequest> 
<Referral>11</Referral> 
<thresholdValue>100</thresholdValue> 
<EarningTypeInclusion> 
<earningType>positive</earningType> 
<ProvisionId>1000</ProvisionId> 
</EarningTypeInclusion> 
</thresholdRequest> 
<thresholdRequest> 
<Referral>12</Referral> 
<thresholdValue>100</thresholdValue> 
</thresholdRequest> 
<thresholdRequest> 
<Referral>13</Referral> 
<thresholdValue>100</thresholdValue> 
<EarningTypeInclusion> 
<earningType>positive</earningType> 
<ProvisionId>1000</ProvisionId> 
</EarningTypeInclusion> 
</thresholdRequest> 
</thresholdRequestInterface> 

ソース

<?xml version="1.0" encoding="utf-8" ?> 
<xs:schema xmlns="http://www.sample.com/ns/LMSReferrals" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.sample.com/ns/LMSReferrals" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="thresholdRequestInterface"> 
    <xs:complexType> 
     <xs:sequence> 
    <xs:element name="thresholdRequest" minOccurs="1" maxOccurs="unbounded"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Referral" type="xs:string"/> 
     <xs:element name="thresholdValue" type="xs:int"/> 
     <xs:element name="EarningTypeInclusion" minOccurs="0" maxOccurs="1" > 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="earningType" type="xs:stirng" /> 
       <xs:element name="ProvisionId"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:maxLength value="20" /> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
      </xs:element> 

</xs:schema> 

ソースのスキーマ構造を見つけ、

ターゲット

<?xml version="1.0" encoding="utf-8" ?> 
<xs:schema xmlns="http://www.sample.com/ns/LMSReferrals" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://www.sample.com/ns/LMSReferrals" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 
    <xs:element name="thresholdRequest"> 
    <xs:complexType> 
     <xs:sequence> 
     <xs:element name="Referral" type="xs:string"/> 
     <xs:element name="thresholdValue" type="xs:int"/> 
     <xs:element name="EarningTypeInclusion" minOccurs="0" maxOccurs="1" > 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="earningType" type="xs:stirng" /> 
       <xs:element name="ProvisionId"> 
       <xs:simpleType> 
        <xs:restriction base="xs:string"> 
        <xs:maxLength value="20" /> 
        </xs:restriction> 
       </xs:simpleType> 
       </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
      </xs:sequence> 
      </xs:complexType> 
      </xs:element> 
</xs:schema> 

を対象としてくださいスキーマ検証がターゲットWebサービスで有効になっていますのでご注意ください。

+0

こんにちは、あなたが実際に保持しているthresholdRequest'変数を '確保してい3つの異なる紹介と3回の同じ紹介ではない、つまり、問題は「ファイルから読み込む」ステップではありませんか? –

答えて

0

あなたはTransform.Try使用して、ORAを使用している特定の理由がある:getElement( '/ thresholdRequestInterface/thresholdRequest'、bpws:getVariable(loopCounter))

+0

これは答えではありません! –

関連する問題