Создать параметр GET из массива xml - PullRequest
0 голосов
/ 20 сентября 2018

Я новичок в WSO2 EI.Теперь я уже создаю rest API, и в in_sequense я вызываю первую конечную точку WSDL с параметрами из созданного API и извлекаю следующий XML из этой WSDL конечной точки.

<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-массив с первой конечной точки может иметь различный вес.Какие посредники я могу использовать для этого?Спасибо!

1 Ответ

0 голосов
/ 20 сентября 2018

Поскольку я понял, что вы должны извлечь значения из 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-посредника используйте свойство-посредник

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