Spring-WS为SOAP版本1.2设置SOAPAction头

时间:2014-12-22 23:12:40

标签: java web-services soap spring-ws

我必须使用Spring-WS连接到SOAP 1.2 Web服务,但是我在设置服务所需的SOAPAction头时遇到了困难。我已经查看了herethere,但似乎没有一个解决方案适用于我的情况。

我收到一条错误消息,主要说明SOAPAction不能为空。 (如果需要,我会发布实际的错误消息)

WebServiceTemplate的默认行为似乎是它将标头作为空字符串发送。

我在WebServiceTemplate中使用了两种方法来设置动作

  1. SoapActionCallback与webServiceTemplate#sendAndReceive()
  2. 一起使用
  3. 使用setSoapAction( String s )
  4. 在回调中手动设置标题

    选项1不做任何事情。选项2设置标题,但只是暂时的。如果我在回调中记录getSoapAction()调用,我可以看到它设置,但它不会发送到任何地方。至少不是我怀疑服务需要的单独标题。

    我挖掘了SaajSoapMessage implementation的来源,实际上它将动作设置为Content-Type标头的一部分,根据我读过的一些参考资料,这是正确的行为。问题是我在Content-Type标题中看不到该操作。

    其他SO问题有一个答案,说明Saaj实现中存在一个错误,导致动作标题的更改被忽略。基于问题时间戳,我希望它对于正在使用的版本是固定的。

    出于调试目的,我正在使用我创建的SoapUI模拟。我无权访问实际WS实现的源或日志。我认为如果有任何不同,它会使用.NET / WCF。

    所以,这一切都归结为简单的问题:如何使用Spring-WS为SOAP 1.2设置SOAPAction标头

    我正在使用Spring-WS的2.1.4-RELEASE版本,但是我没有对Spring-core版本3.2.4等的默认依赖项,而是为同一个库手动设置依赖项,但对于版本3.2 0.7。这样做的原因是我希望与Grails 2.3.6一起提供与Spring集成的完全相同的Spring版本。

2 个答案:

答案 0 :(得分:2)

I got this trouble too,and found the solution: you can click this url: https://spring.io/guides/gs/consuming-web-service/ you will see

Settings->Intentions->Java->Declaration

from this demo enter image description here

so this is answer !

答案 1 :(得分:1)

仅在SOAP 1.1中使用单独的SOAPAction标头。在SOAP 1.2中,该操作应该被设置为Content-Type头中的参数,正如您所见,Spring-WS包含设置该参数所需的代码。

如果该参数丢失,则很可能是SAAJ的问题。我在Java 1.6中使用SAAJ实现问题seen。解决方法是使用您的应用程序打包更新的SAAJ版本。

如果仍然无效,那么您唯一的选择是进行一些调试以找出重置Content-Type标头的位置。

相关问题