【问题标题】:Create GET parameter from xml array从 xml 数组创建 GET 参数
【发布时间】:2018-09-20 11:44:03
【问题描述】:

我是WSO2 EI 的新手。 现在我已经创建了一个 rest API, 并在 in_sequense 中使用创建的 API 中的参数调用第一个 WSDL 端点,然后从这个 WSDL 端点检索下一个 XML。

<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="http://pse/">
   <SOAP-ENV:Body>
      <ns1:dl190Response>
         <mvts>
            <mvts_S>
               <x>x1</x>
               <w>w1</w>
            </mvts_S>
            <mvts_S>
               <x>x2</x>
               <w>w2</w>
            </mvts_S>
         </mvts>
      </ns1:dl190Response>
   </SOAP-ENV:Body>
</SOAP-ENV:Envelope>

如何创建一个值为"Your statistic is x1, w1, x2, w2" 的参数来调用具有get 参数的下一个端点? 来自第一个端点的 XML 数组可以具有不同的权重。 我可以使用哪些调解员? 谢谢!

【问题讨论】:

  • 您能否以更好的方式描述,我所理解的是您需要按顺序调用多个端点但是我可以知道您在调用 WSDL 端点后要做什么。您想要从前一个调用的响应中构建一个请求,然后调用另一个 wsdl 端点?
  • 您好,感谢您的快速反应。我想从 x1w1x2w2 标记为一个参数。新参数的值必须是“Your statistic is x1, w1, x2, w2”并调用另一个rest端点,而不是wsdl端点。

标签: api wso2 wso2esb wso2ei


【解决方案1】:

据我了解,您的要求是从 XML 中获取值并将其存储在一个变量中,以便您可以使用该值来调用其他内容,如果这种理解是正确的,您可以使用 xpath 来获取值并存储它们在一个属性中,您可以稍后使用该属性。

 <property name="yourParameter" expression="concat('Your statistic ',$body//*[local-name()='mvts_S'][1]/*[local-name()='x'],',',$body//*[local-name()='mvts_S'][1]/*[local-name()='w'],',',$body//*[local-name()='mvts_S'][2]/*[local-name()='x'],',',$body//*[local-name()='mvts_S'][2]/*[local-name()='w'])"/>
<log level="custom">
                <property name="yourParameter" expression="$ctx:yourParameter"/>
             </log>

上述方法仅在有固定数组的情况下有效,但是对于数组中的多个元素,您需要编写 xslt 调解器,然后需要将其输出连接到属性中。

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"  xmlns:tem="http://tempuri.org/">
    <xsl:output omit-xml-declaration="yes" indent="yes"/>

    <xsl:template match="/">
 <Root>          
        <xsl:for-each select="//*[local-name()='dl190Response']/*[local-name()='mvts']/*[local-name()='mvts_S']">

           <xsl:value-of select="concat(x,',')"/><xsl:value-of select="concat(w,',')"/>

    </xsl:for-each>
</Root> 
    </xsl:template>
</xsl:stylesheet> 

xslt mediator 后使用属性 mediator

   <log level="custom">
            <property name="yourParameter" expression=" concat ('Your statistic ',$body//*[local-name()='Root']/text())"/>
         </log>
         <property name="yourParameter" expression=" concat ('Your statistic ',$body//*[local-name()='Root']/text())"/>
         <log level="custom">
            <property name="yourParameter1" expression="substring($ctx:yourParameter,1,string-length($ctx:yourParameter)-1)"/>
         </log>

【讨论】:

  • 您正确理解了我的请求,但是 xml 数组可以是任意长度。在这种情况下,xpath 将是什么?我的意思是 xpath 中的 [1] 和 [2] 并不总是适合我的情况
  • 您能否接受答案,以便对其他人有所帮助
猜你喜欢
  • 2016-03-24
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多