但是当我调用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());