【问题标题】:SOAPFactory creating 'null' value for 'soap' namespace in addressing header tagSOAPFactory 在寻址标头标记中为“soap”命名空间创建“null”值
【发布时间】:2012-06-09 16:10:28
【问题描述】:

在 JBoss4.2.3 中运行的 J2EE 应用程序中,我们正在创建一个 SOAPConnection 来调用第 3 方的 Web 服务。在 SOAP Header 中,我们必须设置 Addressing To 和 Action 标记,将“mustUnderstand”设置为“1”。这个 'mustUnderstand' 属性位于 http://www.w3.org/2003/05/soap-envelope 命名空间中。我们通过调用来创建它:

SOAPFactory#createName("mustUnderstand", "soap", "http://www.w3.org/2003/05/soap-envelope");

当我们将 saaj.jar 和 saaj-impl.jar 包含在我们的 WEB-INF/lib 文件夹中时,这会正确显示。如果我把它们取出来,命名空间就会变成空值:xmlns:soap='null' 而不是 xmlns:soap="http://www.w3.org/2003/05/soap-envelope"。这是整个坏标签:

<wsa:To xmlns:wsa='http://schemas.xmlsoap.org/ws/2004/08/addressing' xmlns:soap='null' soap:mustUnderstand='1'>http://domain/web-service.url</wsa:To>.

但如果我们将这 2 个 jar 文件与应用程序一起部署,我们自己托管的 Web 服务会在创建故障时失败(由于类转换异常:

javax.xml.soap.SOAPException: java.lang.ClassCastException: com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl)

我们的 J2EE 应用程序是一个 JBossWS Web 服务,它本身调用第 3 方 Web 服务。与 jar 文件存在明显冲突。

关于如何在生成的 SOAP 标记中写入 http://www.w3.org/2003/05/soap-envelope 命名空间的任何想法?

【问题讨论】:

    标签: java soap namespaces


    【解决方案1】:

    我最终使用 API 直接调用 SOAPHeaderElement#mustUnderstand(true)。这看起来已经解决了这个问题,因为不需要另一个命名空间声明(它使用来自信封本身的soap-env命名空间声明。

    我还有另一个问题(JBoss 想要发送一个分块的 HTTP 请求,第 3 方网络服务不喜欢它,但我还没有深入研究那个)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-07
      • 2014-02-25
      • 2019-01-12
      • 2011-10-08
      • 1970-01-01
      • 2012-01-02
      • 2020-05-07
      相关资源
      最近更新 更多