前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。
通過IDE自動生成的代碼調用webservice服務
?
我們的IDE一般來說都是能夠通過各種各樣的工具來支持我們的開發使我們的開發變得更加的便捷。對于webservice來說自然也是如此,所以我們可以輕松的調用webservice插件來進行客戶端代碼的生成。在這里我們直接new就可以了
?
把我們本地的WSDL的地址輸入進去
?
?
?
直接finish,自動生成了一堆的類和對象
?
?
?
然后我們直接根據以下的方法就可以測試我們的webservice接口的情況了
?
[java]?view plain?copy
- package?localhost.webserviceTest.test;??
- ??
- import?org.apache.axis.AxisFault;??
- ??
- import?localhost.webserviceTest.services.webServiceTest.HellowWorldProxy;??
- import?localhost.webserviceTest.services.webServiceTest.WebServiceTestSoapBindingStub;??
- ??
- public?class?webClientTest?{??
- ??
- ??????
- ????public?static?void?main(String[]?args?){??
- ????????try?{??
- ????????????HellowWorldProxy?pHellowWorldProxy=?new?HellowWorldProxy();??
- ????????????System.out.print(pHellowWorldProxy.test("?zhengfang.sun"));??
- ??????????
- ????????}?catch?(Exception?e)?{??
- ????????????//?TODO?Auto-generated?catch?block??
- ????????????e.printStackTrace();??
- ????????}??
- ??????????
- ????}??
- }??
?
結果如下圖所示
?
?
?
org.apache.axis.client.Call調用
Webservice接口我們自然可以通過IDE提供的功能進行生成,但是有時候也是會出現意外的,提供webservice的系統或者是服務方所在的網絡環境和調用端的不連通,沒有辦法通過IDE進行生成,這個時候掌握其本質的調用方法就變得尤為重要
這種方法適用于在能夠看到WSDL或者是能夠知曉服務方提供的服務信息的前提下就可以使用。其核心是通過org.apache.axis.client.Call這個類進行webservice的調用。
[java]?view plain?copy
- package?localhost.webserviceTest.test;????
- ????
- import?java.net.MalformedURLException;????
- import?java.rmi.RemoteException;????
- ???
- import?javax.xml.namespace.QName;????
- import?javax.xml.rpc.ServiceException;??
- ??
- import?org.apache.axis.client.Call;????
- import?org.apache.axis.client.Service;????
- ???
- public?class?ClientTest?{????
- ????
- ????public?static?void?main(String[]?args)?throws?MalformedURLException,?RemoteException?{????
- ????????????
- ????????Service?service?=?new?Service();????
- ????????try?{????
- ???????????????
- ???????????Call?call?=?(Call)?service.createCall();????
- ????????????//設置地址??注意這里的地址是附帶WSDL的??
- ????call.setTargetEndpointAddress(new?java.net.URL("http://localhost:8080/webserviceTest/services/webServiceTest?wsdl"));????
- ??????????//設置要執行的方法??????????????????????????????????????命名空間????????????????????????方法名??
- ????call.setOperationName(new?QName("http://localhost:8080/webserviceTest/services/webServiceTest","test"));???
- ???????????//設置要傳入參數,如果沒有要傳入的參數,則不要寫這個???
- ???????????//如果我們只有單個參數的話這個參數的名稱其實可以隨意選取???
- ????call.addParameter("testStr",?org.apache.axis.Constants.XSD_STRING,javax.xml.rpc.ParameterMode.IN);????
- ????????????//設置返回的類型????
- ????call.setReturnType(org.apache.axis.Constants.XSD_STRING);????
- ????????????????
- ???????????String?name?=?"zhengfang.sun1";???
- ???????????//執行,調用webservice????
- ???????????String?result?=?(String)?call.invoke(new?Object[]{name});????
- ???????????System.out.println(result);?????????????????
- ????????}?catch?(ServiceException?e)?{????
- ???????????e.printStackTrace();????
- ????????}????
- ????}????
- ????
- }????
方法的執行結果
?