java webservice客户端请求

本文介绍了一种常见的WebService客户端请求错误——未正确指定命名空间所导致的问题,并提供了一个具体的解决方案,通过示例代码展示了如何在Java环境中正确配置WebService客户端。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值