[计算机软件及应用]MyEclipse下开发Web ServiceAxis.doc

上传人:音乐台 文档编号:1991608 上传时间:2019-01-28 格式:DOC 页数:35 大小:405.34KB
返回 下载 相关 举报
[计算机软件及应用]MyEclipse下开发Web ServiceAxis.doc_第1页
第1页 / 共35页
[计算机软件及应用]MyEclipse下开发Web ServiceAxis.doc_第2页
第2页 / 共35页
[计算机软件及应用]MyEclipse下开发Web ServiceAxis.doc_第3页
第3页 / 共35页
亲,该文档总共35页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《[计算机软件及应用]MyEclipse下开发Web ServiceAxis.doc》由会员分享,可在线阅读,更多相关《[计算机软件及应用]MyEclipse下开发Web ServiceAxis.doc(35页珍藏版)》请在三一文库上搜索。

1、MyEclipse下开发Web Service(Axis) 本文主要描述如何使用Apache开源项目Axis提供的API来实现Web Services。本文中的提到的例子只为了方便本文的描述而提出,有不妥之处请见谅。 本文的读者应有JAVA web 应用开发基础。应该具有看过WSDL,SOAP,XML等的基本规范。熟悉Eclipse+MyEclipse开发环境。 本文可以随意转载使用,但是要保留作者的署名。一、环境准备使用Axis来开发Web services 需要准备 web 服务器,Axis API。本文使用的Web container 是Tomcat5.5, Axis API 采用版本2

2、。1.1软件下载准备Tomcat下载地址:http:/tomcat.apache.org/download-55.cgi#5.5.20Axis标准包:http:/ftp.wayne.edu/apache/ws/axis2/1_0/axis2-std-1.0-bin.zipAxis War包:http:/ftp.wayne.edu/apache/ws/axis2/1_0/axis2.warAxis Eclipse plug-in(代码生成工具和打包工具):http:/apache.justdn.org/ws/axis2/tools/1_0/Axis2_Code_Generator.ziphttp

3、:/apache.justdn.org/ws/axis2/tools/1_0/Axis2_Service_Archiver.zipEclipse+MyEclipse:可以到官方网站下载(本文为3.25.0GA)1.2安装A.首先搭建开发环境,需要将下载到的Eclipse解压缩到一个目录。B.将下载到的Axis 的两个plug-in解压缩到Eclipse安装目录下的plug-in子目录。C.安装MyEclipse5.0GA。然后启动MyEclipse,并选择“File-New-Other”可以找到下面的这些Wizards,这些将是本文中用到的很重要的工具。 D.下面开始搭建Web Service

4、s的部署环境。将下载的 tomcat报解压缩到一个目录。完成web container的安装。 E.将axis2.war包拷贝到tomcat安装目录下的webapps 目录中。F.启动Tomcat(windows 下为TOMCA_HOME/bin中的startup.bat;Linux,unix环境为startup.sh文件),打开浏览器输入并访问:http:/ip:port/axis2来查看。(如果没有进行陪孩子文件的修改此地址应该为http:/localhost:8080/axis),如果能看到下面的页面则说明已经安装完成。二、Quick Start环境准备好后,先从一个简单的例子开始。以便

5、对使用Axis来开发Web services的大致流程有个了解。这个例子就是SayHello,请求端输入一个名字字符串,返回的将是一个问候语。例如:输入了Tom,那么返回的事Hi,Tom.How are you?2.1编写WSDLA启动MyEclipse,新建立一个WebApps(File-New-Project-Web Project),给Project Name 为SayHello,其他保持不改变。B选择File-New-Other菜单,进入后找到MyEclipse-Web Services并选择WSDL.C. 选择“src”目录作为“Enter or select the parent

6、folder”的值,“File name”值给定为SayHello.wsdl。点击“Next”进入下一步。D.将目标命名空间设置为“http:/ws.tonyzhangcn.org/SayHello/”.在生成代码的时候一般以这个命名空间为package的名字,例如:org.tonyzhangcn.ws.sayhello。这些值可以按需要设置。E点击“Finish”按钮就可以看到MyEclipse提供的WSDL 设计器的界面了。可以看到设计器为WSDL默认的添加了一个现操作。 即图中的“NewOperation”。现在将其改名为SayHello,如下图: 之后点击设计界面中的“Source”T

7、ab来查看其代码。如下:可以看到我们定义了一个SayHello的Web Services,她提供了一个SayHello的方法,她能够接受一个String(事实上是tns:SayHelloRequest对象,她对String进行了封装)类型的输入参数SayHelloRequest并返回一个String(事实上是tns:SayHelloResponse对象,她对String进行了封装)类型的SayHelloResponse结果。更多关于WSDL的信息,请参考W3C的规范文档。至此WSDL的编写已经完成。2.2从WSDL生成Java代码A.选择菜单“File-New-Other”,从对话框中选取“A

8、xis2 Wizards”下面的“Axis2 Code Generator”.点击“Next”进入下一个页面,保持“Generate java source code from WSDL file”被选中,点击“Next”进入下一步。B.点击“Browse”来选取存放在src目录下的SayHello.wsdl文件,“Next”进入下一步。设置如下:C.点击“next”进入下一个页面,设置“Output path”为本Project的src目录。点击“finish”后代在SayHello项目上按F5刷新就可以看到有代码生成好了。但是能看到一堆红“x”,这是由于没有将Axis2的jar包放入cla

9、ss path 中以及源代码的package不为org.tonyzhangcn.ws.sayhello引起的。下面解决这个问题,首先选择“SayHello”项目,并右击选择“Build path-Add External Archives.”,选择上面部署在tomcat中的axis2 web应用WEB-INF/lib目录中的所有jar包。之后右击“src.org.tonyzhangcn.ws.sayhello”项目,选择“Refactor-rename”,做如下修改,并选择OK完成。这个时候发现test.org.tonyzhangcn.ws.sayhello下面的SayHelloTest.ja

10、va仍然存在问题。点击此文件中package 关键子前面的红“x”,会提示有两个选项,我们选择下面的那个。选择public class SayHelloTest前的红“x”,选择第一项。进行完这几个改动之后,生成的代码就没有问题了。其中SayHelloRequest,SayHelloResponse是输入输出参数对象。SayHelloSkeleton是服务端对象,用来编写业务逻辑调用。SayHelloStub是客户端用来定位endpoint(就是发布的Web Services的地址)的类,客户端根据其提供的方法定位Web服务并发起调用SayHelloMessageReceiverInOut是一

11、个实现同步调用的web服务信息转换处理类。Resources目录下的services.xml文件是webservices的描述文件。SayHelloTest是一个客户端的TestCase示例,用户可以根据这个示例来编写自己的客户端调用类。2.3编写业务代码打开SayHelloSKeleton.java文件将其中的实现方法public org.tonyzhangcn.ws.sayhello.SayHelloResponse SayHello(org.tonyzhangcn.ws.sayhello.SayHelloRequest param0)/ Todo fill this with the n

12、ecessary business logicthrow new java.lang.UnsupportedOperationException();改为public org.tonyzhangcn.ws.sayhello.SayHelloResponse SayHello(org.tonyzhangcn.ws.sayhello.SayHelloRequest request)/ Todo fill this with the necessary business logictrySayHelloResponse response = new SayHelloResponse();respon

13、se.setSayHelloResponse(Hi,+request.getSayHelloRequest()+.How are you?);return response;catch(UnsupportedOperationException e)throw e;2.4打包A.选择菜单“File-New-Other”,从对话框中选取“Axis2 Wizards”下面的“Axis2 Services Archive”.点击“Next”进入下一个页面。B.选择编译好的class文件所在目录(本项目应该是WebRoot下面WEB-INF/classes),“Next”进入下一步。C.选择WSDL文

14、件所在目录,此处为src目录下的SayHello.wsdl文件。“Next”,再“Next”。选择services.xm文件,本文应该是生成再src/resources下面的services.xml文件。之后选取“Generate the services.xml automatically”,然后再点击一下使其变为非选中状态,之后点击“Back”按钮,再点击一次“Next”。(注意:这里本应该不是这么来回折腾的,但是我的机器上只有这样操作finish按钮才能生效。怀疑这是一个bug,如果读到此文的用户没有这种情况,忽略此提示)D.点击“Next”,将记入最后一个页面,此处有两个选项,一个是输

15、出目录一个是处处文件名称。我这里的输出文件名称给的是SayHello。点击“Finish”完成。2.5部署 A将打包好的文件SayHello.jar(或者可以改名为SayHello.aar),拷贝到Tomcat中已经部署的Axis2应用的WEB-INF/services目录下面。B.启动Tomcat(即点击Tomcat安装目录下的startup.bat,linux或unix下执行startup.sh)。C.打开浏览器,输入http:/ipaddress:port/axis2(一般为http:/localhost:8080/axis2),并点击其中的“services”链接 可以看到SayHel

16、lo已经被部署。点击SayHello提供的连接可以看到与之对应的WSDL。2.6调用测试A.修改SayHelloTest.java文件中的方法testSayHello的内容为:public void testSayHello() throws java.lang.ExceptionString url=http:/localhost:8080/axis2/services/SayHello;org.tonyzhangcn.ws.sayhello.SayHelloStub stub = new org.tonyzhangcn.ws.sayhello.SayHelloStub(url); / th

17、eorg.tonyzhangcn.ws.sayhello.SayHelloRequest request = (org.tonyzhangcn.ws.sayhello.SayHelloRequest) getTestObject(org.tonyzhangcn.ws.sayhello.SayHelloRequest.class);request.setSayHelloRequest(tonyzhangcn);System.out.println(stub.SayHello(request).getSayHelloResponse();/ todo Fill in the param14 her

18、eassertNotNull(stub.SayHello(request);B.从菜单中选择“RunRun as-JUnit Test”。 可以看到web 服务已经正确的返回了结果。那么,不用TestCase类可以调用WebServices吗?答案是肯定的,我们可以随便些一个带有main方法的类,并仿照SayHelloTest.java中的testSayHello()方法就可以达到调用Web Services的目的了。 在我实际操作工程中,还遇到了两个问题:一个是缺少xalan包中的jar文件,解决办法:从官网下载,添加进lib中就好了一个是在自动产生的JUnit Test类中有两个方法,都要

19、实现,解决办法:可以去掉一个方法。 本Blog纯属个人学习、工作需要,记录相关资料。请不要发表任何有人身攻击的言论,谢谢! posted on 2007-05-17 22:16 zhip 阅读(15489) 评论(42) 编辑 收藏 所属分类: Web Servers FeedBack: #re: MyEclipse下开发Web Service(Axis) 2007-06-29 09:02 | 过客2response.setSayHelloResponse(Hi,+request.getSayHelloRequest()+.How are you?); 我按你的步骤做,提示没有respons

20、e.setSayHelloResponse这个方法 The method setSayHelloResponse(String) is undefined for the type SayHelloResponse 是什么原因的? 回复更多评论#re: MyEclipse下开发Web Service(Axis) 2007-07-06 13:11 | magnate过客2now the method setSayHelloResponse has been replaced by setOut/setIn , u can check it回复更多评论#re: MyEclipse下开发Web Se

21、rvice(Axis) 未登录2007-08-09 17:27 | victor按照上面的方法走了一遍,还有两个错误,编译不过去 1.SayHelloMessageReceiverInOut类里, org.apache.axis2.engine.DependencyManager.configureBusinessLogicProvider(obj,msgContext.getOperationContext();提示configureBusinessLogicProvider方法不存在,我看DependencyManager类确实没有这个方法,难道是版本的问题? 2.SayHelloStub

22、类里生成java.lang.Object object = fromOM(getElement(_returnEnv, document),org.example.www.sayhello.SayHelloResponse.class,getEnvelopeNamespaces(_returnEnv);代码,但没有getElement()方法,getElement方法怎么写?回复更多评论#re: MyEclipse下开发Web Service(Axis) 2007-09-06 15:47 | zql晕,太假了,老是有错回复更多评论#re: MyEclipse下开发Web Service(Axi

23、s) 2007-09-13 15:00 | wangjun我也碰到类似的问题 1.SayHelloMessageReceiverInOut类里, org.apache.axis2.engine.DependencyManager.configureBusinessLogicProvider(obj,msgContext.getOperationContext();提示configureBusinessLogicProvider方法不存在,我看DependencyManager类确实没有这个方法,难道是版本的问题? 2.SayHelloStub类里生成java.lang.Object objec

24、t = fromOM(getElement(_returnEnv, document),org.example.www.sayhello.SayHelloResponse.class,getEnvelopeNamespaces(_returnEnv);代码,但没有getElement()方法,getElement方法怎么写? 不知道哦楼主是否有办法解决啊! 如果有的话是否能给我发个邮件 回复更多评论#re: MyEclipse下开发Web Service(Axis) 2007-09-18 16:04 | jjtking我也是同样的问题,不知道到底错在那里 1.SayHelloMessageRe

25、ceiverInOut类里, org.apache.axis2.engine.DependencyManager.configureBusinessLogicProvider(obj,msgContext.getOperationContext();提示configureBusinessLogicProvider方法不存在,我看DependencyManager类确实没有这个方法,难道是版本的问题? 2.SayHelloStub类里生成java.lang.Object object = fromOM(getElement(_returnEnv, document),org.example.ww

26、w.sayhello.SayHelloResponse.class,getEnvelopeNamespaces(_returnEnv);代码,但没有getElement()方法,getElement方法怎么写? 不知道哦楼主是否有办法解决啊! 如果有的话是否能给我发个邮件 回复更多评论#re: MyEclipse下开发Web Service(Axis) 2007-09-18 16:08 | 老是有问题啦我也碰到了上面两个问题,不之大如何解决啊,有没有谁能帮忙解答下啊。 我也碰到了上面两个问题,不之大如何解决啊,有没有谁能帮忙解答下啊。 我也碰到了上面两个问题,不之大如何解决啊,有没有谁能帮忙

27、解答下啊。 我也碰到了上面两个问题,不之大如何解决啊,有没有谁能帮忙解答下啊。 我也碰到了上面两个问题,不之大如何解决啊,有没有谁能帮忙解答下啊。回复更多评论#re: MyEclipse下开发Web Service(Axis) 2007-09-26 15:04 | lddongyu碰到同样的问题呀,搂主帮帮忙回复更多评论#re: MyEclipse下开发Web Service(Axis) 2007-10-19 10:56 | 可克怎么会有nullpointerException异常呢?回复更多评论#re: MyEclipse下开发Web Service(Axis) 2007-10-26 14:

28、29 | 问题1.SayHelloMessageReceiverInOut类里, org.apache.axis2.engine.DependencyManager.configureBusinessLogicProvider(obj,msgContext.getOperationContext();提示configureBusinessLogicProvider方法不存在,我看DependencyManager类确实没有这个方法,难道是版本的问题? 2.SayHelloStub类里生成java.lang.Object object = fromOM(getElement(_returnEnv

29、, document),org.example.www.sayhello.SayHelloResponse.class,getEnvelopeNamespaces(_returnEnv);代码,但没有getElement()方法,getElement方法怎么写? 回复更多评论#re: MyEclipse下开发Web Service(Axis) 2007-12-14 15:37 | 浪子SayHello.jar在哪里?我找不到 org.apache.axis2.AxisFault: The service cannot be found for the endpoint reference (E

30、PR) /axis2/services 回复更多评论#re: MyEclipse下开发Web Service(Axis) 2008-03-26 15:46 | xjlinetpgetElement错误是引用的包不对,axis2-kernel-1.0.jar这个包就对了回复更多评论#re: MyEclipse下开发Web Service(Axis) 未登录2008-04-11 13:15 | john楼主,我在打包的那一步(即最后一个是输出目录一个是输出文件名称时)点击“finish”按钮以后出现一个报错对话框“filesets”。还请楼主指教回复更多评论#re: MyEclipse下开发Web

31、 Service(Axis) 2008-04-13 00:05 | adio圆满完成!谢谢楼主 ! 大家部署的时候一定要细心! 楼主的方法绝对可行! 补充一下,output的element是SayHelloResponse生成的wdsl里总是没有找个xsd:element!本人刚学习,还不知道为什么? 谁明白答复下谢谢!回复更多评论#22008-04-29 17:11 | jiangisli怎么不出来回复一下,大家都是类似的情况! 回复更多评论#22008-04-29 17:27 | jiangsili我还多了一个SayHello.java文件 你上面是5个,我上多了一个,六个了 怎么回事回复

32、更多评论#re: MyEclipse下开发Web Service(Axis) 2008-04-30 14:54 | OverLords又一个圆满完成的,谢谢楼主 ! 部署的时候如果不注意某些细节的话铁定出错。回复更多评论#re: MyEclipse下开发Web Service(Axis) 2008-05-08 12:53 | 小瓶子太感谢了,没用问题,很多天前就想看了,可是一直没有看到合适的文章.回复更多评论#re: MyEclipse下开发Web Service(Axis) 2008-05-08 14:36 | 小瓶子很想知道有多个方法和身份验证怎么开发,期待大家的回答.回复更多评论#re:

33、 MyEclipse下开发Web Service(Axis) 2008-05-13 13:59 | waterblue我在打包的那一步(即最后一个是输出目录一个是输出文件名称时)点击“finish”按钮以后出现一个报错对话框“filesets”。还请指教回复更多评论#re: MyEclipse下开发Web Service(Axis) 2008-05-16 17:55 | tangtang搂主强烈建议把打包这一步的图片传上来,我也遇到filesets问题,不知道怎么解决。回复更多评论#re: MyEclipse下开发Web Service(Axis) 2008-05-16 17:57 | tan

34、gtang我也碰到这个问题了,你要解决了请告诉我怎么解决的qq:414139396回复更多评论#re: MyEclipse下开发Web Service(Axis) 2008-05-17 16:13 | tangtang打包的时候最后提示:filesets 问题到底是怎么回事,帮帮忙给解释下好吗?谢谢 打包的时候最后提示:filesets 问题到底是怎么回事,帮帮忙给解释下好吗?谢谢 打包的时候最后提示:filesets 问题到底是怎么回事,帮帮忙给解释下好吗?谢谢 打包的时候最后提示:filesets 问题到底是怎么回事,帮帮忙给解释下好吗?谢谢 打包的时候最后提示:filesets 问题到底

35、是怎么回事,帮帮忙给解释下好吗?谢谢 打包的时候最后提示:filesets 问题到底是怎么回事,帮帮忙给解释下好吗?谢谢回复更多评论#re: MyEclipse下开发Web Service(Axis) 2008-05-19 08:49 | tangtang“filesets”的问题解决了,现在把原因告诉碰到同样问题的朋友。我用的是tomcat6。主要原因是因为eclipse的两个插件的版本的是,我换成:1.3版本就能通过了。希望遇到同样问题的朋友可以参考一下。 回复更多评论#re: MyEclipse下开发Web Service(Axis) 2008-06-05 09:46 | xulong解

36、决了 “configureBusinessLogicProvider方法不存在”问题的兄台请把解决的方法贴出来啊,不胜感激!回复更多评论#re: MyEclipse下开发Web Service(Axis) 2008-07-07 17:13 | QOOtangtang “filesets”的问题解决了,现在把原因告诉碰到同样问题的朋友。我用的是tomcat6。主要原因是因为eclipse的两个插件的版本的是,我换成:1.3版本就能通过了。希望遇到同样问题的朋友可以参考一下。 1.3 - 是指plugins 或是 JDK? 因為我也是遇到相同的問題,回复更多评论#re: MyEclipse下开发W

37、eb Service(Axis) 2009-03-10 23:14 | ava能再问个问题吗:我用浏览器能查看ws的wsdl,但是用客户端调用时报如下错误 org.apache.axis2.AxisFault: The service cannot be found for the endpoint reference (EPR) /axis2/services 回复更多评论#re: MyEclipse下开发Web Service(Axis) 2009-04-07 15:37 | eclipError: org.apache.axis2.deployment.DeploymentExcepti

38、on: A ClassNotFoundException error occurred in loading the message receiver org.example.www.sayhello.SayHelloMessageReceiverInOut 出现这样错误,该怎么解决啊?楼主回复更多评论#re: MyEclipse下开发Web Service(Axis) 2009-04-14 22:58 | dabing1.SayHelloMessageReceiverInOut类里, org.apache.axis2.engine.DependencyManager.configureBus

39、inessLogicProvider(obj,msgContext.getOperationContext();提示configureBusinessLogicProvider方法不存在,我看DependencyManager类确实没有这个方法,难道是版本的问题? 2.SayHelloStub类里生成java.lang.Object object = fromOM(getElement(_returnEnv, document),org.example.www.sayhello.SayHelloResponse.class,getEnvelopeNamespaces(_returnEnv);代

40、码,但没有getElement()方法,getElement方法怎么写? 不知道哦楼主是否有办法解决啊! - 我开始也遇到这两个问题,后来分析了一下,是引用jar包的时候引用了axis2-1.4.1中lib下的所有jar包,所以有些方法已经过时或者已经被删除了,所以引用axis2-1.0中lib下的jar包到工程下,就不会出现上述问题了。 另外,由于博主的文章是07年的,比较早,我现在按照博主的文章去下载axis安装包时,已经找不到1.0的war文件了,只有bin标准版,所以我就下载了1.4.1的war文件,并把它部署到tomcat中,然后引用jar包时,引用的是1.0标准版中的lib文件夹下的jar包,就没啥问题了。 回复更多评论#re: MyEclipse下开发Web Service(Axis) 2009-04-14 23:16 | dabing我在打包的那一步(即最后一个是输出目录一个是输出文件名称时)点击“finish”按钮以后出现一个报错对话框“filesets”。还请指教 - 这

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1