【问题标题】:Axis 1.4 Soap Header add Username and PasswordAxis 1.4 Soap Header 添加用户名和密码
【发布时间】:2016-12-14 22:21:13
【问题描述】:

我有一个axis 1.4 Web 服务客户端。我需要将用户名和密码添加到肥皂消息头。我做到了,但我也产生了一些不受欢迎的属性。

这是我的代码:

   SOAPHeaderElement sec = new SOAPHeaderElement(
            "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd",
            "wsse:Security");

    SOAPHeaderElement token = new SOAPHeaderElement("",
            "wsse:UsernameToken");
    SOAPHeaderElement username = new SOAPHeaderElement("", "wsse:Username");
    SOAPHeaderElement password = new SOAPHeaderElement("", "wsse:Password");
    username.addTextNode("testuser");
    password.addTextNode("testpass");

    token.addChildElement(username);
    token.addChildElement(password);
    sec.addChildElement(token);

这是我要生成的肥皂标题:

    <soapenv:Header> 
<wsse:Security 
     xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">         
    <wsse:UsernameToken> 
        <wsse:Username>testuser</wsse:Username> 
        <wsse:Password>testpass</wsse:Password>
    </wsse:UsernameToken> 
</wsse:Security> 

这是生成的标题:

    <soapenv:Header>
<wsse:Security 
    soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" 
    soapenv:mustUnderstand="0" 
    xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
    xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <wsse:UsernameToken 
        soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" 
        soapenv:mustUnderstand="0" 
        xmlns:wsse="">
            <wsse:Username 
                soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" 
                soapenv:mustUnderstand="0" 
                xmlns:wsse="">testuser</wsse:Username>
            <wsse:Password 
                soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" 
                soapenv:mustUnderstand="0" 
                xmlns:wsse="">testpass</wsse:Password>
    </wsse:UsernameToken>
</wsse:Security>

其他名称空间和属性没有问题,但空的 xmlns:wsse="" 属性会导致我的客户端从 Web 服务获取错误。在soap-ui中,当我抛出这个空属性时,我得到了成功的响应。在 java 代码中,我从 Web 服务中得到解析错误。

如果没有这些属性,我无法生成标题。如果我在标题元素中添加“wsse”前缀,它也会为这些元素添加 xmlns:wsse="" 属性。 如果没有 wsse 前缀,我会从 Web 服务中得到错误。

如何在轴 1.4 中生成带有 wsse 前缀且没有 xmlns:wsse="" 属性的标题?

【问题讨论】:

  • 试试SOAPHeaderElement token = new SOAPHeaderElement(null, "wsse:UsernameToken");
  • @Shloim - 这不会导致模棱两可的方法调用错误吗?这匹配两个构造函数的签名
  • 所以投:(String)null

标签: java xml web-services soap axis


【解决方案1】:

与其为命名空间 URI 传递空字符串,不如简单地为安全标签做同样的事情:

String namespaceUri = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd";
SOAPHeaderElement sec = new SOAPHeaderElement(namespaceUri, "wsse:Security");
SOAPHeaderElement token = new SOAPHeaderElement(namespaceUri, "wsse:UsernameToken");
SOAPHeaderElement username = new SOAPHeaderElement(namespaceUri, "wsse:Username");
SOAPHeaderElement password = new SOAPHeaderElement(namespaceUri, "wsse:Password");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-19
    • 2015-10-19
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多