java客户端代码中的Webwervice安全头

时间:2013-07-16 17:18:02

标签: java web-services

<soapenv:Header>
<UsernameToken xmlns="http://siebel.com/webservices">uname</UsernameToken>
<PasswordText xmlns="http://siebel.com/webservices">pass</PasswordText>
<SessionType xmlns="http://siebel.com/webservices">None</SessionType>
</soapenv:Header>

我使用轴运行时生成了客户端代码,我收到了这个异常:无法在匿名会话池中执行没有身份验证的操作'QueryByExample'。请将身份验证类型与Web服务操作相关联。(SBL-EAI-04552)。

我从stackoverflow看了几个小时的答案,没有任何问题。请指导我......

服务代码:

SOAPHeaderElement wsseSecurity = new SOAPHeaderElement(new PrefixedQName("http://schemas.xmlsoap.org/ws/2002/04/secext","Security", "wsse"));
        MessageElement username = new MessageElement("uname", "UsernameToken");
        MessageElement password = new MessageElement("pass", "PasswordText");
        username.setObjectValue("username");
        password.setObjectValue("password");
        wsseSecurity.addChild(username);
        wsseSecurity.addChild(password);
stub.setHeader(wsseSecurity);

1 个答案:

答案 0 :(得分:0)

您需要添加更多内容,主要问题是您如何确定和使用密码。您处于正确的路径,但以下是如何创建SOAP Axis 1.4客户端:

InputStream inConfig = BaseTestCase.class.getClassLoader().getResourceAsStream("axis_client_config.xml");
        EngineConfiguration config = new FileProvider(inConfig);
        PartnerAPILocator locator = new PartnerAPILocator(config);
        inConfig.close();

        stub = locator.getSoap();

        Stub axisPort = (Stub) stub;
        axisPort._setProperty(UsernameToken.PASSWORD_TYPE, WSConstants.PASSWORD_TEXT);
        axisPort._setProperty(WSHandlerConstants.USER, "ET USERNAME");
        axisPort._setProperty(WSHandlerConstants.PW_CALLBACK_REF, new PasswordTokenHandler());

这是我的source并尝试按照教程进行操作,您甚至可以下载代码。希望这对你有所帮助。