【问题标题】:Namespaces in SOAP servicesSOAP 服务中的命名空间
【发布时间】:2017-01-04 19:00:50
【问题描述】:

我正在尝试用 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'.

你能告诉我这个错误的任何线索吗?

【问题讨论】:

    标签: java xml web-services soap namespaces


    【解决方案1】:

    在 XML 中,用于命名空间的前缀不必相同,两个 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 也指向同一个命名空间。

    因此,在您的测试中,您应该验证 namespace URI 是否与预期匹配。使用哪个前缀无关紧要,只要在 XML 文档中保持一致即可。

    这取决于生成 XML 的库是使用您指定的前缀还是自己选择一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多