原文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 代码
- <?xml version="1.0" encoding="UTF-8" ?>
- - <wsdl:definitions targetNamespace="http://192.168.0.26:8080/axis/Distance.jws" xmlns="http://schemas.xmlsoap.org/wsdl/"
- 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">
- - <wsdl:message name="convertMile2KilometreRequest">
- <wsdl:part name="mile" type="xsd:double" />
- </wsdl:message>
- - <wsdl:message name="convertMile2KilometreResponse">
- <wsdl:part name="convertMile2KilometreReturn" type="xsd:double" />
- </wsdl:message>
- - <wsdl:portType name="Distance">
- - <wsdl:operation name="convertMile2Kilometre" parameterOrder="mile">
- <wsdl:input message="impl:convertMile2KilometreRequest" name="convertMile2KilometreRequest" />
- <wsdl:output message="impl:convertMile2KilometreResponse" name="convertMile2KilometreResponse" />
- </wsdl:operation>
- </wsdl:portType>
- - <wsdl:binding name="DistanceSoapBinding" type="impl:Distance">
- <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- - <wsdl:operation name="convertMile2Kilometre">
- <wsdlsoap:operation soapAction="" />
- - <wsdl:input name="convertMile2KilometreRequest">
- <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://DefaultNamespace" use="encoded" />
- </wsdl:input>
- - <wsdl:output name="convertMile2KilometreResponse">
- <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://192.168.0.26:8080/axis/Distance.jws" use="encoded" />
- </wsdl:output>
- </wsdl:operation>
- </wsdl:binding>
- - <wsdl:service name="DistanceService">
- - <wsdl:port binding="impl:DistanceSoapBinding" name="Distance">
- <wsdlsoap:address location="http://192.168.0.26:8080/axis/Distance.jws" />
- </wsdl:port>
- </wsdl:service>
- </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 代码
- <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
- <service name="Capacity" provider="java:RPC">
- <parameter name="className" value="samples.capacity.Capacity"/>
- <parameter name="allowedMethods" value="*"/>
- </service>
- </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 代码
- <?xml version="1.0" encoding="UTF-8" ?>
- - <wsdl:definitions targetNamespace="http://localhost:8080/axis/services/Capacity" xmlns="http://schemas.xmlsoap.org/wsdl/"
- 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">
- - <wsdl:message name="convertGallon2LitreResponse">
- <wsdl:part name="convertGallon2LitreReturn" type="xsd:double" />
- </wsdl:message>
- - <wsdl:message name="convertGallon2LitreRequest">
- <wsdl:part name="in0" type="xsd:double" />
- </wsdl:message>
- - <wsdl:portType name="Capacity">
- - <wsdl:operation name="convertGallon2Litre" parameterOrder="in0">
- <wsdl:input message="impl:convertGallon2LitreRequest" name="convertGallon2LitreRequest" />
- <wsdl:output message="impl:convertGallon2LitreResponse" name="convertGallon2LitreResponse" />
- </wsdl:operation>
- </wsdl:portType>
- - <wsdl:binding name="CapacitySoapBinding" type="impl:Capacity">
- <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />
- - <wsdl:operation name="convertGallon2Litre">
- <wsdlsoap:operation soapAction="" />
- - <wsdl:input name="convertGallon2LitreRequest">
- <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://capacity.samples" use="encoded" />
- </wsdl:input>
- - <wsdl:output name="convertGallon2LitreResponse">
- <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:8080/axis/services/Capacity" use="encoded" />
- </wsdl:output>
- </wsdl:operation>
- </wsdl:binding>
- - <wsdl:service name="CapacityService">
- - <wsdl:port binding="impl:CapacitySoapBinding" name="Capacity">
- <wsdlsoap:address location="http://localhost:8080/axis/services/Capacity" />
- </wsdl:port>
- </wsdl:service>
- </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 代码
- <deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
-
- <handler name="track" type="java:samples.userguide.example4.LogHandler">
- <parameter name="filename" value="MyService.log"/>
- </handler>
-
-
- <service name="LogTestService" provider="java:RPC">
- <requestFlow>
- <handler type="track"/>
- </requestFlow>
-
- <parameter name="className" value="samples.userguide.example4.Service"/>
- <parameter name="allowedMethods" value="*"/>
- </service>
- </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 代码
- package samples.capacity;
- public class Capacity
- {
- public double convertGallon2Litre( double gallon )
- {
- return gallon * 4.546;
- }
-
- }
分享到:
相关推荐
AXIS全攻略485764531212154512014
《Axis1.4全攻略》是一份详尽的指南,主要涵盖了使用Axis1.4进行Web服务开发的全过程,包括服务器端和客户端的开发实践。本文将深入剖析Axis1.4在Java Web服务中的应用,旨在帮助开发者更好地理解和掌握这一经典工具...
axis学习攻略,包含插件安装,文档学习,例子(2个项目架包一样,有一个例子的架包没加,加上就超出50MB了),保证能学好!axis2-1.4.1-bin.rar--axis2-1.4.1-war.rar 官网下
AXIS是Apache软件基金会的一个开源项目,专门用于创建、部署和管理Web服务。AXIS1是早期版本,但至今仍被一些遗留系统或对兼容性有特定需求的项目所使用。 在Java世界中,Web服务是通过SOAP(简单对象访问协议)...
在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而Axis和Axis2是两种流行的Java SOAP(简单对象访问协议)框架,用于构建和消费Web服务。本文将深入探讨这两个API,以及它们在Web服务开发中的作用。 ...
Axis2 是另一种新一代的 WebService 平台,它的开发者太急于推出 1.0 版本,所以 1.0 还不是一个稳定的版本。Axis2 的开发方式类似一个小型的应用服务器,Axis2 的开发包要以 WAR 的形式部署到 Servlet 容器中。Axis...
Axis是Apache组织开发的一款开源Web服务框架,主要用于构建和部署SOAP(Simple Object Access Protocol)服务。Axis分为两个主要版本:Axis1.x和Axis2.x,它们都是Java平台上的Web服务实现,但在设计和功能上有所...
Axis是一个流行的开源SOAP(Simple Object Access Protocol)库,它允许开发者在Java平台上构建和部署Web服务。本篇文章将带你逐步了解如何在Tomcat服务器上安装和配置Axis,以便开始你的Web服务开发之旅。 **第一...
**Axis2** 是一个高性能、灵活且可扩展的Web服务引擎,它是Apache SOAP项目的下一代产品。Axis2以其模块化设计和强大的消息处理能力而闻名,它支持多种协议,如HTTP、HTTPS、SMTP等,还支持SOAP 1.1、SOAP 1.2和...
AXIS的一个比较好的入门介绍
标题中的 "axis2.zip一系列相关jar包,全,全,全" 暗示了这个压缩包包含了一系列 Axis2 开发所需的完整组件。通常, Axis2 的核心库包括以下部分: 1. **axis2-kernel.jar**:这是 Axis2 的核心模块,包含了服务...
**Axis1** 是最初的版本,发布于2003年,它基于SOAP 1.1规范,提供了一个快速开发Web服务的框架。Axis1使用JavaBeans Activation Framework (JAF) 和JavaMail API来处理消息传递。其核心特性包括: 1. **SOAP支持**...
axis2-1.6.2.zip, windows axis2工具,根据 WSDL...在D:\Work_Program_Files\axis2-1.6.2\bin目录有一个wsdl2java.bat文件; 3、设置环境变量,加入AXIS2_HOME=<Axis2客户端安装目录>,path中追加;%AXIS2_HOME%\bin
Axis2是Apache软件基金会的一个开源项目,主要用于构建Web服务。"1.7.9"是该插件的版本号,表示这是一个特定的稳定版本。 描述中的"axis2-idea-plugin-1.7.9"进一步确认了这是Axis2的IDEA插件,版本号为1.7.9。通常...
### Axis与Axis2在WSDL2Java工具中的发布差异 #### 概述 ...这使得Axis2在现代Web服务开发中成为了一个更受欢迎的选择。开发者可以根据自己的具体需求选择最适合的工具来进行Web服务的构建和部署。
Apache Axis 是一个开源的Web服务框架,主要用于实现SOAP(简单对象访问协议)协议。它使得开发和部署基于Java的Web服务变得更为简便。标题“axis1.4完整包下载”表明我们关注的是Apache Axis的1.4版本,这是一个较...
Axis2 是一个开源的 Web 服务引擎,由 Apache 软件基金会维护。它提供了一个灵活、可扩展、性能高效的 Web 服务解决方案。Eclipse 是一个流行的集成开发环境(IDE),Axis2 插件安装可以使得开发者更方便地使用 Axis...
Axis2是Apache软件基金会开发的一个开源Web服务引擎,它提供了基于SOAP(Simple Object Access Protocol)的Web服务实现。本文将详细介绍Axis2的API及其在Web服务开发中的应用,同时也会探讨Axis2的帮助文档如何协助...
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工程,其中包括创建一个Web服务,该服务能接收两个数字并返回它们的和。Axis是一个流行的Java Web服务框架,它允许开发者轻松地实现跨平台和跨语言的互操作...