【问题标题】:Use of Iterate Mediator in wso2 ESB在 wso2 ESB 中使用 Iterate Mediator
【发布时间】:2013-05-31 13:18:48
【问题描述】:

我的输入请求为:

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

现在我的问题是如何获取 oldid 的计数,以便我可以从 0 迭代到 oldid 的计数,类似于 for 循环。 其次,我如何将 oldid 值一一分配给有效负载。 请帮忙。提前致谢

【问题讨论】:

    标签: wso2 wso2esb esb


    【解决方案1】:

    您可以将迭代表达式更改为 expression="//xs:oldid" ,这将迭代到可用 oldid 元素的数量。然后您可以从迭代器中分配 newid 值,因为只有一个 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>
    

    【讨论】:

      【解决方案2】:

      对于这种情况,请考虑改用Script mediator。它允许您使用 JavaScript 或 Python 编写脚本来执行您想要的操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-11-14
        • 1970-01-01
        • 1970-01-01
        • 2017-12-25
        • 1970-01-01
        相关资源
        最近更新 更多