将自定义http标头添加到spring引导WS调用(wstemplate)

时间:2018-02-16 18:00:41

标签: java spring soap

我遵循了本指南"正在使用SOAP Web服务",at https://spring.io/guides/gs/consuming-web-service/ 并将其更改为调用我自己的内部SOAP服务,它进行调用 正如所料,但是现在我需要通过WsTemplate传递一个http头, 最简单的方法是什么?

3 个答案:

答案 0 :(得分:2)

公共类WsHttpHeaderCallback实现WebServiceMessageCallback {

public WsHttpHeaderCallback()
{
    super();
}

@Override
public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException
{
    String headerKey="headerkey";
    String headerValue="headervalue";
    addRequestHeader(headerKey, headerValue);     
}

private void addRequestHeader(String headerKey, String headerValue) throws IOException
{

    TransportContext context = TransportContextHolder.getTransportContext();
    WebServiceConnection connection = context.getConnection();

    if (connection instanceof HttpUrlConnection) {
        HttpUrlConnection conn = (HttpUrlConnection) connection;

        conn.addRequestHeader(headerKey, headerValue); 

    }
}   

}

答案 1 :(得分:0)

我不确定这是否有帮助,但发现了一些documentation

要在客户端上设置WS-Addressing标头,可以使用org.springframework.ws.soap.addressing.client.ActionCallback。 ...

webServiceTemplate.marshalSendAndReceive(o, new ActionCallback("http://samples/RequestOrder"));

答案 2 :(得分:0)

我遇到了同样的问题。如果可以帮助某人,我在这里找到了一个解决方案:Spring WS Add Soap Header in Client

这个想法是创建一个实现org.springframework.ws.client.core.WebServiceMessageCallback的类,并重写doWithMessage()方法。 doItMessage()方法以WebServiceMessage作为参数,并在发送请求之前由springWs进程调用,允许在发送之前对其进行修改。

上面示例中的工作是对对象进行编组并将其添加到请求的标头中。

就我而言,我必须谨慎对待要设置为标头的对象的XML注释,尤其是带有namespace属性的@XmlRootElement。

完成此操作后,必须将WSClient调整为使用marshalSendAndReceive()方法,该方法接受一个请求和一个uri,一个有效负载对象和一个WebServiceMessageCallback。