`
zydky
  • 浏览: 86938 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

【旧文】web service与axis(二)

阅读更多

四、利用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)

    ### MyEclipse下开发Web Service(Axis):深入解析与实践指南 #### 一、环境配置与准备 在深入探讨如何使用Apache Axis在MyEclipse环境下构建Web Services之前,首要任务是确保拥有一个完整的开发环境。这包括但不...

    Axis开发Web Service实例

    ### Axis开发Web Service实例详解 #### 一、概述 在探讨如何使用Apache Axis来开发Web Service之前,我们首先需要了解一些基本概念。 **Web Service**是一种标准的技术框架,用于实现不同平台之间的应用通信。它...

    MyEclipse下开发Web Service(Axis)2

    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 WebService Axis一个完整的客户端代码

    web service axis项目实例

    标题中的"web service Axis项目实例"表明我们将探讨使用Axis框架来创建和使用Web服务。Axis提供了从WSDL(Web Services Description Language)到Java代码的绑定,以及从Java类到WSDL的自动生成,简化了Web服务的...

    Web Service(Axis) + Excel(Office 2003)

    【标题】:“Web Service(Axis) + Excel(Office 2003)”结合使用详解 在信息技术领域,Web服务是一种通过互联网交换数据的方式,它允许不同系统之间的应用程序进行交互。Apache Axis是Java环境中广泛使用的Web...

    web service axis 1.6

    Web服务Axis 1.6是Apache软件基金会开发的一个开源工具,专门用于构建和部署Web服务。它是基于Java的,能够使开发者轻松地将现有业务逻辑转换为Web服务,或者消费其他发布的Web服务。在本文中,我们将深入探讨Axis ...

    Web Service Axis完整的实例

    在这个"Web Service Axis1.4 完整的实例"中,我们将深入探讨Axis1.4版本的相关知识点。 首先,了解Axis1.4的基础概念至关重要。它是Apache Axis的第1.4个版本,主要支持SOAP(Simple Object Access Protocol)协议...

    Axis2与Eclipse整合开发的Web Service的服务端

    【标题】:Axis2与Eclipse整合开发的Web Service服务端详解 【描述】:本文将详细介绍如何在Eclipse环境中利用Axis2框架开发一个Web Service服务端,包括计算器服务CalculateService的实现步骤。 【标签】:Axis2,...

    web service axis 总结文档 相关实例说明

    本文档将对Web Service Axis进行详细总结,并提供相关实例说明。 1. Web Service简介 Web服务是通过HTTP协议传输数据的一种方式,它利用SOAP(Simple Object Access Protocol)作为消息传输格式,WSDL(Web ...

    Web Service (Axis 1.1) step by step.ppt

    Web Service (Axis 1.1) step by step.ppt 用AXIS开发webservice一步

    web service axis1.4 jar

    Axis1.4可以与EJB(Enterprise JavaBeans)、Spring框架、JMS(Java Message Service)等其他Java技术无缝集成,扩大了Web服务的使用范围。 10. **性能优化**: 虽然Axis1.4相较于现代的Web服务框架(如Apache ...

    axis web Service

    【Axis Web Service】是一种基于Java的开源Web服务框架,它由Apache软件基金会开发,主要用于创建和部署Web服务。Axis提供了一种简单的方式来实现SOAP(Simple Object Access Protocol)通信,允许不同平台上的应用...

    MyEclipse下开发Web Service(Axis2)

    在MyEclipse中,选择"File" -&gt; "New" -&gt; "Other",然后在弹出的窗口中找到并选择"MyEclipse" -&gt; "Web" -&gt; "Axis2 Web Service"。在向导中填写项目名称,选择项目的保存位置,然后点击"Finish"。 4. **编写业务逻辑...

    axis2 web service完整教学

    【Apache Axis2 Web Service 教程】 Apache Axis2 是一个流行的开源Web服务框架,用于创建、部署和管理高性能的Web服务。本教程将详细介绍如何在Eclipse环境中利用Apache Axis2搭建Web服务及其客户端。 **环境配置...

Global site tag (gtag.js) - Google Analytics