我有点了解我正在使用Apache Axis 1.4来查询Web服务。
我获得了一个WSDL文件,并生成了一个扩展org.apache.axis.client.Service
的XXXXImplServiceLocator
类,并实现了一个扩展javax.xml.rpc.Service
的生成接口。
我的“业务代码”在新的getXXXXImplPort(URL)
实例上调用XXXXImplServiceLocator
方法,然后调用:
((Stub) port).setTimeout(timeout);
((Stub) port).setUsername(username);
((Stub) port).setPassword(password);
Stub
是org.apache.axis.client.Stub
。
设置这些参数后,我只需调用一些getYYY()
方法,该方法代表对远程服务公开的服务之一的查询,并返回一个带有结果的“域”对象。
问题是我必须对此服务使用抢占式身份验证。我试过通过soapUI查询,除非我设置了抢占式身份验证模式,否则我不会有任何结果。
我已经尝试使用谷歌搜索如何设置该模式,但什么也没找到。他们所说的只是Preemptive authentication with Apache HttpClient,可以很好地“嵌入”或被Axis使用,但我真的没有看到如何混合它。
我与此ServiceLocator
交互的唯一代码是初始设置,然后只是查询。
如何设置抢先身份验证模式?我错过了什么?我不理解什么,以至于我无法解决这个问题?
闻起来像是一个非常微不足道的问题,但也许我不理解这一事实阻止了我解决这个问题。
提前致谢,是的:)
答案 0 :(得分:1)
要强制Apache Axis使用抢占式身份验证,请设置用户名和密码,如下所示:
import org.apache.axis.client.Call;
import org.apache.axis.client.Stub;
....
....
((Stub) client)._setProperty(Call.USERNAME_PROPERTY, "username");
((Stub) client)._setProperty(Call.PASSWORD_PROPERTY, "password");
也就是说,如果你仍然希望使用Apache HttpClient作为传输,你可以通过在Axis客户端配置文件中设置以下内容来实现:client_config.wsdd
:
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
.....
.....
<!-- use CommonsHTTPSender instead of the default HTTPSender -->
<!-- <transport name="http" pivot="java:org.apache.axis.transport.http.HTTPSender" /> -->
<transport name="http" pivot="java:org.apache.axis.transport.http.CommonsHTTPSender" />
.....
.....
</deployment>
我从here获得了上述内容。
答案 1 :(得分:0)
您可以使用Apache Rampart模块来实施WS Security。它插入服务级别,将处理所有WS-Security,如用户名/令牌,X.509身份验证等。
它不是微不足道的,但也不是那么困难。我们这里是为了让Axis服务器使用WSS与Oracle SOA服务器通信。