1. 程式人生 > >JAVA客戶端呼叫遠端WebService服務示例

JAVA客戶端呼叫遠端WebService服務示例

/**
 * 呼叫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 + "]";
    }

}