JAVA客戶端呼叫遠端WebService服務示例
阿新 • • 發佈:2019-01-31
/** * 呼叫WebService服務測試 */ public class ParseJsonDataTest { private static final String CAPE_WSDL_ADDRESS = "http://XXXX/XXXX?wsdl"; private static final String CAPE_WEBSERVICE_ADDRESS = "http://XXXX/XXXX"; private static Object[] result = null; public static void main(String[] args) throws Exception { JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); Client client = clientFactory.createClient(CAPE_WSDL_ADDRESS); HTTPConduit httpConduit = (HTTPConduit) client.getConduit(); httpConduit.getTarget().getAddress().setValue(CAPE_WEBSERVICE_ADDRESS);//防止連線超時 Object[] parameters = new Object[2]; parameters[0] = "2018-06-01 12:00:00"; parameters[1] = "2018-06-02 12:00:00"; System.out.println("-----------------呼叫服務----------------------------------------"); result = client.invoke("test1", parameters);//第一個引數為服務方法名 String resultJson = result[0].toString().replaceAll("\n", "");//GSon解析可以忽略換行符 System.out.println(resultJson); System.out.println("-----------------解析Json----------------------------------------"); JsonParser parse = new JsonParser(); JsonArray json = (JsonArray) parse.parse(resultJson); for (int i = 0; i < json.size(); i++) { JsonObject jsonObject = json.get(i).getAsJsonObject(); System.out.println(jsonObject.get("id").getAsInt()); System.out.println(jsonObject.get("code").getAsString()); System.out.println(jsonObject.get("bxid").getAsString()); System.out.println(jsonObject.get("bx").getAsString()); System.out.println(jsonObject.get("date").getAsString()); System.out.println(); } System.out.println("-------------------------解析到集合物件--------------------------------------"); List<TestFault> faults = parseJsonArrayWithGson(resultJson, TestFault.class); System.out.println(faults); faults.forEach(f->System.out.println(f.getId())); faults.forEach(f->System.out.println(f.getCode())); faults.forEach(f->System.out.println(f.getBxid())); faults.forEach(f->System.out.println(f.getBx())); faults.forEach(f->System.out.println(f.getDate())); System.out.println("-------------------------JSON陣列-----------------------"); if (CollectionUtils.isNotEmpty(faults)) { //呼叫服務介面 並傳遞引數 result = client.invoke("test2", new Gson().toJson(faults)); System.out.println(new Gson().toJson(faults)); List<ResultModel> models = parseJsonArrayWithGson(result[0].toString(),ResultModel.class); if (CollectionUtils.isNotEmpty(models)) { } } } /** * JSON物件反序列化 * @param json * @param type * @return */ public static <T> T parseJsonToModel(String json,Class<T> type) { Gson gson = new Gson(); return gson.fromJson(json, type); } /** * JSON陣列反序列化 * @param json * @param type * @return */ public static <T> List<T> parseJsonArrayWithGson(String json,Class<T> type){ Gson gson = new Gson(); ArrayList<JsonObject> arrayList = gson.fromJson(json, new TypeToken<ArrayList<JsonObject>>(){}.getType()); List<T> list = Lists.newArrayList(); arrayList.forEach(a -> list.add(gson.fromJson(a, type))); return (ArrayList<T>) list; } } /** * 測試model */ class TestFault { private Integer id; private String code; private String bxid; private String bx; private String date; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getBxid() { return bxid; } public void setBxid(String bxid) { this.bxid = bxid; } public String getBx() { return bx; } public void setBx(String bx) { this.bx = bx; } public String getDate() { return date; } public void setDate(String date) { this.date = date; } @Override public String toString() { return "TestFault [id=" + id + ", code=" + code + ", bxid=" + bxid + ", bx=" + bx + ", date=" + date + "]"; } } /** * 呼叫介面的返回資料 */ class ResultModel { private String code; private String result; public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getResult() { return result; } public void setResult(String result) { this.result = result; } @Override public String toString() { return "ResultModel [code=" + code + ", result=" + result + "]"; } }