js请求Java WebService出现问题的解决

本文档介绍了在使用JS调用SOAP1.1版本的WebService时遇到Expected elements错误的解决过程。通过开启和设置Eclipse的TCP/IP Monitor,分析请求数据,并使用Java代码验证,最终定位到SOAP数据拼接错误的问题。通过调整请求体内容,成功解决了调用错误。

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

根据网上的方法使用js调用WebService,但是出现Expected elements are <{}arg1>,<{}arg0>,<{}arg2>错误,在网上搜了解决办法,好多都是说WebService后台配置没有明确表示参数名,在后台使用注解方式标识参数名后即可。但是我修改了以后还是不行。
解决思路:
参数名只是显示出来让程序员看懂的,所以应该不会因为这个导致出错。所有代码都不存在问题,唯一可能生问题的是发送的SOAP数据拼接错误。确定了问题所在,结合自己以前用过eclipse的TCP/IP monitor,进行解决问题的探索过程。

一、开启TCP/IP Monitor

这里写图片描述

这里写图片描述

二、设置TCP/IP Monitor

这里写图片描述

这里写图片描述

这里写图片描述

这里写图片描述

三、使用Java代码访问WebService

这里需要注意的是,访问的端口号,要替换成TCP/IP Monitor监听的端口(这里我设置的是2222)
查看监听到的请求体
这里写图片描述
复制里面的内容到js中进行请求数据的拼接

四、编写页面进行WebService的访问

文件名:webServiceTest.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>测试JS访问WebService</title>
</head>
<body>
<button onclick="reqWs()">发送请求</button>
<div id="content"></div>
<script type="text/javascript">
function reqWs() {
    //这是我们在第一步中创建的Web服务的地址
    //注意,我使用的还是TCP/IP Monitor监听的端口,可以关了TCP/IP Monitor,使用真实的WebService端口
    var URL = "http://192.168.2.163:2222/s/ws/hsttService";
    var arg0 = "";
    var arg1 = "10390";
    var arg2 = "";
    //进行xml数据的拼接
    //==================================这里是复制TCP/IP Monitor监听到的请求内容==============================
    var req = '<?xml version= "1.0" encoding= "UTF-8" ?>'
      + '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"'
      + ' xmlns:xsd="http://www.w3.org/2001/XMLSchema"'
      + ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >'
      + '<soapenv:Body >'
      + '<action xmlns="http://impl.cxf.hstt.com/" >'
      + '<arg0 xmlns="" >'+arg0+'</arg0>'
      + '<arg1 xmlns="" >'+arg1+'</arg1>'
      + '<arg2 xmlns="" >'+arg2+'</arg2>'
      + '</action>'
      + '</soapenv:Body>'
      +'</soapenv:Envelope>';
    //================================================================================================
    //创建异步对象,为了简单,我没有进行浏览器的兼容
    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", URL, true);
    //设置数据类型
    xmlhttp.setRequestHeader("content-type","text/xml;charset=utf-8");
    //设置回调函数
    xmlhttp.onreadystatechange=function(){
        //判断是否发送成功和判断服务端是否响应成功
        if(4 == xmlhttp.readyState && 200 == xmlhttp.status){
            var content = document.getElementById("content");
            var text = document.createTextNode(xmlhttp.responseText);
            content.appendChild(text);
        }
    }
    xmlhttp.send(req);
}        
</script>
</body>
</html>

五、进行访问测试

这里写图片描述

注意:LZ使用的是SOAP1.1版本,如果是SOAP1.2版本(TCP/IP Monitor不支持1.2版本),可能在以后的博文中会写出来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值