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