《axis_webservice教程》由会员分享,可在线阅读,更多相关《axis_webservice教程(24页珍藏版)》请在金锄头文库上搜索。
1、利用 AXIS 开发 Webservice(一) 如何发布自己的 webservice 先介绍下本人开发环境吧。 JDK 1.4.2 + Myeclipse 6.0(实在经不起诱惑,尝尝鲜) + Tomcat 5.0.28 + AXIS 1.4。 AXIS 1.4 包可以在 http:/ws.apache.org/axis/找到。 假设所有的环境你已经搭好,并且 AXIS 包也已经下好了。OK, Here we go解压 axis-bin-1_4.zip 这个包可以看到 webapps 目录,双击进入把里面的 AXIS 文件夹拷到 %TOMCAT_HOME%webapps 目录下,之后拷贝 a
2、ctivation.jar、mail.jar、tools.jar 到%TOMCAT_HOME%webappsaxisWEB-INFlib 目录下。启动 tomcat,访问http:/localhost:8080/axis/happyaxis.jsp 如果访问成功,恭喜你!基本的配置你已经做完了。 PS:此处的%TOMCAT_HOME%指的是 Tomcat 的安装目录,至于那另外的三个 jar 包,J2EE 1.4 库里就能找的到。现在来说一下最关键的 Webservice 的发布。AXIS 提供了两种发布方式,一种是即时发布(Instant Deployment) ,另外一种是定制发布(Cus
3、tom Deployment) 。即时发布提供了一种非常简单的 webservice 的发布方式,但是其中限制太多,因此在实际的开发中定制发布才是首选。这里也将会以定制发布为重点来介绍。 1.即时发布 JWS (Java Web Service) Files - Instant Deployment 即时发布提供了一种非常简单发布方式,发布者只要有 Java 源代码(也就是.java 文件),然后把其后缀名改成 jws(也就是 java web service 的缩写)拷贝到%TOMCAT_HOME%webappsaxis 目录下即完成了所有的发布工作。AXIS 的编译引擎会处理接下来的所有事
4、情。下面是一段示例代码:java 代码public class HelloAXIS public String Hello(String name) return AXIS say hello to + name; 把 HelloAXIS.java 文件改成 HelloAXIS.jws 然后拷贝到%TOMCAT_HOME%webappsaxis 目录下,启动 Tomcat 之后访问 http:/localhost:8080/axis/HelloAXIS.jws 如果能看到 Click to see the WSDL 这个超链接就说明已经发布成功了,点击进去就可以看到这个 Webservice
5、的 WSDL 描述文件。server 端的发布已经完成了,接下来就是编写 Client 端测试代码了。java 代码package com.chnic.test; import .URL; import javax.xml.namespace.QName; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class Test public static void main(String args) throws Exception String targetEendPoint =
6、 http:/localhost:8080/axis/HelloAXIS.jws; Service service = new Service(); Call call = (Call) service.createCall(); call.setOperationName(new QName(targetEendPoint, Hello); call.setTargetEndpointAddress(new URL(targetEendPoint); String result = (String) call.invoke(new ObjectRobert); System.out.prin
7、tln(result); 测试代码很简单,如果熟悉 java 反射机制的朋友不用两分钟就能看明白。运行后客户端控制台出现 AXIS say hello Robert。测试成功。果然很简单吧。不过在这简单背后却是以牺牲灵活性为代价的。假如你现在手里只有.class 或者一个 jar 包,jws 就不再能满足你的需求了,最要命的就是即时发布不支持带包的类,这点 AXIS 的用户手册上写的也很明白。Important: JWS web services are intended for simple web services. You cannot use packages in the pages
8、, and as the code is compiled at run time you can not find out about errors until after deployment. Production quality web services should use Java classes with custom deployment. 2.定制发布 Custom Deployment - Introducing WSDD比起即时发布定制发布更加烦琐也更复杂,但是换来的却是更大的灵活性,因此在实际项目中定制发布还是不二的选择。定制发布需要你自己编写一个 WSDD(Web S
9、ervice Deployment Descriptor)文件,这个东东类似与 XML 稍后会做出介绍。废话不多说,我们来看代码:java 代码package com.chnic.webservice; public class HelloWorld public HelloWorld() public String hello(String str) return Hello + str; public int add(int a, int b) return a + b; 一个带包的很简单的类,在 eclipse 下编译后按照包名拷到 %TOMCAT_HOME%webappsaxisWEB
10、-INFclasses 目录下。以这个类为例,拷贝完之后这个 HelloWorld.class 的路径就是 %TOMCAT_HOME%webappsaxisWEB-INFclassescomchnicwebservice。PS: 如果嫌这样太麻烦,可以另外建一个 Java Web 工程用 myeclipse 的发布工具发布到 Tomcat 之后,整体一次性拷贝到 websericve 的工程中。接下来就需要编写发布文件 deploy.wsdd。到%TOMCAT_HOME%webappsaxisWEB-INF 目录下建立这个文件并在其中添加如下内容:xml 代码 简单的介绍下各个节点的含义,He
11、lloWorld当然是这个 webservice 的名字,后面紧跟的 java:RPC 指的是服务类型。这里一共有有 4 种类型,分别是: RPC, Document, Wrapped 和 Message。有兴趣可以看下 org.apache.axis.providers 这个包和子包下面的类的API 文档。之后的 parameter 节点第一个当然是指出具体的类,第二个从字面上也很好理解:允许调用的方法。这里的配置告诉引擎可以调用所有的 public 方法,当然你也可以自己指定。编写完配置发布文件之后,cmd 打开 windows 的控制台,进入%TOMCAT_HOME%webappsaxi
12、sWEB-INF 目录下键入如下命令 java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd 之后控制台返回 Processing file deploy.wsdd 和 Done processing 这两段话即说明发布成功。 (此时会在同级目录生成一个 server-config.wsdd 文件)在这里的 AdminClient 是AXIS 提供的一个客户端管理工具。至于 java.ext.dirs 的含义可以去了解一下 classloader 和JVM 类装载机制方面的知识,在这里就不多解释。 还有一点
13、要注意的是在发布的时候Tomcat 服务必须处于启动状态,否则就会抛出一堆无法连接的异常信息。发布成功之后你可以通过访问 http:/localhost:8080/axis/servlet/AxisServlet 来查看你所有的定制发布的服务。客户端测试代码String targetEendPoint = http:/localhost:8080/axis/services/HelloWorld; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAdd
14、ress(new URL(targetEendPoint); call.setOperationName(new QName(targetEendPoint, hello); String result = (String) call.invoke(new ObjectRobert); System.out.println(result); call.setOperationName(new QName(targetEendPoint, add); Integer res = (Integer) call.invoke(new Objectnew Integer(1), new Integer
15、(2); System.out.println(The result is: + res); 运行测试代码,控制台显示 Hello Robert 和 The result is: 3 这两句话,说明发布成功。仔细观察下发现其实除了那个 targetEndpoint 之外,即时发布和定制发布的客户端调用代码基本上都是一样的。定制发布的 URL 可以在 WSDL 文件里找到。 其实定制发布还有一些高级特性,这个就留到下一篇再说吧。利用 AXIS 开发 Webservice(二) WSDD 的一些高级特性1、取消发布一个 webservice开篇之前先把上篇的一个遗漏补充上,上篇只讲了怎么发布一个 webservice,但是如何取消没有却没有提。其实取消一个已经发布的 webservce 也是非常简单的,我们就拿上篇的HelloWorld 来做例子吧。 发布 webservice 的时候我们有一个 deploy.wsdd 文件,当然在取消发布的时候就会有一个undeploy.wsdd 文件。这个文件的内容也很简单, xml 的代码如下。Xml 代码 编写完这个 xml 文件之后,把它同样 copy 到%TOMCAT_HOM