3
<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);
4

1 回答 1

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());

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

于 2013-07-16T23:09:45.807 回答