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;
    }
%>


    


    
请求的链接(如:http://IP地址:端口/ws/userManagement?wsdl):
需要传递的参数(webService服务端提供的接口中参数):


你可能感兴趣的:(webservice)