Java 向spring启动WS调用(wstemplate)添加自定义http头

Java 向spring启动WS调用(wstemplate)添加自定义http头,java,spring,soap,Java,Spring,Soap,我遵循了下面的指南“使用SOAP web服务”,在 并将其更改为调用我自己的内部SOAP服务,它进行调用 正如预期的那样,但是现在我需要通过WsTemplate传递一个http头, 最简单的方法是什么?我不确定这是否有帮助,但找到了一些 要在客户端上设置WS-Addressing标头,可以使用org.springframework.WS.soap.Addressing.client.ActionCallback webServiceTemplate.marshalSendAndReceive(o

我遵循了下面的指南“使用SOAP web服务”,在 并将其更改为调用我自己的内部SOAP服务,它进行调用 正如预期的那样,但是现在我需要通过WsTemplate传递一个http头,
最简单的方法是什么?

我不确定这是否有帮助,但找到了一些

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

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

公共类WsHttpHeaderCallback实现WebServiceMessageCallback {


}我也面临同样的问题。如果它能帮助某人,我在这里找到了一个解决方案:

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

在上面的示例中所做的是Marschall对象并将其添加到请求的头部

在我的例子中,我必须小心地处理要设置为头的对象的XML注释,尤其是带有namespace属性的@XmlRootElement

完成此操作后,必须调整WSClient以使用marshalSendAndReceive()方法,该方法接受请求、uri、有效负载对象和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); 

    }
}