您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > Webservice实验报告
1JIANGSUUNIVERSITY题目:WebServices实验报告所属学院:计算机学院专业班级:软件1201姓名:孙磊学号:31206080162题目一:调用第三方webService的接口实现便民信息的查询,例如天气预报或者火车信息。一.实验要求编写客户端,调用第三方WebService提供的接口,实现对基本信息的查询。二.运行环境Windows8+Eclipse(JDK8.0)三.实验原理及过程1.新建JavaProject,项目名称为“天气查询”,新建包com.soap(放置跟webservice服务调用相关的类)和包com.ui(放置跟UI界面编程相关的类)。2.在com.soap包下新建类名为WeatherServices的Java文件。该类的作用调用中国天气网提供的免费接口,实现对城市的天气的实时查询。项目结构如图:(2)getSoapInputStream(Stringcity)。这个方法是通过调用上述免费接口获得URLConnection连接对象,并对Soap输入流进行相关的设置,包括编码格式等。(3)getWeather(Stringcity)。解析xml,获取相应的信息。由于查询后返回的原始结果是一个xml文档,因此需要对该文档进行DOM解析,从而获得我们需要的信息。3.在com.soap包下新建MobileService.java文件,用来实现对手机号码基本信息的查询。使用的接口是:中间用到的方法主要有:(1)getSoapRequest(Stringcity).这个方法的作用是得到一个Soap请求。34.在com.soap包下新建EmailService.java,实现对邮箱地址的验证。采用的接口是:);5.在com.ui包下新建类名为MainFrame的Java文件。实现客户端的可视化布局。里面设计的主要函数包括:(1)MainFrame(Stringstring)。这是一个构造方法,对窗体进行简单的初始化,以及为相应的控件添加事件监听及响应。四.运行效果45题目二自定义webservice,并将其发布,然后编写客户端,调用该webservice。一.实验要求编写客户端,调用第三方WebService提供的接口,实现对基本信息的查询。二.运行环境Windows7旗舰版+Eclipse(JDK8.0)三.实验原理及过程该实验需要自己编写相应的服务器端和客户端。而我要实现的功能是在客户端窗体输入学号,然后通过调用webservice来返回学号对应的学生的姓名。实现服务的发布的方式有很多种,例如用Axis2来实现。其实,JDK本身就提供了WebService服务发布的方法,就是jax-ws。具体实现的过程如下:1.服务器端(1)新建JavaProject,项目名称为:webServervices_student_server。在该项下新建包com.webservice.server。(2)在包中新建一个接口StudentInterface,在接口中声明一个查询的方法studentQuery(intnumber);(3)新建StudentInterface接口的实现类StudentInterfaceImp,在类中实现StudentInterface接口中的查询方法studentQuery(intnumber)。Main方法中的Endpoint.publish(())方法是发布服务。其中是在本地自定义的RUL,54321是服务的端口号。(4)运行该程序,会看到会打印以下提示信息,说明该服务已经启动:(5)接下来要做的就是要生成WSDL文件。在浏览器地址栏中输入?wsdl,回车,会看到以下所示界面,说明已经将服务发布成功。62.客户端(1)为了模拟远程调用,新建JavaProject,项目名称为:webServervices_student_client。在该项下新建包com.webservice.client。由于采用的是jax-ws,所以在客户端还需要用到按照上述的wsdl规格约束编译的.java文件。具体的实现如下:1)新建一个java项目wsimport,该项目可以用来专门放置其他项目的编译文件。找到该项目的src的绝对目录F:\Eclipseforjavaee\wsipport\src.2)在cmd命令窗口运行cdF:\Eclipseforjavaee\wsipport\src,进入该目录下;3)接着输入命令:wsimport–s.?wsdl。注意中间的空格,回车后,结果如:7(2)返回wsimport项目,右键刷新,会看到多出来一个包,这个包的名字和之前的服务器端的包名一致。将该包原封不动复制到该客户端的src目录下。(3)新建Client窗体类,实现客户端的编程。整个客户端的项目结构如下:8四.运行效果9实验感想第一次接触WebService这个概念,感觉还是挺陌生的。之前有听说过便民查询服务,而且也亲身用过。查阅了很多资料,才知道这些功能就是用WebService来实现的。大概了解了相关的知识和调用第三方的服务接口的流程后,才知道,一个服务的发布和调用,也是很简单的。当然在整个过程中,还遇到过多次的失败,虽然不是很难的程序,但是如果其中某一步没有按照正确的顺序来执行,会很容易出错的。以下就来说说遇到的有一些问题:1.在发布服务的时候,未能成功的生成wsdl文件。分析原因主要有URL的端口没有设置好,或者服务端的程序编写有误。当服务开启后,也就是服务端程序成功执行后,再在浏览器的地址栏里输入url+?wsdl,会成功生成。2.在解析命令窗口解析wsdl的时候,不会生成.java文件,或者生成的.java文件所在的包名和原先的服务程序的包名不一致,说明解析有误,需要重新解析。在输入命令的时候,wsimport–s.中间的空格不能少。虽然这次的实验实现的功能比较简单,但是它却涵盖了一个完整的webservice的发布和调用的全过程,有了这次的实践。那么以后再做比较复杂的服务的时候也就不用担心没有头绪了。附录:源代码(天气查询+自定义服务)1.天气查询:(1)WeatherService.javapackagecom.soap;importjava.io.InputStream;importjava.io.OutputStream;importjava.io.OutputStreamWriter;importjava.net.URL;importjava.net.URLConnection;importjavax.xml.parsers.DocumentBuilder;importjavax.xml.parsers.DocumentBuilderFactory;importorg.w3c.dom.Document;importorg.w3c.dom.Node;importorg.w3c.dom.NodeList;publicclassWeatherServices{privatestaticStringgetSoapRequest(Stringcity){10StringBuilderbuilder=newStringBuilder();builder.append(?xmlversion=\1.0\encoding=\utf-8\?+soap:Envelopexmlns:xsi=\:xsd=\:soap=\:BodygetWeatherxmlns=\:Body/soap:Envelope);returnbuilder.toString();}privatestaticInputStreamgetSoapInputStream(Stringcity)throwsException{try{Stringsoap=getSoapRequest(city);if(soap==null){returnnull;}URLurl=newURL();URLConnectionconnection=url.openConnection();connection.setUseCaches(false);connection.setDoInput(true);connection.setDoOutput(true);connection.setRequestProperty(Content-Length,Integer.toString(soap.length()));connection.setRequestProperty(Content-Type,text/xml;charset=utf-8);connection.setRequestProperty(SoapAction,);OutputStreamout=connection.getOutputStream();OutputStreamWriterwriter=newOutputStreamWriter(out,utf-8);writer.write(soap);writer.flush();writer.close();out.close();InputStreamin=connection.getInputStream();returnin;}catch(Exceptione){e.printStackTrace();returnnull;}}publicstaticStringgetWeather(Stringcity){try{DocumentBuilderFactoryfactory=DocumentBuilderFactory.newInstance();factory.setNamespaceAware(true);DocumentBuilderbuilder=factory.newDocumentBuilder();11InputStreamis=getSoapInputStream(city);Documentdoc=builder.parse(is);//因为webservices调用后返回的xml的每个元素都是stringNodeListlist=doc.getElementsByTagName(string);StringBufferbuffer=newStringBuffer();for(inti=0;ilist.getLength();i++){Nodenode=list.item(i);if(node.getLas
本文标题:Webservice实验报告
链接地址:https://www.777doc.com/doc-6437403 .html