将SoapHeader添加到org.springframework.ws.WebServiceMessage [英] Add SoapHeader to org.springframework.ws.WebServiceMessage
本文介绍了将SoapHeader添加到org.springframework.ws.WebServiceMessage的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如何将对象添加到 org.springframework.ws.WebServiceMessage
的soap标头中这是我希望最终得到的结构:
This is the structure I'm looking to end up with:
<soap:Header>
<credentials xmlns="http://example.com/auth">
<username>username</username>
<password>password</password>
</credentials>
</soap:Header>
推荐答案
基本上,你需要使用 WebServiceMessageCallback
在您的客户端中,在消息创建之后但在发送之前修改消息。 @skaffman已经非常准确地描述了代码的其余部分,所以整个内容可能如下所示:
Basically, you need to use a WebServiceMessageCallback
in your client to modify the message after its creation but before it is sent. To rest of the code has been described pretty accurately by @skaffman so the whole stuff might look like this:
public void marshalWithSoapActionHeader(MyObject o) {
webServiceTemplate.marshalSendAndReceive(o, new WebServiceMessageCallback() {
public void doWithMessage(WebServiceMessage message) {
try {
SoapMessage soapMessage = (SoapMessage)message;
SoapHeader header = soapMessage.getSoapHeader();
StringSource headerSource = new StringSource("<credentials xmlns=\"http://example.com/auth\">\n +
<username>"+username+"</username>\n +
<password>"+password"+</password>\n +
</credentials>");
Transformer transformer = TransformerFactory.newInstance().newTransformer();
transformer.transform(headerSource, header.getResult());
} catch (Exception e) {
// exception handling
}
}
});
}
就我个人而言,我发现Spring-WS很难满足这样的基本需求,他们应该修复 SWS-479 。
Personally, I find that Spring-WS sucks hard for such a basic need, they should fix SWS-479.
这篇关于将SoapHeader添加到org.springframework.ws.WebServiceMessage的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文