一.前言:
相信大家对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-INF\class\(axis文件夹下):
将上述的java类进行编译,生成一个包含路径:cn/qtone/zsywyj/webseervice的WebwervcieDem.classs;将上述目录并文件添加到web-inf\classes\路径下面;
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%\webapps\axis\WEB-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%\webapps\axi
s\WEB-INF目录下;(其实它是根据-lhttp://localhost:8080/axis/servlet/AxisServlet这里来找到保存地址的,如果我们要整合到项目中我们可以改成类似于:
-lhttp://localhost:8080/wd/servlet/AxisServlet,然后server-config.wsdd
会保存在%tomcat_home%\webapps\wd\WEB-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));
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中将axis\WEB-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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。