gpt4 book ai didi

Spring WS 客户端添加 SoapHeader

转载 作者:行者123 更新时间:2023-12-04 21:17:38 24 4
gpt4 key购买 nike

我正在尝试使用soap header 发送SOAP请求,如下所示:

<SOAP-ENV:Header>
<Security xmlns="http://www.xxx.org/xxx/2003/05">
<UsernameToken><Username>yyyy</Username><Password>xxx</Password>
</UsernameToken></Security></SOAP-ENV:Header>

为了做到这一点,我使用 SoapActionCallback 添加标题元素
SoapActionCallback actionCallBack = new SoapActionCallback("https://aaa.com/bbb.asmx") {
public void doWithMessage(WebServiceMessage msg) {
SoapMessage smsg = (SoapMessage) msg;
smsg.setSoapAction("http://www.xxx.org/yyy/2003/05/SessionCreate");
SoapHeaderElement security = smsg.getSoapHeader().addHeaderElement(new QName("http://www.xxx.org/yyy", "Security"));
security.setText("<UsernameToken><Username>yyyy</Username><Password>xxx</Password></UsernameToken>");
}
};

我的问题是 SOAP 头看起来像这样
<SOAP-ENV:Header><Security xmlns="http://www.xxx.org/yyy/2003/05">&lt;UsernameToken&gt;&lt;Username&gt;yyyyy&lt;/Username&gt;&lt;Password&gt;xxxx&lt;/Password&gt;&lt;/UsernameToken&gt;</Security></SOAP-ENV:Header>

结果我的请求失败了:

如何正确添加此消息?

最佳答案

我也想要同样的东西。但是,在我自己的搜索中,Spring 并没有像 java 中的 SOAPMessage 那样具有完整的功能。您可能需要的是一个 addChildElement() 到标题。

我最终放弃了 SoapMessage 构建并采用了以下方法:

SOAPMessage message = MessageFactory.newInstance();
private void buildHeader(String userName, String password) throws SOAPException{
SOAPHeader header = message.getSOAPHeader();
QName authHeader = new QName(SCHEMA, "AuthenticationHeader", SCHEMA_PREFIX);
SOAPHeaderElement authElement = header.addHeaderElement(authHeader);

QName userNameHeader = new QName(SCHEMA, "UserName", SCHEMA_PREFIX);
SOAPElement userElement = authElement.addChildElement((userNameHeader));
userElement.setTextContent(userName);

QName passwordHeader = new QName(SCHEMA, "Password", SCHEMA_PREFIX);
SOAPElement passwdElement = authElement.addChildElement(passwordHeader);
passwdElement.setTextContent(password);


}

请注意,上述方法使用 sendSourceAndReceiveToResult 传递 SOAPMessage 将 SOAPMessage 包装在另一个信封中,这不是我们想要的。 :(

更新 (10/25/2013):我找到了 this solution在另一个讨论中。这有点模糊,但值得研究。我会尝试在我的最后测试这一点。我的一位同事尝试了 spring-integration-ws 并在 google 中寻找主题和soap headers 产生了一些有前途的资源。

更新(2013 年 10 月 25 日):在玩弄图书馆之后,我发现有一种更快的方法可以使用以下方法将 SOAPMessage 包装到 Spring 的 SoapMessage 中:
// message is a SOAPMessage object with custom headers
SoapMessage soapMessage = new SaajSoapMessage(message);
soapMessage.writeTo(System.out);

也许在您构建您的soapmessage 之后,您可以将其路由到spring-ws 等等。

关于Spring WS 客户端添加 SoapHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19140265/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com