2017-06-19 3 views
0

L'exigence est de lire les données du fichier et d'appeler le service Web. Webservice cible peut gérer une charge utile à la fois, mais il y aura plusieurs charges utiles dans la source. J'utilise donc la boucle while pour traiter les données utiles une par une.Transformation à l'intérieur while loop- BPEL 10g

Problème: Dans le service cible EarningTypeInclusion est un élément facultatif, de sorte que dans la source, certains éléments utiles seront présents et, dans une charge utile, cet élément d'option ne sera pas présent. Si j'utilise une activité d'affectation, l'erreur d'échec de sélection survient lorsque des éléments optionnels ne sont pas présents dans la charge utile source. Nous utilisons BPEL 10g, pas d'option dans l'assignation d'activité pour annuler l'erreur de sélection. Donc décidé d'utiliser la transformation à l'intérieur de la boucle.

logique

utilisé

Lire à partir du fichier

assign boucle compteur = 1

Nombre de charge utile (lu à partir du fichier)

Alors que le compteur de boucle < = Nombre de charge utile

passer la valeur de paramètre du compteur de boucle pour transformer

transformer la source i.e. thresholdRequest [loopcounter] pour cibler

d'invocation de service Web cible

compteur de boucle d'incrément

boucle d'extrémité

;

Problème: les mêmes données sont en cours de génération.

Dans l'exemple ci-dessous, les données de référence 11 sont chargées trois fois. J'ai vérifié la valeur de conter, son incrémentation mais à l'intérieur de la transformation les mêmes valeurs sont transformées.

<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> 

Source

<?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> 

S'il vous plaît trouver la structure du schéma pour la source et la cible

cible

<?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> 

S'il vous plaît noter la validation du schéma est activé à webservice cible.

+0

Salut, vous avez assuré la variable 'thresholdRequest' détient effectivement les trois références différentes et pas le même renvoi trois fois, c'est-à-dire que le problème n'est pas l'étape «lire depuis le fichier»? –

Répondre

0

Y at-il une raison particulière que vous utilisez Transform.Try en utilisant ora: getElement ('/ thresholdRequestInterface/thresholdRequest', BPWS: getVariable (loopCounter))

+0

Ce n'est pas une réponse! –