1. 程式人生 > >java呼叫第三方webservice(需要登入驗證)

java呼叫第三方webservice(需要登入驗證)

最近研究了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