`

AXIS全攻略(一)

阅读更多

原文http://blog.csdn.net/tenwang1977/archive/2004/07/06/35550.aspx

一、Axis简介


1. 什么是SOAP

SOAP是一个基于XML的用于应用程序之间通信数据编码的传输协议。最初由微软和Userland Software提出,随着不断地完善和改进,SOAP很快被业界广泛应用,目前完全发布版本是1.1。在其发展过程中,W3C XML标准工作小组积极促成SOAP成为一个真正的开放标准。在写作此文档之时,SOAP1.2草案已经发布,1.2对1.1中相对混乱的部分做了改进。
SOAP被广泛作为新一代跨平台、跨语言分布计算Web Services的重要部分。


2. 什么是Axis

Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目,目前最新版本是采用Java开发的1.1版本,C++的版本正在开发之中。Axis v1.1软件包可以从http://ws.apache.org/axis/dist/1_1/下载得到。
但是Axis不仅仅是一个SOAP引擎,它还包括:
    一个独立运行的SOAP服务器
    一个servlet引擎的插件,这个servlet引擎可以是Tomcat
    对WSDL的扩展支持
    一个将WSDL的描述生成JAVA类的工具
    一些示例代码
    还有一个监控TCP/IP包的工具
 
二、Axis的安装

应用Axis开发Web Services,你需要安装如下软件:
1.JDK1.4.2
2.一个支持Servlet的服务器引擎,比如广为人知的Tomcat。

当安装好Tomcat之后,只需将下载的Axis软件包解压缩,将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下即可。

三、Axis的配置

Axis基于Java开发,可以部署于多种操作系统,使用前需要配置一系列的系统变量,在此假定你已经在本机上装好了Tomcat 4.0以上的版本,需要配置的系统变量如下表所示:

CATALINA_HOME
C:\Tomcat_4_1

(此处应为Tomcat的安装位置,注意路径名中不要有空格)

AXIS_HOME
%CATALINA_HOME%\webapps\axis

AXIS_LIB
%AXIS_HOME%\lib

AXISCLASSPATH
%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

CLASSPATH 中加入:
%AXIS_LIB%\axis.jar;%AXIS_LIB%\commons-discovery.jar; %AXIS_LIB%\commons-logging.jar;%AXIS_LIB%\jaxrpc.jar; %AXIS_LIB%\saaj.jar;%AXIS_LIB%\log4j-1.2.8.jar; %AXIS_LIB%\xml-apis.jar;%AXIS_LIB%\xercesImpl.jar

四、Axis的测试

安装配置完毕后,应测试一下是否Axis可以正确运行了。

  启动Tomcat服务器,在浏览器中访问http://localhost:8080/axis/happyaxis.jsp,如果页面显示有错误,则需要回头检查一下相关配置是否正确,如果浏览页面能正确显示出系统组件、属性等参数配置信息,则表示安装成功。现在可以开始开发你的Web Services应用了。

五、服务的发布
Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制发布(Custom Deployment)。

1. 使用即时发布 Java Web Service(JWS)

  对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。

  使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到“……\webapps\axis”目录下即可。
    在此给出一个从英里到公里的长度单位转换的服务,其源码如下:

文件Distance.jws

public class Distance
{
    public double convertMile2Kilometre( double mile )
    {
 return mile * 1.609;  //实现英里到公里的距离转换
    }
}

将其放到“……\webapps\axis”目录,通过访问http://localhost:8080/axis/Distance.jws?wsdl可以看到这个服务的WSDL描述文件,这说明Distance服务被成功发布了。描述的WDSL代码如下:

xml 代码
  1. <?xml version="1.0" encoding="UTF-8" ?>    
  2. <wsdl:definitions targetNamespace="http://192.168.0.26:8080/axis/Distance.jws" xmlns="http://schemas.xmlsoap.org/wsdl/"     
  3.    xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://192.168.0.26:8080/axis/Distance.jws" xmlns:intf="http://192.168.0.26:8080/axis/Distance.jws" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  4. <wsdl:message name="convertMile2KilometreRequest">  
  5.   <wsdl:part name="mile" type="xsd:double" />    
  6.   </wsdl:message>  
  7. <wsdl:message name="convertMile2KilometreResponse">  
  8.   <wsdl:part name="convertMile2KilometreReturn" type="xsd:double" />    
  9.   </wsdl:message>  
  10. <wsdl:portType name="Distance">  
  11. <wsdl:operation name="convertMile2Kilometre" parameterOrder="mile">  
  12.   <wsdl:input message="impl:convertMile2KilometreRequest" name="convertMile2KilometreRequest" />    
  13.   <wsdl:output message="impl:convertMile2KilometreResponse" name="convertMile2KilometreResponse" />    
  14.   </wsdl:operation>  
  15.   </wsdl:portType>  
  16. <wsdl:binding name="DistanceSoapBinding" type="impl:Distance">  
  17.   <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />    
  18. <wsdl:operation name="convertMile2Kilometre">  
  19.   <wsdlsoap:operation soapAction="" />    
  20. <wsdl:input name="convertMile2KilometreRequest">  
  21.   <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded" />    
  22.   </wsdl:input>  
  23. <wsdl:output name="convertMile2KilometreResponse">  
  24.   <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://192.168.0.26:8080/axis/Distance.jws" use="encoded" />    
  25.   </wsdl:output>  
  26.   </wsdl:operation>  
  27.   </wsdl:binding>  
  28. <wsdl:service name="DistanceService">  
  29. <wsdl:port binding="impl:DistanceSoapBinding" name="Distance">  
  30.   <wsdlsoap:address location="http://192.168.0.26:8080/axis/Distance.jws" />    
  31.   </wsdl:port>  
  32.   </wsdl:service>  
  33.   </wsdl:definitions>  

 

需要注意的是:JWS的web服务发布是一个很简单的Web服务发布方式,在页面中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。

2. 使用定制发布 Web Service Deployment Descriptor(WSDD)

  即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。

  因此,Axis提供了另一种服务发布方式,这就是定制发布。

  在此给出一个从加仑到升的容积单位转换的服务,其源码如下:

  文件Capacity.java将其编译成.class文件,放置到“……\webapps\axis\samples\capacity”目录下,即可着手进行发布。
    定制发布不需要构建.jws文件,但必须创建服务发布描述文件deploy.wsdd(Web Service Deployment Descriptor的缩写),这个文件负责描述服务的名称、入口等信息,其内容如下:
    文件deploy.wsdd

xml 代码
  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  
  2. <service name="Capacity" provider="java:RPC">  
  3. <parameter name="className" value="samples.capacity.Capacity"/>  
  4. <parameter name="allowedMethods" value="*"/>  
  5. </service>  
  6.    </deployment>  

 

在这里服务的提供者是“java:RPC”,它被内建在Axis中,而且指明了一个JAVA RPC服务,做这个处理的类是org.apache.axis.providers.java.RPCProvider。
    我们是通过一个<parameter>标签告诉RPC服务应该调用的类,而另外一个<parameter>标签则告诉引擎,它可以调用这个类中的任何的Public方法。你也可以指定通过使用名字空间或者一些可以调用的方法列表,来指明那些方法可以被调用。

  将该文件也放到“……\webapps\axis\samples\capacity”目录下,然后可以采用Axis提供的一个客户端管理工具——AdminClient来完成服务的定制发布。
   在“……\webapps\axis\samples\capacity”目录下,运行:

   java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

   如果运行时说没有找到类,那么可能是类路径没有配置好,建议将所有的与axis相关的jar都写到classpath中去。这样只要运行:

   java org.apache.axis.client.AdminClient deploy.wsdd
   可以看到以下运行结果:

 Processing file deploy.wsdd
 <Admin>Doneprocessing</Admin>

  这表明Capacity服务定制发布完成。
 
   你也可以调用:
 java org.apache.axis.client.AdminClient undeploy.wsdd  来取消部署。

   你也可以调用:
 java org.apache.axis.client.AdminClient list 来获得所有的已经部署的服务的列表。在这里你会看到services, handlers, transports等等,注意这个调用只是列出了WEB-INF\server-config.wsdd的文件内容。

   一定要注意:编译后的class文件要拷贝到web-inf/classes的目录中,如果该文件中有包存在的话,别忘了还要在classes目录下创建包的目录
   通过访问http://localhost:8080/axis/services/Capacity?wsdl可以看到这个服务的WSDL描述文件,这说明Capacity服务被成功发布了。
   你也可以通过访问http://localhost:8080/axis/servlet/AxisServlet查看所有定制发布的服务。
   WDSL如下:

 

xml 代码
  1. <?xml version="1.0" encoding="UTF-8" ?>    
  2. <wsdl:definitions targetNamespace="http://localhost:8080/axis/services/Capacity" xmlns="http://schemas.xmlsoap.org/wsdl/"  
  3.     xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://localhost:8080/axis/services/Capacity" xmlns:intf="http://localhost:8080/axis/services/Capacity" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">  
  4. <wsdl:message name="convertGallon2LitreResponse">  
  5.   <wsdl:part name="convertGallon2LitreReturn" type="xsd:double" />    
  6.   </wsdl:message>  
  7. <wsdl:message name="convertGallon2LitreRequest">  
  8.   <wsdl:part name="in0" type="xsd:double" />    
  9.   </wsdl:message>  
  10. <wsdl:portType name="Capacity">  
  11. <wsdl:operation name="convertGallon2Litre" parameterOrder="in0">  
  12.   <wsdl:input message="impl:convertGallon2LitreRequest" name="convertGallon2LitreRequest" />    
  13.   <wsdl:output message="impl:convertGallon2LitreResponse" name="convertGallon2LitreResponse" />    
  14.   </wsdl:operation>  
  15.   </wsdl:portType>  
  16. <wsdl:binding name="CapacitySoapBinding" type="impl:Capacity">  
  17.   <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />    
  18. <wsdl:operation name="convertGallon2Litre">  
  19.   <wsdlsoap:operation soapAction="" />    
  20. <wsdl:input name="convertGallon2LitreRequest">  
  21.   <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://capacity.samples" use="encoded" />    
  22.   </wsdl:input>  
  23. <wsdl:output name="convertGallon2LitreResponse">  
  24.   <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/services/Capacity" use="encoded" />    
  25.   </wsdl:output>  
  26.   </wsdl:operation>  
  27.   </wsdl:binding>  
  28. <wsdl:service name="CapacityService">  
  29. <wsdl:port binding="impl:CapacitySoapBinding" name="Capacity">  
  30.   <wsdlsoap:address location="http://localhost:8080/axis/services/Capacity" />    
  31.   </wsdl:port>  
  32.   </wsdl:service>  
  33.   </wsdl:definitions>  
WSDD 的高级功能:
  (1) AXIS支持三种对象范围:
     "request"范围:这是默认的情况,每一次Soap请求的时候都将创建新的对象。
     "application"范围:将会为所有的请求生成一个单独的共享的对象。
     "session"范围:为每一个session期的客户端请求创建一个对象。
  指定方法如下:
  <service name="MyService"...>
  <parameter name="scope" value="value"/>
  ...
  </service>
  (2) 更多部署内容:Handlers and Chains
  让我们来深入挖掘一下Axis引擎的更强大的特性。如果我们想跟踪我们的服务被调用了多少次,那么我们只需要包含一个简单的handler,它存放在samples/log目录下。要使用这个handler,你就首先应该部署这个handler,然后使用在部署服务时给它指定的名字。下面是一个wsdd文件的例子:
xml 代码
  1. <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">  
  2.   <!-- define the logging handler configuration -->  
  3.    <handler name="track" type="java:samples.userguide.example4.LogHandler">  
  4.      <parameter name="filename" value="MyService.log"/>  
  5.    </handler>  
  6.     
  7.   <!-- define the service, using the log handler we just defined -->  
  8.    <service name="LogTestService" provider="java:RPC">  
  9.     <requestFlow>  
  10.       <handler type="track"/>  
  11.     </requestFlow>  
  12.     
  13.     <parameter name="className" value="samples.userguide.example4.Service"/>  
  14.     <parameter name="allowedMethods" value="*"/>  
  15.    </service>  
  16.  </deployment>  

 

第一段指明了一个名为track的handler,它是samples.userguide.example4.LogHandler类的实例。另外还指定了一个参数filename,用于指定日志文件名称。
  下面的那段指明了一个RPC服务,和我们在上面的例子中看到的一样,所不同的是在service标签中的<requestFlow>标签,它指定了一些在调用服务前应该被调用的handler集。也就是由于我们在部署中插入了这个"track"的引用,所以我们确定每次调用服务的时候都将被记录到日志文件中去。
 
  (3)远程管理:
  <service name="AdminService" provider="java:MSG">
 <parameter name="className" value="org.apache.axis.util.Admin"/>
 <parameter name="allowedMethods" value="*"/>
 <parameter name="enableRemoteAdmin" value="true"/>
  </service>
  WARNING: enabling remote administration may give unauthorized parties access to your machine. If you do this, please make sure to add security to your configuration!
  所以远程管理涉及到安全问题,不建议采用。

 


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=35550

java 代码
  1. package samples.capacity;   
  2.     public class Capacity   
  3.     {   
  4.         public double convertGallon2Litre( double gallon )   
  5.  {   
  6.      return gallon * 4.546;//实现加仑到升的容积转换   
  7.  }//convertGallon2Litre()   
  8.   
  9.     }/* Capacity */  
 
分享到:
评论

相关推荐

    AXIS系统全攻略1548678721245

    AXIS全攻略485764531212154512014

    Axis1.4全攻略

    《Axis1.4全攻略》是一份详尽的指南,主要涵盖了使用Axis1.4进行Web服务开发的全过程,包括服务器端和客户端的开发实践。本文将深入剖析Axis1.4在Java Web服务中的应用,旨在帮助开发者更好地理解和掌握这一经典工具...

    axis学习攻略

    axis学习攻略,包含插件安装,文档学习,例子(2个项目架包一样,有一个例子的架包没加,加上就超出50MB了),保证能学好!axis2-1.4.1-bin.rar--axis2-1.4.1-war.rar 官网下

    AXIS1全套JAR包

    AXIS是Apache软件基金会的一个开源项目,专门用于创建、部署和管理Web服务。AXIS1是早期版本,但至今仍被一些遗留系统或对兼容性有特定需求的项目所使用。 在Java世界中,Web服务是通过SOAP(简单对象访问协议)...

    Axis_API和axis2_API

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis和Axis2是两种流行的Java SOAP(简单对象访问协议)框架,用于构建和消费Web服务。本文将深入探讨这两个API,以及它们在Web服务开发中的作用。 ...

    Axis1,Axis2,Xfire,CXF区别

    Axis2 是另一种新一代的 WebService 平台,它的开发者太急于推出 1.0 版本,所以 1.0 还不是一个稳定的版本。Axis2 的开发方式类似一个小型的应用服务器,Axis2 的开发包要以 WAR 的形式部署到 Servlet 容器中。Axis...

    axis 1.x与axis2.x开发

    Axis是Apache组织开发的一款开源Web服务框架,主要用于构建和部署SOAP(Simple Object Access Protocol)服务。Axis分为两个主要版本:Axis1.x和Axis2.x,它们都是Java平台上的Web服务实现,但在设计和功能上有所...

    Axis实践之Axis入门

    Axis是一个流行的开源SOAP(Simple Object Access Protocol)库,它允许开发者在Java平台上构建和部署Web服务。本篇文章将带你逐步了解如何在Tomcat服务器上安装和配置Axis,以便开始你的Web服务开发之旅。 **第一...

    AxisServer_axisservice_

    **Axis2** 是一个高性能、灵活且可扩展的Web服务引擎,它是Apache SOAP项目的下一代产品。Axis2以其模块化设计和强大的消息处理能力而闻名,它支持多种协议,如HTTP、HTTPS、SMTP等,还支持SOAP 1.1、SOAP 1.2和...

    AXIS(Java WebSerivce)全攻略

    AXIS的一个比较好的入门介绍

    axis2.zip一系列相关jar包,全,全,全

    标题中的 "axis2.zip一系列相关jar包,全,全,全" 暗示了这个压缩包包含了一系列 Axis2 开发所需的完整组件。通常, Axis2 的核心库包括以下部分: 1. **axis2-kernel.jar**:这是 Axis2 的核心模块,包含了服务...

    axis1.4和axis2相关jar文件

    **Axis1** 是最初的版本,发布于2003年,它基于SOAP 1.1规范,提供了一个快速开发Web服务的框架。Axis1使用JavaBeans Activation Framework (JAF) 和JavaMail API来处理消息传递。其核心特性包括: 1. **SOAP支持**...

    axis2-1.6.2

    axis2-1.6.2.zip, windows axis2工具,根据 WSDL...在D:\Work_Program_Files\axis2-1.6.2\bin目录有一个wsdl2java.bat文件; 3、设置环境变量,加入AXIS2_HOME=&lt;Axis2客户端安装目录&gt;,path中追加;%AXIS2_HOME%\bin

    axis2-idea-plugin-1.7.9.zip_axis2_axis2-idea-plugin_idea导入axis2_

    Axis2是Apache软件基金会的一个开源项目,主要用于构建Web服务。"1.7.9"是该插件的版本号,表示这是一个特定的稳定版本。 描述中的"axis2-idea-plugin-1.7.9"进一步确认了这是Axis2的IDEA插件,版本号为1.7.9。通常...

    axis和axis2的一些发布差异(WSDL2Java) 收藏

    ### Axis与Axis2在WSDL2Java工具中的发布差异 #### 概述 ...这使得Axis2在现代Web服务开发中成为了一个更受欢迎的选择。开发者可以根据自己的具体需求选择最适合的工具来进行Web服务的构建和部署。

    axis1.4完整包下载

    Apache Axis 是一个开源的Web服务框架,主要用于实现SOAP(简单对象访问协议)协议。它使得开发和部署基于Java的Web服务变得更为简便。标题“axis1.4完整包下载”表明我们关注的是Apache Axis的1.4版本,这是一个较...

    eclipse axis2插件安装

    Axis2 是一个开源的 Web 服务引擎,由 Apache 软件基金会维护。它提供了一个灵活、可扩展、性能高效的 Web 服务解决方案。Eclipse 是一个流行的集成开发环境(IDE),Axis2 插件安装可以使得开发者更方便地使用 Axis...

    axis2的API,axis2 API,axis2帮助文档

    Axis2是Apache软件基金会开发的一个开源Web服务引擎,它提供了基于SOAP(Simple Object Access Protocol)的Web服务实现。本文将详细介绍Axis2的API及其在Web服务开发中的应用,同时也会探讨Axis2的帮助文档如何协助...

    axis2相关的jar包

    axis2-adb-1.5.4.jar axis2-adb-codegen-1.5.4.jar axis2-codegen-1.5.4.jar axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-...

    Axis搭建一个简单的web工程

    在本文中,我们将深入探讨如何使用Axis来构建一个简单的Web工程,其中包括创建一个Web服务,该服务能接收两个数字并返回它们的和。Axis是一个流行的Java Web服务框架,它允许开发者轻松地实现跨平台和跨语言的互操作...

Global site tag (gtag.js) - Google Analytics