2

有点理解我正在使用 Apache Axis 1.4 来查询 Web 服务。

我得到了一个 WSDL 文件,它生成了一个XXXXImplServiceLocator类,该类扩展org.apache.axis.client.Service并实现了一个生成的扩展接口javax.xml.rpc.Service

我的“业务代码”getXXXXImplPort(URL)在新XXXXImplServiceLocator实例上调用该方法,然后调用:

((Stub) port).setTimeout(timeout);
((Stub) port).setUsername(username);
((Stub) port).setPassword(password);

Stuborg.apache.axis.client.Stub

设置这些参数后,我只需调用一些getYYY()方法,该方法表示对远程服务公开的服务之一的查询,并将结果返回给我一个“域”对象。

问题是我必须对这项服务使用抢先式身份验证。我已经尝试通过soapUI进行查询,除非我设置了抢占式身份验证模式,否则我不会有任何结果。

我试过谷歌搜索如何设置该模式,但一无所获。他们所说的只是使用 Apache HttpClient 的抢先式身份验证,它可以很好地“嵌入”或由 Axis 使用,但我真的不知道如何混合使用。

我拥有的唯一与之交互的代码ServiceLocator是初始设置,然后只是查询。

如何设置该抢先式身份验证模式?我错过了什么吗?我不明白什么以至于我无法解决这个问题?

闻起来像一个非常微不足道的问题,但也许我不太了解这一点的事实阻止了我解决这个问题。

提前谢谢,是的:)

4

2 回答 2

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>

我从这里得到了上述内容。

于 2015-05-13T00:12:26.933 回答
0

您可以使用Apache Rampart模块来实现WS Security。它在服务级别插入,将处理 WS-Security 的所有内容,如用户名/令牌、X.509 身份验证等。

它不是微不足道的,但也不是那么困难。我们在这里使用 WSS 让 Axis 服务器与 Oracle SOA 服务器通信。

于 2012-12-04T22:04:24.180 回答