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