java webservice客戶端請求

在做webservice客戶端請求的時候未將命名空間的值寫進去,一直報 Message part XXX was not recognized.  (Does it exist in service WSDL?);查詢了很多資料,一直未明確說明爲什麼,運用過很多webservice客戶端請求的例子,結果都是跑不通,最後不斷嘗試,總算是找到原因了。

 

<%@ page import="org.json.JSONObject" %>
<%@ page import="org.apache.commons.lang.StringUtils" %>
<%@ page import="org.apache.axis.client.Service" %>
<%@ page import="org.apache.axis.client.Call" %>
<%@ page import="java.util.Map" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%
    try{
        String isSubmit = request.getParameter("isSubmit");
        if("true".equals(isSubmit)){

            String userId = request.getParameter("userId");
            if(StringUtils.isBlank(userId)){
                out.print("用戶Id必填");
                return;
            }

            String url = request.getParameter("url");
            if(StringUtils.isBlank(url)){
                out.print("請求服務url必填");
                return;
            }

            JSONObject jUser = getUserInfo(userId,url);//調用處理方法
            out.print("獲取結果:"+jUser.toString());//只簡單的打印結果出來
        }
    }catch (Exception e){
        e.getMessage();
    }
%>
<%!
    public static JSONObject getUserInfo(String userId,String webServiceUrl){
        JSONObject jResult = new JSONObject();
        try{
            Service service = new Service();
            Call call = (Call) service.createCall();
            call.setTargetEndpointAddress(new java.net.URL(webServiceUrl));//webServiceUrl是請求服務端的鏈接
            //call.setSOAPActionURI("urn:wcfEC/getUserInfoByUserId");
            call.setOperationName(new javax.xml.namespace.QName("http://ws.api.member.com/", "getUserInfoByUserId"));//WSDL裏面描述的接口名稱。"http://ws.api.member.com/"是命名空間;"getUserInfoByUserId"是接口方法
            call.addParameter("userId", org.apache.axis.encoding.XMLType.XSD_DATE,
                    javax.xml.rpc.ParameterMode.IN);//接口的參數
            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);//設置返回類型
            String strRet = (String) call.invoke(new Object[]{userId});//這裏將userId作爲參數值傳遞過去,返回來的是一個字符串。(多個參數時用英文","隔開傳遞)
            Map resultMap = call.getOutputParams();
            //jResult.put("message",resultMap.get(new javax.xml.namespace.QName("http://ws.api.member.com/", "message")));
            jResult.put("result",strRet);//根據返回來的值可以自己組織數據格式
            jResult.put("resultMap", resultMap);
        }catch (Exception e){
            e.getMessage();
        }
        return jResult;
    }
%>
<html>
<head>
    <title></title>
</head>
<body>
    <form action="testWebService.jsp" method="post">
        <input type="hidden" name="isSubmit" value="true">
        請求的鏈接(如:http://IP地址:端口/ws/userManagement?wsdl):<input type="text" name="url" value=""><br/>
        需要傳遞的參數(webService服務端提供的接口中參數):<input type="text" name="userId" value=""><br/>
        <input type="submit" value="提交"><br/>
    </form>
</body>
</html>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章