SOAP UI的XQuery断言失败

时间:2016-10-21 14:58:00

标签: soap xquery soapui

我一直在关注这个例子:

https://bharathsharesinfo.wordpress.com/2013/03/16/assertions-xquery-match/

我按照以下方式导入了wsdl文件:

http://www.restfulwebservices.net/wcf/StockQuoteService.svc?wsdl

我为响应生成了一个MockService,并为GetStockQuote操作添加了一个测试用例。然后我添加了XQuery Match断言,如下所示(声明是自动添加的):

declare namespace soapenv='http://schemas.xmlsoap.org/soap/envelope/';
declare namespace ns1='http://www.restfulwebservices.net/DataContracts/2008/01';
declare namespace ns='http://www.restfulwebservices.net/ServiceContracts/2008/01';
    <Result>
    {
    for $x in //ns1:GetStockQuoteResult[1]
    return <Symbol>{data($x/a:Symbol/text())}</Symbol>
    }
    </Result>

我返回时出现以下错误:

XQuery Match Assertion failed for path [declare namespace ns1='http://www.restfulwebservices.net/DataContracts/2008/01'; declare namespace ns='http://www.restfulwebservices.net/ServiceContracts/2008/01';   { for $x in //ns1:GetStockQuoteResult[1] return  {data($x/a:Symbol/text())}  }  ] : RuntimeException:java.lang.reflect.InvocationTargetException

你能帮忙吗?

2 个答案:

答案 0 :(得分:1)

@wst正确回答a名称空间前缀丢失;如果您看到 SOAPUI 错误日志,您将看到:

  XPST0081: XQuery static error in #...<Symbol>{data($x/a:Symbol/text#:
    Prefix a has not been declared

当然,解决方案是在 XQuery 中简单地声明名称空间a但是 还有另一种选择;在SOAPUI中,您可以使用*通配符来引用任何名称空间,因此您的 XQuery Assertion 可以简化为:

<Result>
{
for $x in //*:GetStockQuoteResult[1]
return <Symbol>{data($x/*:Symbol/text())}</Symbol>
}
</Result>

答案 1 :(得分:0)

在XPath中,引用a:Symbol,但未声明名称空间前缀a并将其分配给名称空间。