Java,Axis方式呼叫WebService介面
阿新 • • 發佈:2018-12-21
package com.demo.modules.si.util; import org.apache.axis.client.Call; import javax.xml.rpc.ParameterMode; import org.apache.axis.client.Service; import org.apache.axis.encoding.XMLType; import com.demo.modules.si.config.Config; /** * WebService介面呼叫工具類 * 使用AXIS的方式呼叫WebService,區別於.wsdl檔案生成客戶端程式碼的方式 * @author 郭旭 * */ public class WebService { /** * 呼叫WebService介面,AXIS方式直接引用遠端的.wsdl檔案 * 介面地址:http://ip:port/ormrpc/services/WSKDServiceFacade?wsdl * @param method 方法名(該方法無引數) * @return 介面返回值 * */ public static String invoke(String method) throws Exception{ String result = null; String address = Config.URL + Config.WSDL_SP; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(address); call.setOperationName(method); // 方法名稱 call.setReturnType(XMLType.XSD_STRING); // 設定返回型別 result = (String) call.invoke(new Object[]{}); return result; } /** * 呼叫WebService介面,AXIS方式直接引用遠端的.wsdl檔案 * 呼叫介面時,傳入方法名,欄位與欄位值順序需要嚴格按照介面定義 * 介面地址:http://ip:port/ormrpc/services/WSKDServiceFacade?wsdl * @param method 方法名 * @param keys 欄位(方法引數) * @param values 欄位值(引數對應值) * @return 介面返回值 * */ public static String invoke(String method, Object[] keys, Object[] values) throws Exception{ String result = null; String address = Config.URL + Config.WSDL_SP; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(address); call.setOperationName(method); // 方法名稱 call.setReturnType(XMLType.XSD_STRING); // 設定返回型別 params(call, keys, values); result = (String) call.invoke(values); return result; } /** * 呼叫WebService介面之前,方法引數及引數賦值 * 當前介面中引數型別僅限於字串、整數、布林,引數為空的情況為字串型別 * @param call 介面訪問請求 * @param keys 欄位(方法引數) * @param values 欄位值(引數對應值) * */ private static void params(Call call, Object[] keys, Object[] values) { if(keys == null || values == null) return; if(keys.length == 0 || values.length == 0) return; if(keys.length != values.length){ throw new IllegalArgumentException("介面方法引數與引數值不匹配!"); } for(int i = 0; i < values.length; i++){ String key = (String) keys[i]; //方法引數 Object value = values[i]; //引數值 if(value == null){ call.addParameter(key, XMLType.XSD_STRING, ParameterMode.IN); } else if(value instanceof String){ call.addParameter(key, XMLType.XSD_STRING, ParameterMode.IN); } else if(value instanceof Integer){ call.addParameter(key, XMLType.XSD_INTEGER, ParameterMode.IN); } else if(value instanceof Boolean){ call.addParameter(key, XMLType.XSD_BOOLEAN, ParameterMode.IN); } } } }