首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring中设置Soap请求的头

在Spring中设置Soap请求的头
EN

Stack Overflow用户
提问于 2015-10-21 11:14:54
回答 1查看 1.2K关注 0票数 0

我一直致力于将SOAP与Spring集成起来。我必须在我的请求中添加标题,但我得到的是,

代码语言:javascript
复制
Could not complete request
org.springframework.ws.soap.client.SoapFaultClientException: No WS-Security header found

请在下面找到我的代码

代码语言:javascript
复制
public String createSaleOrder(Suborder suborder)
{
    SaleOrder saleorder = new SaleOrder();
    saleorder = setSaleOrderObject(suborder);
    CreateSaleOrderRequest request = new CreateSaleOrderRequest();
    request.setSaleOrder(saleorder);
    this.getWebServiceTemplate().marshalSendAndReceive(uri, request, 
            new WebServiceMessageCallback() {
                public void doWithMessage(WebServiceMessage message) throws IOException, TransformerException 
        {
                    SoapMessage soapmessage = (SoapMessage)message;                
                    SoapHeader header = soapmessage.getSoapHeader();

                    StringBuilder soapheader = new StringBuilder();
                    soapheader.append("<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:ser=\"http://wewewqdad.com/services/\">");
                    soapheader.append("<soapenv:Header>");
                    soapheader.append("<wsse:Security soapenv:mustUnderstand=\"1\" xmlns:wsse=\"http://docs.oasis-open.asdasda-1.0.xsd\">  ");
                    soapheader.append("<wsse:UsernameToken wsu:Id=\"UsernameToken-2\" xmlns:wsu=\"http://docs.oasis-open.org/wss/2004/01/oaasdasd-dasdasd-1.0.xsd\">");
                    soapheader.append("<wsse:Username>username</wsse:Username>");
                    soapheader.append("<wsse:Password Type=\"http://docs.aseasdasd-wss-username-token-profile-1.0#PasswordText\">password</wsse:Password>");
                    soapheader.append("<wsse:Nonce EncodingType=\"http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary\">VMEZT//J0bZw7HfZZyXAZQ==</wsse:Nonce>");
                    soapheader.append("<wsu:Created>2014-09-04 T1015.41.649Z</wsu:Created>");
                    soapheader.append("</wsse:UsernameToken>");
                    soapheader.append("</wsse:Security>");
                    soapheader.append("</soapenv:Header>");
                    soapheader.append("<soapenv:Body>");
                    soapheader.append("</soapenv:Body>");
                    soapheader.append("</soapenv:Envelope>");

                    StringSource HeaderSource = new StringSource(soapheader.toString());
                    Transformer transformer = TransformerFactory.newInstance().newTransformer();
                    transformer.transform(HeaderSource,header.getResult());
                    }
    });
    return "Pushed";
}

更新

标头被设置。但是request对象现在包含额外的标记,这不是必需的,因此抛出错误。还有这些标签,比如我们如何将这些更改为

原始肥皂请求如下:

代码语言:javascript
复制
 <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Header><soapenv:Envelope xmlns:ser="http://abc.efg.com/services/" xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"><soapenv:Header><wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/asdasdasd-1.0.xsd" soapenv:mustUnderstand="1">  <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-2"><wsse:Username>asdasdasd</wsse:Username><wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oaasdasda-1.0#PasswordText">adsasdasdasda</wsse:Password><wsse:Nonce EncodingType="http://dasdasda004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">VMESASDASZT//asdasdasd</wsse:Nonce><wsu:Created>2014-09-04 T1015.41.649Z</wsu:Created></wsse:UsernameToken></wsse:Security></soapenv:Header></soapenv:Envelope></SOAP-ENV:Header><SOAP-ENV:Body><ns2:CreateSaleOrderRequest xmlns:ns2="http://asdasd.com/services/"><ns2:SaleOrder><ns2:DisplayOrderCode>156</ns2:DisplayOrderCode></ns2:SaleOrder></ns2:CreateSaleOrderRequest></SOAP-ENV:Body></SOAP-ENV:Envelope>
EN

回答 1

Stack Overflow用户

发布于 2015-10-21 11:18:30

在您的soapHeader中,您编写的不仅仅是实际的标题,而是整个Soap信封。不确定这是预料中的事。

无论如何,您可以使用一个库来处理WS安全性,比如WSS4J (通常包括在其他框架中)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33257895

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档