Java SOAP版本1.2的SpringWS设置SOAPAction头
我必须使用SpringWS连接到SOAP1.2Web服务,但在设置服务所需的SOAPAction头时遇到了困难。我已经看过了,但似乎没有一个解决方案适用于我的情况 我收到一条错误消息,基本上说明SOAPAction不能为空。(如果需要,我将发布实际的错误消息) WebServiceTemplate的默认行为似乎是将头作为空字符串发送 我对WebServiceTemplate使用了两种方法来设置操作Java SOAP版本1.2的SpringWS设置SOAPAction头,java,web-services,soap,spring-ws,Java,Web Services,Soap,Spring Ws,我必须使用SpringWS连接到SOAP1.2Web服务,但在设置服务所需的SOAPAction头时遇到了困难。我已经看过了,但似乎没有一个解决方案适用于我的情况 我收到一条错误消息,基本上说明SOAPAction不能为空。(如果需要,我将发布实际的错误消息) WebServiceTemplate的默认行为似乎是将头作为空字符串发送 我对WebServiceTemplate使用了两种方法来设置操作 与webServiceTemplate#sendAndReceive()一起使用 使用手动设置回调
我使用的是SpringWS的2.1.4版本,但不是SpringCoreVersion3.2.4等的默认依赖项,而是手动为相同的libs设置依赖项,但针对版本3.2.7。这样做的原因是,我希望使用与Grails 2.3.6完全相同的Spring版本来集成此组件。一个单独的
SOAPAction
头仅在SOAP1.1中使用。在SOAP1.2中,该操作应设置为内容类型
标题中的一个参数,如您所见,SpringWS包含设置该参数所需的代码
如果该参数丢失,则很可能是SAAJ的问题。我在Java1.6中的SAAJ实现中遇到了这个问题。解决方法是将较新的SAAJ版本打包到应用程序中
如果这仍然没有帮助,那么您唯一的选择就是进行一些调试,以确定在哪里重置
内容类型标题。我也遇到了这个问题,并找到了解决方案:
您可以单击此url:
你会看到
public GetQuoteResponse getQuote(String ticker) {
GetQuote request = new GetQuote();
request.setSymbol(ticker);
log.info("Requesting quote for " + ticker);
GetQuoteResponse response = (GetQuoteResponse) getWebServiceTemplate()
.marshalSendAndReceive("http://www.webservicex.com/stockquote.asmx",
request,
new SoapActionCallback("http://www.webserviceX.NET/GetQuote"));
return response;
}
从这个演示中
这就是答案 使用最新版本的SAAJ修复了此问题。在web容器中使用最新版本是另一回事……出于好奇,您正在使用的servlet容器是什么?您遇到了什么问题?我必须在Websphere 7.X上部署该应用程序。将最新的SAAJ与我的应用程序捆绑在一起没有任何效果。根据到目前为止的调查,似乎SAAJ是在非常早期的阶段由Websphere加载的。更改应用程序的类加载设置(父级上次)没有帮助。我还相信WebSphereSAAJ包含在其他一些jar中。事实上,WAS7.X有一个SAAJ版本,其中不存在此问题。因此,任何阅读本文的人:即使单元/集成测试失败,也要在实际服务器上进行测试:)