java - SOAP 服务中的命名空间

标签 java xml web-services soap namespaces

我正在尝试使用 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/

相关文章:

java - ListView 中的可点击项目

java - 在这种情况下,我需要 Web 服务还是 Hessian 服务吗?

java - 线程池运行web服务请求的合理线程数

xml - 如何在不将其加载到内存和使用 XElement 的情况下读取大型 xml 文件

java - 如何从数组中删除一个值

java - Spring 数据 Redis NoSuchBeanDefinitionException : No qualifying bean of type

java - 输入整数时如何修复打印输出

java - 如何在XML中编写段落并使用Java代码?

web-services - javax.xml.bind.UnmarshalException,无法创建类的实例

java - 致命[主要] org.apache.hadoop.mapreduce.v2.app.MRAppMaster:启动MRAppMaster java.lang.NoClassDefFoundError时出错