java呼叫第三方webservice(需要登入驗證)
阿新 • • 發佈:2019-02-17
最近研究了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