如何在Suds中向Wsse Security / Username Token添加自定义元素

时间:2015-12-15 07:21:40

标签: soap suds wsse usernametoken

默认SOAP用户名令牌具有以下元素:

public class StringRev{
    public static void main(String args[]){
        String input = "He is the one";
        String[] inputSplit = input.split(" ");

        Collections.reverse(Arrays.asList(inputSplit));
        String output = StringUtil.join(Arrays.asList(inputSplit), " ");

        System.out.println(output);
    }
}

对于同样的我想要一个额外的令牌说Domain&组织,架构应如下所示,

 <wsse:UsernameToken>
        <wsse:Username>USERNAME</wsse:Username>
        <wsse:Password>PASSWORD</wsse:Password>
 </wsse:UsernameToken>

所以使用Element标签,我附加了元素,这里就是。

 <wsse:UsernameToken>
        <wsse:Username>USERNAME</wsse:Username>
        <wsse:Password>PASSWORD</wsse:Password>
        <Organization>ORGANIZATION</Organization>
        <Domain>DOMAIN</Domain>
 </wsse:UsernameToken>

现在,当我尝试设置相同的选项时:

wsse = ('wsse', 'http://schemas.xmlsoap.org/ws/2002/12/secext')
security = Element('Security', ns=wsse)

usernametoken = Element('UsernameToken', ns=wsse)

usernametoken.insert(Element('Username', ns=wsse).setText('USERNAME'))
usernametoken.insert(Element('Password', ns=wsse).setText('PASSWORD'))
usernametoken.insert(Element('Organization').setText('ORGANIZATION'))
usernametoken.insert(Element('Domain').setText('DEFAULT'))

security.insert(usernametoken)

我收到以下错误:

client.set_options(wsse=security)

看起来令牌类的类型正在改变......我错过了什么

由于

1 个答案:

答案 0 :(得分:2)

想出来。

客户端设置选项应该是soapheader而不是wsse,这里的代码是

client.set_options(soapheaders=security)