WebService:客户端调用service的四种方式

来源:互联网 发布:大数据并不意味着数据 编辑:程序博客网 时间:2024/06/06 17:53

l  通过wsimport生成客户端代码【封装底层,调用的时候根本都不需要知道SOAP的存在】,由于简单减少出错,所以推荐使用,查看其源码知道他其实就是在客户端编程的基础上搞了一层,底层也是使用客户端编程的方式。

l  通过客户端编程的方式调用 【需要明白一些概念如Qname、WSDL、Service等】

l  通过ajax调用js+XML【实现在网页中自动调用,属于客户端自己调用的方式,利用ajax和XML解析技术】

l  通过URLConnection调用【比较底层的方式,比较通用,当然更底层的方式是使用Socket,涉及HTTP、SOAP、XML解析】

l  不管是哪种方式,最终都是构建HTTP+SOAP协议,只是对调用者表现为不一样。

客户端编程的方式

URL wsdlUrl = newURL("http://192.168.1.100:6789/hello?wsdl");//WSDL文档地址

                   Service s =Service.create(wsdlUrl, new

//Service的构造方法阿是protected,使用静态工厂方法创建

QName("http://ws.itcast.cn/","HelloServiceService"));

//WSDL来,因为WSDL中有很多Service,需要你指定一个

                   HelloServicehs = s.getPort(newQName("http://ws.itcast.cn/","HelloServicePort"),HelloService.class);//HelloService来源于wsimport

                   String ret =hs.sayHello("zhangsan");

                   System.out.println(ret);

 

js+XML

SOAP的具体协议内容可由MyEclipse的Webservice Explorer知道


<html>

         <head>

                   <title>通过ajax调用WebService服务</title>

                   <script>

                           

                            varxhr = new ActiveXObject("Microsoft.XMLHTTP");

                            functionsendMsg(){

                                     varname = document.getElementById('name').value;

                                     //服务的地址

                                     varwsUrl = 'http://192.168.1.100:6789/hello';

                                    

                                     //请求体

                                     varsoap = '<soapenv:Envelopexmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:q0="http://ws.itcast.cn/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">' +

                                                                                     ' <soapenv:Body><q0:sayHello><arg0>'+name+'</arg0>  </q0:sayHello> </soapenv:Body></soapenv:Envelope>';

                                                                                     

                                     //打开连接

                                     xhr.open('POST',wsUrl,true);

                                    

                                     //重新设置请求头

                                     xhr.setRequestHeader("Content-Type","text/xml;charset=UTF-8");

                                    

                                     //设置回调函数

                                     xhr.onreadystatechange= _back;

                                    

                                     //发送请求

                                     xhr.send(soap);

                            }

                           

                            function_back(){

                                     if(xhr.readyState== 4){

                                               if(xhr.status== 200){

                                                                 //alert('调用Webservice成功了');

                                                                 varret = xhr.responseXML;

                                                                 varmsg = ret.getElementsByTagName('return')[0];

                                                                 document.getElementById('showInfo').innerHTML= msg.text;

                                                                 //alert(msg.text);

                                                        }

                                     }

                            }

                  </script>

         </head>

         <body>

                            <inputtype="button" value="发送SOAP请求"onclick="sendMsg();">

                            <inputtype="text" id="name">

                            <divid="showInfo">

                            </div>

         </body>

</html>

 

URLConnection

URL url = newURL("http://webservice.webxml.com.cn/WebServices/MobileCodeWS.asmx");         

HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("POST");

conn.setDoInput(true);

conn.setDoOutput(true);

conn.setRequestProperty("Content-Type","text/xml;charset=UTF-8");

OutputStream out = conn.getOutputStream();

String soap = "<soap:Envelopexmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\"xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">"

+ "<soap:Body><getMobileCodeInfo xmlns=\"http://WebXml.com.cn/\"><mobileCode>13436823445</mobileCode><userID></userID>"

+"</getMobileCodeInfo></soap:Body></soap:Envelope>";

out.write(soap.getBytes());

int code = conn.getResponseCode();

if (code == 200) {

InputStream is = conn.getInputStream();

byte[] b = new byte[1024];

int len = 0;

StringBuffer sb = new StringBuffer();

while ((len = is.read(b)) != -1) {

String s = new String(b, 0, len, "UTF-8");

sb.append(s);

}

System.out.println(sb);//输出的是XML,你需要解析XML中的数据得到你想要的数据

}

conn.disconnect();

 


0 0