WSO2 从服务响应中获取价值

WSO2 get value from service response

我在 WSO2 ESB 中休息 api:

<api xmlns="http://ws.apache.org/ns/synapse" name="RestApi" context="/rest">
   <resource methods="POST GET" uri-template="/view/{symbol}" protocol="http">
      <inSequence>
         <log level="full"/>
         <payloadFactory media-type="xml">
            <format>
               <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://www.w3schools.com/webservices/">
                  <soapenv:Header/>
                  <soapenv:Body>
                     <web:FahrenheitToCelsius>
                        <web:Fahrenheit></web:Fahrenheit>
                     </web:FahrenheitToCelsius>
                  </soapenv:Body>
               </soapenv:Envelope>
            </format>
            <args>
               <arg evaluator="xml" expression="get-property('uri.var.symbol')"/>
            </args>
         </payloadFactory>
         <property name="DISABLE_CHUNKING" value="true" scope="axis2"/>
         <send>
            <endpoint>
               <address uri="http://www.w3schools.com/webservices/tempconvert.asmx" format="soap11"/>
            </endpoint>
         </send>
      </inSequence>
      <outSequence>
         <property name="messageType" value="application/json" scope="axis2"/>
         <property name="msgbody" expression="$body" scope="default" type="STRING"/>
         <log level="custom">
            <property name="To" expression="get-property('msgbody')"/>
         </log>
         <payloadFactory media-type="json">
            <format>{"Status":"evgeni"}</format>
            <args/>
         </payloadFactory>
         <send/>
      </outSequence>
      <faultSequence/>
   </resource>
</api>

重要的部分是 <outSequence></outSequence> 属性 <property name="msgbody" expression="$body" scope="default" type="STRING"/> returns 来自 soap 服务的响应。它看起来像这样:

<soap:Body xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <FahrenheitToCelsiusResponse xmlns="http://www.w3schools.com/webservices/">     
        <FahrenheitToCelsiusResult>4.44444444444444</FahrenheitToCelsiusResult>
    </FahrenheitToCelsiusResponse>
</soap:Body>

我只想获取 FahrenheitToCelsiusResult 的值 (4.44444444444444)。我该怎么做?

我试过了:

 <property xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
   name="msgbody" 
   expression="$body/soap:Body/FahrenheitToCelsiusResponse/FahrenheitToCelsiusResult" 
   scope="default" type="STRING"/>

但它 returns 是一个空字符串。

您必须在 xpath 表达式中提供命名空间,如下所示

<property expression="//ns:FahrenheitToCelsiusResult"
                    name="msgbody" scope="default" type="STRING"
                    xmlns:ns="http://www.w3schools.com/webservices/"/>

更多信息请参考this link

谢谢。

<property name="tempValue" expression="//*[local-name()='FahrenheitToCelsiusResult']" scope="default" type="STRING"/>