四、利用axis开发服务端web服务
在跟其他公司合作完成一个大的项目的过程中,有时候对方的程序需要从我们的程序读取某些数据,通过web服务给对方提供服务是选择之一。要从头建立一个能够给对方提供web服务的应用,需要如下的步骤:
1. 新建web应用
按照J2EE规范在%CATALINA_HOME%\webapps新建一个应用,如webserviceTest;
2. 在web应用中配置axis
将%AXIS_HOME%\lib下的各个jar包拷贝到%CATALINA_HOME%\webapps\webserviceTest\WEB-INF\lib下;
将%AXIS_HOME%\WEB-INF下的web.xml拷贝到%CATALINA_HOME%\webapps\webserviceTest\WEB-INF下;
这两个操作相当于在我们的web应用程序中配置了Axis。
3. 编写提供web服务的java类
这个java类跟我们平时用到的java类没有任何不同,需要提供给他人的服务对应该java类的方法。在我们的示例中,提供web服务的java类如下:
package com.ufgov.webservice;
public class WsTest {
public WsBean getWsBean(String name,int age){
WsBean wsBean = new WsBean();
wsBean.setAge(age);
wsBean.setName(name);
return wsBean;
}
public String getName(){
return new WsBean().getName();
}
}
在这个类中,提供了两个方法getWsBean()、getName(),其中getWsBean()方法返回一个自定义的对象:
package com.ufgov.webservice;
public class WsBean {
private String name;
private int age;
public WsBean(){
name = "WsTest";
age = 20;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
4. 编写deploy.wsdd文件
在%CATALINA_HOME%\webapps\webserviceTest\WEB-INF下新建deploy.wsdd文件,内容如下:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler name="print" type="java:LogHandler"/>
<service name="wstest" provider="java:RPC">
<requestFlow>
<handler type="print"/>
</requestFlow>
<parameter name="className" value="com.ufgov.webservice.WsTest"/>
<parameter name="allowedMethods" value="*"/>
</service>
</deployment>
在deploy.wsdd文件中,配置了一个service元素,name属性为wstest,表明我们的web服务名称为wstest。其中className参数是你的想部署的类名(全名),allowedMethods是调用的服务的方法,如果有多个方法的话可以用空格分开(如: <parameter name="allowedMethods" value="getStr getMoney"/>),当用*的时候表示全部。
在deploy.wsdd文件中,还配置了一个handler,用到的LogHandler如下:
import org.apache.axis.AxisFault;
import org.apache.axis.Handler;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;
import java.util.Date;
public class LogHandler extends BasicHandler {
public void invoke(MessageContext msgContext) throws AxisFault{
/** Log an access each time
we get invoked.
*/
try {
Handler serviceHandler = msgContext.getService();
Integer numAccesses = (Integer)serviceHandler.getOption("accesses");
if (numAccesses == null)
numAccesses = new Integer(0);
numAccesses = new Integer(numAccesses.intValue() + 1);
Date date = new Date();
String result = date + ": service " + msgContext.getTargetService() + " accessed " + numAccesses + " time(s).";
serviceHandler.setOption("accesses", numAccesses);
System.out.println(result);
} catch (Exception e){
throw AxisFault.makeFault(e);
}
}
}
注意:很多网上文章里介绍deploy.wsdd文件时都没有提到handler元素和requestFlow元素,可能是axis版本不一致导致的,在我用到的axis1.4里,如果不配置handler,启动Tomcat时就会报错。另外,我怀疑直接使用axis自带的handler可能也可以,没有试过。
5. 发布web服务
编译所有的java类,并将class文件拷贝到%CATALINA_HOME%\webapps\webserviceTest\WEB-INF\classes文件夹下,确保Tomcat已经启动,DOS窗口下进入%CATALINA_HOME%\webapps\webserviceTest\WEB-INF目录,运行如下命令生成server-config.wsdd:
java org.apache.axis.client.AdminClient deploy.wsdd -p8090
如果屏幕上出现:
Processing file deploy.wsdd
<Admin>Done processing</Admin>
表示成功,在%AXIS_HOME%\WEB-INF下会找到server-config.wsdd文件,拷贝到%CATALINA_HOME%\webapps\webserviceTest\WEB-INF下,重新加载webserviceTest应用,现在访问http://localhost:8090/webserviceTest/services/wstest?wsdl ,会出现一个页面包含XML代码,这个就是我们web服务的WSDL文件,如果其他的人要访问我们的web服务,必须知道该WSDL的URL。
6. 关于生成server-config.wsdd文件的几点说明
Ø 因为我的tomcat端口已经改为8090,所以在命令的最后有 -p8090参数,如果你的tomcat端口没有改变,只需运行java org.apache.axis.client.AdminClient deploy.wsdd即可。
Ø 如果在前面配置环境变量时,没有在CLASSPATH 中加入% AXIS_LIB %下的各个jar包,也可以通过如下命令生成server-config.wsdd:
Java -Djava.ext.dirs=lib org.apache.Axis.client.AdminClient deploy.wsdd
Ø 许多网上文章上介绍生成server-config.wsdd文件时使用如下命令:
java org.apache.axis.client.AdminClient -l http://localhost:8090/webserviceTest/services/wstest deploy.wsdd
这种情况下,server-config.wsdd文件应该自动在%CATALINA_HOME%\webapps\webserviceTest\WEB-INF下生成,但是我还没试成功。
Ø 如果在web服务里需要传输自定义对象,还需对生成的server-config.wsdd文件进行修改,注册自定义对象的序列化/反序列化器,具体来说,就是找到如下代码:
<service name="wstest" provider="java:RPC">
<requestFlow>
<handler type="print"/>
</requestFlow>
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="com.ufgov.webservice.WsTest"/>
</service>
修改为:
<service name="wstest" provider="java:RPC">
<requestFlow>
<handler type="print"/>
</requestFlow>
<parameter name="allowedMethods" value="*"/>
<parameter name="className" value="com.ufgov.webservice.WsTest"/>
<beanMapping languageSpecificType="java:com.ufgov.webservice.WsBean" qname="ns:WsBean" xmlns:ns="urn:BeanService"/>
</service>
注意service/beanMapping的定义。languageSpecificType中定义使用那个类, qname定义类的名称。
(未完待续……)
分享到:
相关推荐
### MyEclipse下开发Web Service(Axis):深入解析与实践指南 #### 一、环境配置与准备 在深入探讨如何使用Apache Axis在MyEclipse环境下构建Web Services之前,首要任务是确保拥有一个完整的开发环境。这包括但不...
### Axis开发Web Service实例详解 #### 一、概述 在探讨如何使用Apache Axis来开发Web Service之前,我们首先需要了解一些基本概念。 **Web Service**是一种标准的技术框架,用于实现不同平台之间的应用通信。它...
MyEclipse下开发Web Service(Axis)2 一、环境准备 在使用 Axis 开发 Web Service 时,需要准备 web 服务器和 Axis API。本文使用的 Web container 是 Tomcat5.5,Axis API 采用版本 2。为便于开发,需要 downloads...
Web Service WebService Axis一个完整的客户端代码
标题中的"web service Axis项目实例"表明我们将探讨使用Axis框架来创建和使用Web服务。Axis提供了从WSDL(Web Services Description Language)到Java代码的绑定,以及从Java类到WSDL的自动生成,简化了Web服务的...
【标题】:“Web Service(Axis) + Excel(Office 2003)”结合使用详解 在信息技术领域,Web服务是一种通过互联网交换数据的方式,它允许不同系统之间的应用程序进行交互。Apache Axis是Java环境中广泛使用的Web...
Web服务Axis 1.6是Apache软件基金会开发的一个开源工具,专门用于构建和部署Web服务。它是基于Java的,能够使开发者轻松地将现有业务逻辑转换为Web服务,或者消费其他发布的Web服务。在本文中,我们将深入探讨Axis ...
在这个"Web Service Axis1.4 完整的实例"中,我们将深入探讨Axis1.4版本的相关知识点。 首先,了解Axis1.4的基础概念至关重要。它是Apache Axis的第1.4个版本,主要支持SOAP(Simple Object Access Protocol)协议...
【标题】:Axis2与Eclipse整合开发的Web Service服务端详解 【描述】:本文将详细介绍如何在Eclipse环境中利用Axis2框架开发一个Web Service服务端,包括计算器服务CalculateService的实现步骤。 【标签】:Axis2,...
本文档将对Web Service Axis进行详细总结,并提供相关实例说明。 1. Web Service简介 Web服务是通过HTTP协议传输数据的一种方式,它利用SOAP(Simple Object Access Protocol)作为消息传输格式,WSDL(Web ...
Web Service (Axis 1.1) step by step.ppt 用AXIS开发webservice一步
Axis1.4可以与EJB(Enterprise JavaBeans)、Spring框架、JMS(Java Message Service)等其他Java技术无缝集成,扩大了Web服务的使用范围。 10. **性能优化**: 虽然Axis1.4相较于现代的Web服务框架(如Apache ...
【Axis Web Service】是一种基于Java的开源Web服务框架,它由Apache软件基金会开发,主要用于创建和部署Web服务。Axis提供了一种简单的方式来实现SOAP(Simple Object Access Protocol)通信,允许不同平台上的应用...
在MyEclipse中,选择"File" -> "New" -> "Other",然后在弹出的窗口中找到并选择"MyEclipse" -> "Web" -> "Axis2 Web Service"。在向导中填写项目名称,选择项目的保存位置,然后点击"Finish"。 4. **编写业务逻辑...
【Apache Axis2 Web Service 教程】 Apache Axis2 是一个流行的开源Web服务框架,用于创建、部署和管理高性能的Web服务。本教程将详细介绍如何在Eclipse环境中利用Apache Axis2搭建Web服务及其客户端。 **环境配置...