我必须使用 Spring-WS 连接到 SOAP 1.2 Web 服务,但在设置服务所需的 SOAPAction header 时遇到困难。我已经看过了here和 there ,但似乎没有人给出适用于我的情况的解决方案。
我收到一条错误消息,基本上指出 SOAPAction 不能为空。 (如果需要,我会发布实际的错误消息)
WebServiceTemplate 的默认行为似乎是将 header 作为空字符串发送。
我使用了两种 WebServiceTemplate 方法来设置操作
- 使用
SoapActionCallback
使用 webServiceTemplate#sendAndReceive() - 使用
setSoapAction( String s )
手动设置回调中的 header
选项 1 不执行任何操作。选项 2 设置 header ,但只是暂时的。如果我在回调中记录 getSoapAction() 调用,我可以看到它已设置,但它没有发送到任何地方。至少不像我怀疑的那样作为服务所需的单独 header 。
我挖掘了一些 SaajSoapMessage implementation 的来源事实上,它是将操作设置为 Content-Type header 的一部分,根据我读到的一些引用资料,这是正确的行为。问题是我也没有在 Content-Type header 中看到该操作。
其他 SO 问题的答案表明 Saaj 实现中存在错误,导致操作 header 的更改被忽略。根据问题时间戳,我希望它能够针对正在使用的版本进行修复。
出于调试目的,我使用我创建的 SoapUI 模拟。我无权访问实际 WS 实现的源代码或日志。我相信它使用 .NET/WCF(如果这有什么区别的话)。
所以,这一切都归结为一个简单的问题:如何使用 Spring-WS 设置 SOAP 1.2 的 SOAPAction header
我正在使用 Spring-WS 版本 2.1.4-RELEASE,但不是对 Spring-core 版本 3.2.4 等的默认依赖项,而是为相同的库手动设置依赖项,但对于版本 3.2 .7.这样做的原因是我希望拥有与 Grails 2.3.6 附带的完全相同的 Spring 版本,其中将集成该组件。
最佳答案
我也遇到了这个问题,找到了解决办法: 您可以点击这个网址:https://spring.io/guides/gs/consuming-web-service/ 你会看到
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;
}
来自此演示 enter image description here
这就是答案!
关于java - Spring-WS 为 SOAP 版本 1.2 设置 SOAPAction header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27611838/