在 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 标记中写出命名空间的任何想法?