在做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>