WSO2从服务响应中获取价值

时间:2016-01-25 15:13:54

标签: xpath wso2 wso2esb

我在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>$1</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"/>返回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"/>

但它返回一个空字符串。

2 个答案:

答案 0 :(得分:1)

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

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

有关详细信息,请参阅this link

感谢。

答案 1 :(得分:1)

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