我们可以在WSO2ESB中设置一个数组吗?

时间:2013-07-12 07:15:54

标签: xpath wso2 wso2esb wso2dss

我想在我的场景中在WSO2ESB中设置一个数组。

我正在向数据库发送两个参数并获取行数,但我只需要一行。

我的配置是

<target>
               <sequence>
                  <property name="partybranchid"
                            expression="get-property('partybranchid')"
                            scope="default"
                            type="STRING"/>
                  <payloadFactory>
                     <format>
                        <p:Select_MailDetails_Op xmlns:p="http://ws.wso2.org/dataservice">
                           <xs:assetid xmlns:xs="http://ws.wso2.org/dataservice">$1</xs:assetid>
                           <xs:partybranchid xmlns:xs="http://ws.wso2.org/dataservice">$2</xs:partybranchid>
                        </p:Select_MailDetails_Op>
                     </format>
                     <args>
                        <arg expression="get-property('assetid')"/>
                        <arg expression="get-property('partybranchid')"/>
                     </args>
                  </payloadFactory>
<log level="full"/>
                  <send receive="Mail_Seq">
                     <endpoint>
                        <address uri="http://localhost:9764/services/massetparametersetdetail_DataService/"
                                 format="soap11"/>
                     </endpoint>
                  </send>
               </sequence>
            </target>

我正按以下顺序接收数据:

<log><property xmlns:v="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd"
             name="primarymail" action="set"
             expression="//v:primarymail/text()"
             scope="default"
             type="STRING"/></log>
 <iterate xmlns:v="http://ws.wso2.org/dataservice"
            xmlns:ns="http://org.apache.synapse/xsd"
            id="Mail"
            expression="//v:Datalist">
      <target>
         <sequence>
            <property xmlns:v="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd"
             name="primarymail"
             expression="//v:primarymail/text()"
             scope="default"
             type="STRING"/>
           <property xmlns:ns="http://org.apache.synapse/xsd"
             name="assetname"
             expression="//assetname/text()"
             scope="default"
             type="STRING"/>
<property xmlns:ns="http://org.apache.synapse/xsd"
             name="assetcode"
             expression="//assetcode/text()"
             scope="default"
             type="STRING"/>
   <property xmlns:ns="http://org.apache.synapse/xsd"
             name="activityname"
             expression="//activityname/text()"
             scope="default"
             type="STRING"/>
   <property xmlns:ns="http://org.apache.synapse/xsd"
             name="username"
             expression="//username/text()"
             scope="default"
             type="STRING"/>
   <property xmlns:ns="http://org.apache.synapse/xsd"
             name="parametername"
             expression="//parametername/text()"
             scope="default"
             type="STRING"/>
   <property xmlns:ns="http://org.apache.synapse/xsd"
             name="uomcode"
             expression="//uomcode/text()"
             scope="default"
             type="STRING"/>
<property xmlns:ns="http://org.apache.synapse/xsd"
             name="tododetails"
             expression="fn:concat('AssetName:',get-property('assetname'),',','AssetCode:',get-property('assetcode'),',','ActivityName:',get-property('activityname'),',','UserName:',get-property('username'),',','ParameterName:',get-property('parametername'),',','UomCode:',get-property('uomcode'))"
             scope="default"
             type="STRING"/>
 <log><property xmlns:v="http://ws.wso2.org/dataservice" xmlns:ns="http://org.apache.synapse/xsd"
             name="primarymail" action="set"
             expression="//v:primarymail/text()"
             scope="default"
             type="STRING"/></log>
             </sequence>
      </target>
   </iterate>
   </sequence>

我得到的反应如下,但我只想发一次邮件。

这里我的mailid正在重复。我如何取出这个邮件ID?

  

响应,primarymail =   邮件@ myunisoft.commail @ myunisoft.commail @ myunisoft.commail @ myunisoft.commail @ myunisoft.commail @ myunisoft.commail @ myunisoft.commail @ myunisoft.commail @ myunisoft.commail @ myunisoft.com

我如何为此拍单张邮件?

1 个答案:

答案 0 :(得分:0)

您的Web服务响应是一条SOAP消息,您接收到ESB中任何中介的内容就是该特定的传入消息。您不能直接拥有一组值。 - 一种选择是使用类中介并提取所需的值,并将该值设置为消息上下文中的属性并使用它。
- 如果在您的方案中可以更改响应有效负载,则使用已知分隔符返回响应,并使用xpath String操作来获取您的值。