关于axis2-1.6.2中的basic authentication

axis2-1.6.2有所变化, 使用WSDL2Java选择ADB binding方式生成的代理类全都放在XXXStub内部, 作为内部类. 也许这样在java的IDE中看起来比较干净简洁吧.

但是当我调用XXXStub时, 发现提供basic用户和密码验证的代码部分
String endpoint = "http://localhost:8080/mcr.httpbasic/services/GovObjStatsService";
GovObjStatsServiceStub stub = new GovObjStatsServiceStub("endpoint");
ServiceClient client = stub._getServiceClient();
Options options = client.getOptions();
HttpTransportProperties.Authenticator 
auth = new HttpTransportProperties.Authenticator();
auth.setUsername("admin");
auth.setPassword("123456");
options.setProperty(HTTPConstants.AUTHENTICATE, auth);
...

居然没起作用, 仍然返回error 401. 于是查看生成的XXXStub类和Aixs2的源代码, 原来生成的XXXStub没有override Stub类,  ._getServiceClient() 获得的ServiceClient和XXXStub里面create的ServiceClient不是同一个. 所以即使传入autherticator也不好使.

解决方法如下, 我们可以在XXXStub中修改一下, 在它createClient的方法中多传入一个参数, 既把authenticator传进去就可以了, 修改如下, 黑色字体为修改部分.

public  com.tibco.governance.mcr.stats.api.GovObjStatsServiceStub.GetGovernedObjectStatsByFiltersResponse getGovernedObjectStatsByFilters(
com.tibco.governance.mcr.stats.api.GovObjStatsServiceStub.GetGovernedObjectStatsByFilters getGovernedObjectStatsByFilters0,
HttpTransportProperties.Authenticator auth) throws java.rmi.RemoteException, com.tibco.governance.mcr.stats.api.AdminExceptionException{

        org.apache.axis2.context.MessageContext _messageContext = null;
        try{
               org.apache.axis2.client.OperationClient _operationClient = _serviceClient.createClient(_operations[0].getName());
              _operationClient.getOptions().setAction("urn:getGovernedObjectStatsByFilters");
              _operationClient.getOptions().setExceptionToBeThrownOnSOAPFault(true);

_operationClient.getOptions().setProperty(HTTPConstants.AUTHENTICATE, auth);
...
...

调用XXXStub的代码如下

String endpoint = "http://localhost:8080/mcr.httpbasic/services/GovObjStatsService";
GovObjStatsServiceStub stub = new GovObjStatsServiceStub("endpoint");
HttpTransportProperties.Authenticator
auth = new HttpTransportProperties.Authenticator();
auth.setUsername("admin");
auth.setPassword("123456");

GetGovernedObjectStatsByFilters request = new GetGovernedObjectStatsByFilters();

... // new and set params to request

GetGovernedObjectStatsByFiltersResponse response =
stub.getGovernedObjectStatsByFilters(request , auth);

System.out.println("Count = " + response.get_return().getResultCount());

猜你喜欢

转载自mxy0521.iteye.com/blog/1583064