【问题标题】:WSO2 ESB - Xpath expression returns null value on SOAP responseWSO2 ESB - Xpath 表达式在 SOAP 响应上返回空值
【发布时间】:2016-04-26 07:30:49
【问题描述】:

我有一个调用端点并更新 通过数据服务在数据库中响应。我做了必要的事 当我调用端点时 得到以下响应,这是预期的响应(此响应打印在日志文件中)。

<?xml version='1.0' encoding='utf-8'?>
<soapenv:Envelope xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope">
    <soapenv:Header>
        <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" env:mustUnderstand="1">
            <wsu:Timestamp xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="Timestamp-19033">
                <wsu:Created>2016-04-26T04:35:21.802Z</wsu:Created>
                <wsu:Expires>2016-04-26T04:40:21.802Z</wsu:Expires>
            </wsu:Timestamp>
        </wsse:Security>
    </soapenv:Header>
    <soapenv:Body>
        <ns2:purchaceFromMMRResponse xmlns:ns2="http://flw.mwt.mobitel.com/">
            <return>
                <amount>1.0</amount>
                <date>26042016</date>
                <mobile>0711325362</mobile>
                <recipetNo>20160426100525249665</recipetNo>
                <resultCode>1999</resultCode>
                <resultDesc>Dear Customer,Service is not available due to a technical failure. Please try again in a while .</resultDesc>
                <time>100449</time>
                <transactionId>SDC311521</transactionId>
            </return>
        </ns2:purchaceFromMMRResponse>
    </soapenv:Body>
</soapenv:Envelope>

要调用数据服务(并更新响应字段),我需要从肥皂响应中获取响应值。为此,我使用了 xpath 表达式 获取将在属性中设置然后在数据服务中使用的值。

<property expression="//ns2:return/ns2:mobile/text()"
        name="mobile" scope="default" type="STRING" xmlns:ns2="http://flw.mwt.mobitel.com/"/>

在我做自定义日志时将值设置为属性后

<log level="custom">
        <property expression="$ctx:mobile" name="mobile"/>
</log>  

值没有被打印出来。如果我在这里做错了什么,请纠正我。

【问题讨论】:

    标签: xpath soap wso2 wso2esb


    【解决方案1】:

    节点returnmobile不属于ns2命名空间,试试//return/mobile/text()

    【讨论】:

    • 谢谢你的回答,它成功了,但是我不明白,为什么它们不是命名空间的一部分,&lt;ns2:purchaceFromMMRResponses:ns2="http://flw.mwt.mobitel.com/"&gt; 这行不是在说明命名空间吗。
    • flw.mwt.mobitel.com">,所有子节点都属于“flw.mwt.mobitel.com”。但是使用 flw.mwt.mobitel.com">,您只需指定一个带有前缀 ns2 的命名空间,并说 purchaceFromMMRResponse 属于这个命名空间。但是没有为子节点指定 ns2 前缀:它们不属于这个 ns
    • 对不起,我明白了,结果和移动没有命名空间前缀。我的错。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    相关资源
    最近更新 更多