SOAPFactory在寻址标头标记中为'soap'命名空间创建'null'值

时间:2012-06-05 16:02:38

标签: java soap namespaces

在JBoss4.2.3中运行的J2EE应用程序中,我们创建了一个SOAPConnection来调用第三方的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时,会正确显示。如果我把它们拿出来,命名空间就会出现如下: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>

但是如果我们在应用程序中部署了这两个jar文件,那么我们自己的托管Web服务在创建错误时就会失败(由于类转换异常:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

我还有另外一个问题(JBoss希望发送一个分段的HTTP请求,第三方Web服务不喜欢,但我还没有看到那个问题)