`

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 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支持**...

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

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

    axis1.4完整包下载

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

    axis的包axis的包axis的包axis的包axis的包

    axis的包axis的包axis的包axis的包

    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。通常...

    Axis1,Axis2,Xfire,CXF区别

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

    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的帮助文档如何协助...

    Axis搭建一个简单的web工程

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

    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-...

    axis2-1.6.1

    标题“axis2-1.6.1”指的是Apache Axis2的1.6.1版本,这是一个流行的开源Web服务引擎,用于构建和部署Web服务。Apache Axis2是Axis1的下一代,设计为更灵活、可扩展且高效。在这个版本中,它提供了一系列改进和新...

Global site tag (gtag.js) - Google Analytics