java - Spring-WS 为 SOAP 版本 1.2 设置 SOAPAction header

标签 java web-services soap spring-ws

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

我收到一条错误消息,基本上指出 SOAPAction 不能为空。 (如果需要,我会发布实际的错误消息)

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

我使用了两种 WebServiceTemplate 方法来设置操作

  1. 使用 SoapActionCallback使用 webServiceTemplate#sendAndReceive()
  2. 使用 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/

相关文章:

spring - RESTful 中的 JSON 注入(inject)

javascript - SOAP 原型(prototype) Ajax SOAPAction header 问题

php - 如何使用 Web 服务将 Joomla 登录 session 从一个网站共享到另一个网站?

java - 由于 ActionListener,JComboBox 未刷新/更新

java - jsp页面如何只刷新一个分区

java - Spring 数据JPA : How to fix NullPointerException in findById method of CrudRepository?

asp.net - ASMX Web 服务 - 返回具有属性的用户定义的类

java - 解释synchronized()内部的Commons Lang代码?

web-services - 什么被归类为 RESTful Web 服务

ios - 在 iOS 中使用 soap 在 https websrevice 中发送和接收数据 - Obj-C