最近研究了java调用第三方webservice的几种方法,方式很多,主要卡在登录验证上。
webservice是有iis中的.net程序提供的。在iis中设置了登录验证,浏览器输入http://192.168.100.108/InspectService/InspectService.asmx
弹出登录窗口
输入iis中设置的用户名密码,即可进入
了解到java调用webservice的几种方式,我选择了axis2,使用wsdl2java生成客户端代码,然后直接调用,很方便
InspectServiceStub.TestConnection t=new InspectServiceStub.TestConnection();
System.out.println(stub.testConnection(t).getTestConnectionResult());
调用还不行,还需要登录,在这一步的时候,查阅了很多资料,无非是使用这种方式
ServiceClient sc = stub._getServiceClient();
Options opts = sc.getOptions();
opts.setTo(new
EndpointReference("http://192.168.100.108/InspectService/InspectService.asmx"));
HttpTransportProperties.Authenticator basicAuth = new
HttpTransportProperties.Authenticator();
// AuthPolicy.registerAuthScheme(AuthPolicy.NTLM, BackportedNTLMScheme.class);
basicAuth.setUsername("username");
basicAuth.setPassword("password");
List authPrefs = new ArrayList(1);
authPrefs.add(AuthPolicy.NTLM);
basicAuth.setAuthSchemes(authPrefs);
opts.setProperty(HTTPConstants.AUTHENTICATE, basicAuth);
//调用方法TestConnection
InspectServiceStub.TestConnection t=new InspectServiceStub.TestConnection();
System.out.println(stub.testConnection(t).getTestConnectionResult());
大部分人也是这样写的。但是在自己的测试中总是通不过,放弃
关于调用不成功的,看了一些人的说法:http://codego.net/295434/
使用cxf
通过wsdl2java生成客户端代码,下面是调用
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(InspectService.class);
factory.setAddress("http://192.168.100.108/InspectService/InspectService.asmx");
factory.setUsername("username");
factory.setPassword("password");
InspectService s = (InspectService) factory.create();
System.out.println("connection result:"+s.testConnection());测试通过
参考:http://blog.sina.com.cn/s/blog_6556038f0101dkem.html