0

入力リクエストは次のとおりです。

<body>
 <p:UpdateID xmlns:p="http://tempuri.org">
  <!--Exactly 1 occurrence-->
  <xs:newid xmlns:xs="http://tempuri.org">NewID</xs:newid>
  <!--1 or more occurrences-->
  <xs:oldid xmlns:xs="http://tempuri.org">OldID_001</xs:oldid>
  <xs:oldid xmlns:xs="http://tempuri.org">OldID_002</xs:oldid>
 </p:UpdateID>
</body>

私は次のように機能しないプロキシ サービスを作成しました。

<proxy xmlns="http://ws.apache.org/ns/synapse" name="UpdateID" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
         <iterate xmlns:xs="http://tempuri.org" id="Iterate1" expression="count(//xs:oldid)">
            <target>
               <sequence>
                  <property name="newid" expression="//xs:newid" scope="default" type="STRING"/>
                  <property name="oldid" expression="//xs:oldid" scope="default" type="STRING"/>
                  <payloadFactory>
                     <format>
                        <p:UpdateID xmlns:p="http://tempuri.org">
                           <xs:newid>$1</xs:newid>
                           <xs:oldid>$2</xs:oldid>
                        </p:UpdateID>
                     </format>
                     <args>
                        <arg expression="get-property('newid')"/>
                        <arg expression="get-property('oldid')"/>
                     </args>
                  </payloadFactory>
                  <send>
                     <endpoint key="UpdateEP"/>
                  </send>
               </sequence>
            </target>
         </iterate>
      </inSequence>
   </target>
   <publishWSDL uri="http://xyz:9764/services/Update_DataService?wsdl"/>
   <description></description>
</proxy>

ここで私の質問は、0 から oldid のカウントまで繰り返すことができるように、oldid のカウントを取得する方法です。forループのようなものです。 そして2番目に、oldid値をペイロードに1つずつ割り当てるにはどうすればよいですか。助けてください。前もって感謝します

4

2 に答える 2

4

反復式を expression="//xs:oldid" に変更すると、使用可能な oldid 要素の数まで反復されます。次に、newid 要素が 1 つしかないため、イテレータから newid 値の代入を取得できます。これらの変更でプロキシ構成を更新しました。

<proxy xmlns="http://ws.apache.org/ns/synapse" name="UpdateID" transports="https,http" statistics="disable" trace="disable" startOnLoad="true">
   <target>
      <inSequence>
    <property name="newid" expression="//xs:newid" scope="default" type="STRING" xmlns:xs="http://tempuri.org"/>
         <iterate xmlns:xs="http://tempuri.org" id="Iterate1" expression="//xs:oldid">
            <target>
               <sequence>
                  <property name="oldid" expression="//xs:oldid" scope="default" type="STRING"/>
                  <payloadFactory>
                     <format>
                        <p:UpdateID xmlns:p="http://tempuri.org">
                           <xs:newid>$1</xs:newid>
                           <xs:oldid>$2</xs:oldid>
                        </p:UpdateID>
                     </format>
                     <args>
                        <arg expression="get-property('newid')"/>
                        <arg expression="get-property('oldid')"/>
                     </args>
                  </payloadFactory>
                  <send>
                     <endpoint key="UpdateEP"/>
                  </send>
               </sequence>
            </target>
         </iterate>
      </inSequence>
   </target>
   <publishWSDL uri="http://xyz:9764/services/Update_DataService?wsdl"/>
   <description></description>
</proxy>
于 2013-06-03T05:42:41.350 に答える
2

このシナリオでは、代わりにスクリプト メディエーターの使用を検討してください。JavaScript または Python でスクリプトを記述して、必要な操作を実行できます。

于 2013-06-01T10:08:12.037 に答える