我试图用SOAP头发送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"><UsernameToken><Username>yyyyy</Username><Password>xxxx</Password></UsernameToken></Security></SOAP-ENV:Header>结果,我的请求失败了:
我怎样才能正确地添加这条信息?
发布于 2013-10-11 03:11:37
我也要一样的东西。但是,正如我在自己的搜索中所看到的那样,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);
}请注意,通过上面传递的方法,使用SOAPMessage使用sendSourceAndReceiveToResult将SOAPMessage包装在另一个信封中,这不是我们想要的。:(
更新(10/25/2013):我在另一次讨论中发现了this solution。这有点模糊,但值得一查。我会试着在我的头上测试一下。我的一位同事尝试了spring-integration-ws,并在google中寻找这个主题,soap头产生了一些有希望的资源。
更新(10/25/2013):在玩弄了库之后,我发现有一种更快的方法可以使用以下方法将SOAPMessage封装到Spring的SoapMessage中:
// message is a SOAPMessage object with custom headers
SoapMessage soapMessage = new SaajSoapMessage(message);
soapMessage.writeTo(System.out);也许,在您构建了soapmessage之后,您可以将其路由到spring等等。
https://stackoverflow.com/questions/19140265
复制相似问题