0

在 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");

当我们在 WEB-INF/lib 文件夹中包含 saaj.jar 和 saaj-impl.jar 时,这会正确显示。如果我把这些拿出来,命名空间就会出现 null 为: 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 文件存在明显冲突。

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

4

1 回答 1

0

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

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

于 2012-06-05T17:49:08.073 回答