java 呼叫 wsdl形式的webservice 示例
阿新 • • 發佈:2019-01-26
原文連結:https://my.oschina.net/erichsbc/blog/148913
1.下載AXIS2類庫,AXIS2是目前java呼叫webservice的一個主要方法(由於更新較頻繁,請自行google該類庫的網址)
2.由於是第三方webservice,直接引入AXIS2的包就可以用了,程式碼如下:
import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; public class webServiceTest { public String invokeRemoteFuc() { String endpoint = "http://localhost:8080/webservice/services/helloworld"; String result = "no result!"; Service service = new Service(); Call call; Object[] object = new Object[1]; object[0] = "Dear I miss you";//Object是用來儲存方法的引數 try { call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint);// 遠端呼叫路徑 call.setOperationName("say");// 呼叫的方法名 // 設定引數名: call.addParameter("str1", // 引數名 XMLType.XSD_STRING,// 引數型別:String ParameterMode.IN);// 引數模式:'IN' or 'OUT' // 設定返回值型別: call.setReturnType(XMLType.XSD_STRING);// 返回值型別:String result = (String) call.invoke(object);// 遠端呼叫 } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } return result; } public static void main(String[] args) { webServiceTest t = new webServiceTest(); String result = t.invokeRemoteFuc(); System.out.println(result); } }
該方法的原理很簡單,通過AXIS2封裝好的類設定URL和引數,直接呼叫就好了,我們要關注的就是設定URL,方法,還有方法的引數,其他的copy&paste就可以了。
附自己總結的共通方法:
import java.rmi.RemoteException; import javax.xml.rpc.ParameterMode; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; public class WebserviceClientUtils { /** * 使用webservice獲取網頁內容(引數暫時只支援String型別) * !!引數和引數名需一一對應!! * * @Title: getWebserviceContent * @Description: TODO * @param endpoint * 遠端呼叫路徑 * @param method * 呼叫的方法名 * @param params * 引數 * @param paramsName * 引數名 * @return 正常情況返回JSON型別字串,異常情況返回"error" */ public static String getWebserviceContent(String endpoint, String method, Object[] params, String[] paramsName) { String result = "error"; // 引數及引數名是否符合要求判斷 if (params == null || paramsName == null || params.length != paramsName.length) { return result; } Service service = new Service(); Call call; try { call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint);// 遠端呼叫路徑 call.setOperationName(method);// 呼叫的方法名 // 設定引數名: for (String paramName : paramsName) { // 引數名、引數型別:String、 引數模式:'IN' or 'OUT' call.addParameter(paramName, XMLType.XSD_STRING, ParameterMode.IN); } // 設定返回值型別: call.setReturnType(XMLType.XSD_STRING);// 返回值型別:String result = (String) call.invoke(params);// 遠端呼叫 } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } return result; } }