我一直在关注这个例子:
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
你能帮忙吗?
答案 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
并将其分配给名称空间。