axis1.4的学习总结
一.前言:相信大家对webservice有一定的了解我在这里就不再复述webservice的一些基本概念。axis1.3是soap1.2协议的一个实现框架。在工作中我们可以方便的通过axis进行webservice的开发。 二.准备工作:1.?开发环境我使用axis1.4做为Web?Service引擎,它是Apache的一个开源web?service引擎。它目前最为成熟的开源web?service引擎之一。下面我主要介绍一下如何使用Axis搭建web?service?服务的环境。? ①安装tomcat5.0应用服务器;? ②解压axis包(附件有),将包中axis目录复制到tomcat目录下的webapps目录下; ? ③将axis/WEB-INF/lib目录下类文件复制到tomcat目录下的common/lib目录下;? ④重新启动tomcat,访问http://localhost:8080/axis/happyaxis.jsp,如果能访问,表示安装成功;? 注意,axis有几个可选的包,如email.jar,你可以找来放到tomcat目录下的common/lib目录下,如果不使用相关的功能也可以不用(包也已经包含在附件中)。? 这样,开发环境就搭建好了。? 2.?开发方式:Axis提供两种开发方式:即时发布(Instant?Deployment)、定制发布(Custom?Deployment); 即时发布提供了一种非常简单的Web?Service?发布方式,但是限制太多,不适合项目的整合,所以,在此我们选用定制发布方式。?虽然配置复杂,但是很适合我们开发。 三.axis1.4定制发布WSDD例子:1.?编写WSDD文件(也就是java类):???Java代码如下: ??package?cn.qtone.zsywyj.webservice; ??public?class?WebservcieDemo?{ ??private?int?requestCount?=?0; ??public?String?helloWorld(String?name){ requestCount?++; System.out.println("requestCount="?+?requestCount); System.out.println("Received?:"?+?name); return?"Hello:"?+?name; } ??} 代码说明:这里定制一个WebservcieDemo类,里面有个helloWorld的方法,即我们为别人提供服务的方法,它接受一个参数,并返回一个字符串; 2.?编译好放入WEB-INFclass(axis文件夹下):??将上述的java类进行编译,生成一个包含路径:cn/qtone/zsywyj/webseervice的WebwervcieDem.classs;将上述目录并文件添加到web-infclasses路径下面; 3.?编写deploy.wsdd(文件放置web-inf目录下):<?xml?version="1.0"?encoding="UTF-8"?>?? <deployment??xmlns="http://xml.apache.org/axis/wsdd/"? ????xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">?? <service?name="WebservcieDemo"?provider="java:RPC">?? <parameter?name="className"?? value="cn.qtone.zsywyj.webservice.WebservcieDemo"/>?? ????<parameter?name="allowedMethods"?value="*"/>?? ?</service>?? </deployment>?? 代码说明:<service>节点下的?name指名了对外提供服的方法名称,provider指的是服务的类型。共有四种:RPC、Document、Wrapped以及Message;我们这里就是指RPC。 <parameter>节点下第一个明显就是指出具体调用的类,第二个是指允许调用的方法。这里的*号是指所有的public方法都可以被访问; 4.?生成配置文件并发布:???在windows控制台处,进入%TOMCAT_HOME%webappsaxisWEB-INF的文件目录下; 然后输入java?-Djava.ext.dirs=lib? ?????org.apache.axis.client.AdminClient? -lhttp://localhost:8080/axis/servlet/AxisServlet?deploy.wsdd?? 如果制台返回: ? ??Processing?file?deploy.wsdd ??????????????<Admin>Done?processing</Admin> 则表明已经发布成功!此时,在同级目录即web-inf下会生成一个server-config.wsdd文件,这个就是我们所有向外提供服务的上下文。 注意:Tomcat服务器部署生成的server-config.wsdd文件在%tomcat_home%webappsaxi sWEB-INF目录下;(其实它是根据-lhttp://localhost:8080/axis/servlet/AxisServlet这里来找到保存地址的,如果我们要整合到项目中我们可以改成类似于: -lhttp://localhost:8080/wd/servlet/AxisServlet,然后server-config.wsdd 会保存在%tomcat_home%webappswdWEB-INF目录,这也是tomcat服务要打开才能执行deplyo.wsdd的原因之一吧) 通过http://localhost:8080/axis/servlet/AxisServlet可以查看我们所有定制的服务,也可以通过http://localhost:8080/services/WebservcieDemo?wsdl查看我们刚才才布的服务的wsdl文件。 5.?客户端访问:Java代码如下: package?cn.qtone.zsywyj.test; import?java.net.URL; import?java.util.*; import?javax.xml.namespace.QName; import?org.apache.axis.client.*; /** ?*?axis1.x客户端调用测试 ?*?@author?keyingbo ?* ?*/ public?class?MyServiceExe?{ ?/** ?????*?使用axis的WSDL2JAVA调用WS服务? ?????*?..SoapBindingStub类的createCall()方法, ?????*/ public?String?getMessage(String?youName){ ????String?result?=?""; try?{ ?//??指定调用WebService的URL String? endpoint?=?"http://127.0.0.1:8080/services/WebservcieDemo"; ?//???调用WebService???????? Service?service?=?new?Service(); Call?call?=?(Call)?service.createCall(); call.setTargetEndpointAddress(new?java.net.URL(endpoint)); ?//??指定要调用的helloWorld方法 call.setOperationName("helloWorld"); ??? //?填写你要调用的方法名称 ???result?=?(String)?call.invoke(new?Object[]?{youName}); ? }?catch?(Exception?e)?{} return?result; public?static?void?main(String?args[]){ System.out.println("-----------------"); System.out.println(new?MyServiceExe().getMessage("柯颖波")); } 调试运行可以得到结果: ----------------- Hello:柯颖波 这里需要加入相应的包,在附件上也有。 四.axis1.4整合到项目中:上述所讲的例子基本上是将web?service独立出的一个项目,即axis是在tomcat下的一个web项目,与其他项目是无关的,所以,如果我们需要操作数据库的时候,我们需要在axis的WEB-INF目录?的lib目录下需要引入我们所需要的包,操作我们自定义的类也一样。所以,非常不方便。特别是当我们web?service项目比较复杂,即需要引入很多额外的包的时候,就会造成许多包的冗余(因为在其他项目中可能已经存在了)。所以,我们可以将axis整合到我们的具体项目中: 所谓整合,也就是说在我们的项目中,将axis需要的包引进来,在项目的web.xml中将axisWEB-INF下的web.xml里面的内容整合在一起,编写相应的服务WSDD文件并按照上面的方法进行发布,并把相应生成的server-config.wsdd放置项目的WEB-INF文件夹。 以上面的例子来说明所需步骤: 1.将需要的包复制到项目的WEB-INF下的lib下; 2.在项目的web.xml文件的web-app节点添加axis的web.xml的web-app节点??下的内容。 3.编写java类WebservcieDemo并编译; 4.根据第1步的类,编写deploy.wsdd; 5.生成配置文件:server-config.wsdd?,将其复制到项目的WEB-INF文件夹下; 五.附加的包:http://download.csdn.net/detail/keyingbo2008/4284469 ? 六.常见问题:1.axis环境配置好了,但是发布deploy.wsdd的时候出现很多莫名的异常? 答:tomcat5.0没有启动,发布deploy.wsdd需要启动tomcat。 2.没有引入相应的包导致异常。 3.如果需要发布多个webService怎么办? 答:我们可以在deploy.wsdd文件下添加<service>(内容)</service>类似的配置信息;其实我们执行deploy.wsdd文件时,系统是根据给出的路径去寻找config-server.xml文件,如果不存在则创建,然后在相应位置添加我们的service配置信息,其实如果这个服务是已经存在的,它会进行一个信息的替换,如果不存在才是新增。(这里可以做一下比较例子来观察不同之处) 4.既然有webservice发布,那肯定有发布取消,怎么取消某个webService呢? 答:比如我要取消webServcieDemo这个服务,那么,我们编写undeploy文件,如下: <undeployment??xmlns="http://xml.apache.org/axis/wsdd/"?>?? <service?name="WebservcieDemo"??/>??? ?</service>?? </undeployment>? 像执行deploy.wsdd文件一样执行该文件,就会取消该服务,其实它的原理就是:根据给出的服务路径找出配置文件config-server.xml,然后将里面包含webServcieDemo这个服务配置的信息去掉。其实,我们可以在一个undeploy.wsdd文件取消多个服务。 5.Exception?in?Thread?"main"?? java.lang.NoClassDefFoundError:?org/w3c/dom/ranges/DocumentRange: 答:少了一个包:xerces.jar (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |