我有点明白我正在使用Apache Axis 1.4来查询Web服务。
我得到了一个WSDL文件,该文件生成了一个扩展org.apache.axis.client.Service
的XXXXImplServiceLocator
类,并实现了扩展javax.xml.rpc.Service
的生成接口。
我的"业务代码"在一个新的XXXXImplServiceLocator
实例上调用getXXXXImplPort(URL)
方法,然后调用:
((Stub) port).setTimeout(timeout);
((Stub) port).setUsername(username);
((Stub) port).setPassword(password);
Stub
是org.apache.axis.client.Stub
.
设置这些参数后,我只需调用一些getYYY()
方法,该方法表示对远程服务公开的服务之一的查询,并返回一个包含结果的"域"对象。
问题是我必须对此服务使用抢占式身份验证。我尝试通过 soapUI 进行查询,除非我设置抢占式身份验证模式,否则不会有任何结果。
我尝试在谷歌上搜索如何设置该模式,但一无所获。他们所说的只是使用 Apache HttpClient 的先发制人身份验证,它可以很好地"嵌入"或被安讯士使用,但我真的不知道如何混合使用。
我唯一与此ServiceLocator
交互的代码是初始设置,然后只是查询。
如何设置抢占式身份验证模式?我错过了什么吗?我不明白什么,所以我无法解决这个问题?
闻起来像一个非常微不足道的问题,但也许我不太了解这一事实阻止了我解决问题。
提前谢谢,是的:)
要强制 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 作为传输,您可以通过在安讯士客户端配置文件中设置以下内容来实现,在我的例子中是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>
我从这里得到了以上内容。
您可以使用 Apache Rampart 模块来实现 WS 安全性。 它在服务级别插入,并将处理WS-Security的所有事情,如用户名/令牌,X.509身份验证等。
这不是微不足道的,但也不是那么困难。 我们在这里这样做是为了让安讯士服务器使用 WSS 与 Oracle SOA 服务器进行通信。