根据网上的方法使用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>