我正在尝试使用 Java 为我的 WSDL SOAP Web 服务编写单元测试。
当我尝试断言 XML 相等性时,出现了来自 Web 服务的响应应该是什么样子以及它实际是什么样子的问题。
我不知道为什么会出现以下错误:
Expected namespace prefix "pns111", but was "ns3"
这里,pns111 是我为 Web 服务定义的命名空间。为什么我收到 ns3 命名空间?为什么特别是ns3?我没有在任何地方定义 ns3 命名空间,这个命名空间有什么特殊之处吗?
此外,我还收到有关 XML 相等断言的另一个错误:
Expected presence of child nodes to be 'true', but was 'false'.
您能告诉我有关此错误的任何线索吗?
最佳答案
在 XML 中,用于 namespace 的前缀不必相同即可被视为相等的两个 XML 文档。将命名空间前缀视为命名空间 URI 的缩写会有所帮助。
从 XML 处理的角度来看,这两个 XML 文档是相同的:
<?xml version="1.0" encoding="UTF-8"?>
<foo:root xmlns:foo="http://example.com">
<foo:node>Hi!</foo:node>
</foo:root>
还有:
<?xml version="1.0" encoding="UTF-8"?>
<bar:root xmlns:bar="http://example.com">
<bar:node>Hi!</bar:node>
</bar:root>
在第一个示例中,foo
表示“http://example.com”命名空间”。在第二个 bar
中,也指向相同的命名空间。
因此,在测试中,您应该验证命名空间 URI 是否与预期匹配。使用哪个前缀并不重要,只要它在 XML 文档中一致即可。
这取决于生成 XML 的库是否使用您指定的前缀或自行选择一个前缀。
关于java - SOAP 服务中的命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39194518/