一、
Axis
简介
<!---->
<o:p>
</o:p>
什么是SOAP?<o:p></o:p>
SOAP
是一个应用程序间的基于XML的通信工具和规范。SOAP最初由MicroSoft和Userland公司开发,已经演化了好几个版本,当前的版本SOAP1.1正飞速发展。W3C的XML协议工作组正努力把它发展为一个真正的开发的标准。SOAP1.2草案已经发布,它能澄清 1.1版规范的容易混淆的地方。<o:p></o:p>
SOAP
被广泛作为新一代跨平台、跨语言分布计算Web Services的重要部分。
什么是Axis?<o:p></o:p>
Axis
(Apache eXtensible Interaction System)是一款开源的WebService运行引擎,它是SOAP协议的一个实现,其本身来源于Apache的另一个项目Apache SOAP。 Axis分为1.x系列和Axis 2系列,两个系列体系结构和使用上有较大的区别,相对而言,Axis1.x更加稳定,文档也比较齐全,因此本文内容以Axis 1.x系列最新版本1.4为基础,Axis有C++和Java两个版本的实现,本文描述Java版的Axis。<o:p></o:p>
<o:p> </o:p>
Axis
总体上是一个SOAP引擎。但又不仅仅是个引擎。它还:<o:p></o:p>
(1)是一个简单的独立的SOAP服务器。<o:p></o:p>
(2)是一个可插入到servlet引擎(如Tomcat)中的服务。<o:p></o:p>
(3)对WSDL的扩展支持。<o:p></o:p>
(4)能将WSDL描述产生JAVA文件/类的工具。 <o:p></o:p>
(5)包括一些例子程序。<o:p></o:p>
(6)包括一个可以监控TCP/IP包的工具。
Axis起源于IBM的SOAP4J,属于最早的一批用于构造基于SOAP应用的Framework。是Apache SOAP的第三代产品,,其核心是一个SOAP处理器,用于开发包括客户端,服务器端,SOAP Gateway等各种应用。相对于以前的版本,它有如下特性:<o:p></o:p>
(1)快速,使用基于事件的SAX解析机制而不是DOM来处理XML请求。<o:p></o:p>
(2)灵活,用户可以灵活定制扩展。<o:p></o:p>
(3)稳定,接口将会变动很小。<o:p></o:p>
(4)基于组件开发。<o:p></o:p>
(5)Transport 框架 - Axis的核心和底层的transport完全分离,也就是说不管WS的Transport是HTTP, FTP, MAIL,MESSAGE QUEUE,只要插入对应的Transport模块即可,而不需改动其他部分。<o:p></o:p>
(
6
)支持
WSDL1.1
,可自动由
Java Object
生成
WSDL
。
<o:p> </o:p>
在目前发行1.1版本中有什么东西?
(1)SOAP1.1/1.2引擎。
(2)灵活的配置和部署系统。
(3)支持及时自动生成SOAP服务(JWS)。
(4)支持所有的基本数据类型,为自定义串行操作提供类型映射系统。
(5)JavaBean的自动串行操作,包括将自定义属性类型映射到XML的属性和元素。
(6)RPC和基于消息的SOAP服务提供者。
(7)从部署好的服务自动生成WSDL。
(8)WSDL2Java工具可以从WSDL描述文件中产生相应的客户和服务器端SOAP操作框架。
(9)初步提供安全扩展,能够与Servlet2.2安全集成。
(10)通过HTTP Cookie和与传输无关的SOAP头信息提供会话跟踪。
(11)初步支持带附件的SOAP消息。
(12)在EJB方面提供把EJB作为Web服务的访问途经。
(13)基于Servlet的HTTP传输。
(14)基于JMS的传输。
(15)独立的服务器(但需要HTTP 服务器和Servlet容器支持)。
(16)提供客户端、服务器端相关应用程序的样例。<o:p></o:p>
Axis
的运行需要如下组件包:
<o:p>
</o:p>
-
SAAJ API( javax.xml.soap.SOAPMessage ) saaj.jar<o:p></o:p>
-
JAX-RPC API( javax.xml.rpc.Service ) jaxrpc.jar<o:p></o:p>
-
Apache-Axis( org.apache.axis.transport.http.AxisServlet ) axis.jar<o:p></o:p>
-
Jakarta-Commons Discovery(org.apache.commons.discovery.Resource) commons-discovery.jar<o:p></o:p>
-
Jakarta-Commons Logging(org.apache.commons.logging.Log) commons-logging-api.jar<o:p></o:p>
-
Log4j(org.apache.log4j.Layout)log4j.jar<o:p></o:p>
-
IBM's WSDL4Java(com.ibm.wsdl.factory.WSDLFactoryImpl) wsdl4j.jar<o:p></o:p>
-
下面非必须:<o:p></o:p>
-
JAXP implementation[
Processing XML with Java
](javax.xml.parsers.SAXParserFactory )
<o:p>
</o:p>
-
Activation API(javax.activation.DataHandler ) activation.jar
<o:p>
</o:p>
<o:p> </o:p>
二、Axis的安装<o:p></o:p>
应用Axis开发Web Services,你需要安装如下软件:<o:p></o:p>
1.JDK<o:p></o:p>
2.
一个支持Servlet的服务器引擎,比如:Tomcat。<o:p></o:p>
当安装好Tomcat之后,只需将下载的Axis软件包解压缩,将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下即可。<o:p></o:p>
<o:p> </o:p>
三、Axis的测试<o:p></o:p>
安装配置完毕后,应测试一下是否Axis可以正确运行了。<o:p></o:p>
启动Tomcat服务器,在浏览器中访问http://localhost:8080/axis/happyaxis.jsp,如果页面显示有错误,则需要回头检查一下相关配置是否正确,如果浏览页面能正确显示出系统组件、属性等参数配置信息,则表示安装成功。现在可以开始开发你的Web Services应用了。<o:p></o:p>
<o:p> </o:p>
四、服务的发布<o:p></o:p>
<o:p> </o:p>
Axis
提供了两种服务发布方式,<o:p></o:p>
一种是:即时发布(Instant Deployment),<o:p></o:p>
一种是:定制发布(Custom Deployment)。<o:p></o:p>
1.
使用即时发布 Java Web Service(JWS)<o:p></o:p>
对即时发布的支持是Axis的特色之一,使用即时发布使用户只需有提供服务的Java类的源代码,即可将其迅速发布成Web服务。每当用户调用这类服务的时候,Axis会自动进行编译,即使服务器重启了也不必对其做任何处理,使用非常简单快捷。<o:p></o:p>
使用即时发布首先需要一个实现服务功能的Java源文件,将其扩展名改为.jws(Java Web Service的缩写),然后将该文件放到“……\webapps\axis”(只能放在axis根目录)目录下即可。<o:p></o:p>
在此给出一个从英里到公里的长度单位转换的服务,其源码如下:<o:p></o:p>
文件Distance.jws<o:p></o:p>
public class Distance<o:p></o:p>
{<o:p></o:p>
public double convertMile2Kilometre( double mile )<o:p></o:p>
{ <o:p></o:p>
return mile * 1.609; //
实现英里到公里的距离转换<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
将其放到“……\webapps\axis”<o:p></o:p>
目录,通过访问http://localhost:8080/axis/Distance.jws?wsdl<o:p></o:p>
可以看到这个服务的WSDL描述文件,这说明Distance服务被成功发布了。<o:p></o:p>
编译后的文件:
在axis\WEB-INF\jwsClasses\Distance.class,访问<o:p></o:p>
http://localhost:8080/axis/Distance.jws?method=convertMile2Kilometre&mile=1000
可以看到执行结果。<o:p></o:p>
需要注意的是:
JWS
的
web
服务发布是一个很简单的
Web
服务发布方式,在页面中你不能使用包,而且由于代码是在运行期被编译的,所以在部署之后,你也很难找到错误所在。
<o:p> </o:p>
2.
使用定制发布 Web Service Deployment Descriptor(WSDD)<o:p></o:p>
<o:p> </o:p>
即时发布是一项令人激动的技术,它使Web服务的开发变得如此简单;然而即时发布并不总是最好的选择,比如有些应用系统是第三方提供的,我们没有购买源代码,只有.class文件,但我们又希望将这个应用系统的一些功能对外发布成Web服务,使其能够在更大范围内产生作用,这个时候即时发布技术就无能为力了。此外,即时发布技术并不灵活,无法进行更多的服务配置,这使得它并不能满足一些特定系统的需求。<o:p></o:p>
因此,Axis提供了另一种服务发布方式,这就是定制发布。<o:p></o:p>
在此给出一个从加仑到升的容积单位转换的服务,其源码如下:<o:p></o:p>
文件Capacity.java<o:p></o:p>
package test.capacity;<o:p></o:p>
public class Capacity<o:p></o:p>
{<o:p></o:p>
public double convertGallon2Litre( double gallon )<o:p></o:p>
{<o:p></o:p>
return gallon * 4.546;//
实现加仑到升的容积转换<o:p></o:p>
}//convertGallon2Litre()<o:p></o:p>
} <o:p></o:p>
将其编译成.class文件,放置到“……<o:p></o:p>
\webapps\axis\WEB-INF\classes\test\capacity
”目录下,即可着手进行发布。<o:p></o:p>
定制发布不需要构建.jws文件,但必须创建服务发布描述文件deploy.wsdd(Web Service Deployment Descriptor的缩写),这个文件负责描述服务的名称、入口等信息,其内容如下:<o:p></o:p>
文件deploy.wsdd<o:p></o:p>
<deployment <o:p></o:p>
xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"><o:p></o:p>
<service name="Capacity" provider="java:RPC"><o:p></o:p>
<parameter name="className" value="test.capacity.Capacity"/><o:p></o:p>
<parameter name="allowedMethods" value="*"/><o:p></o:p>
</service><o:p></o:p>
</deployment>
<o:p>
</o:p>
<o:p> </o:p>
在这里服务的提供者是“java:RPC”,它被内建在Axis中,而且指明了一个JAVA RPC服务,做这个处理的类是org.apache.axis.providers.java.RPCProvider。<o:p></o:p>
我们是通过一个<parameter>标签告诉RPC服务应该调用的类,而另外一个<parameter>标签则告诉引擎,它可以调用这个类中的任何的Public方法。你也可以指定通过使用名字空间或者一些可以调用的方法列表,来指明那些方法可以被调用。<o:p></o:p>
<o:p> </o:p>
将该文件也放到“……\webapps\axis\WEB-INF\classes\test\capacity”目录下,然后可以采用Axis提供的一个客户端管理工具——AdminClient来完成服务的定制发布。<o:p></o:p>
在“……\webapps\axis\test\capacity”目录下,运行:<o:p></o:p>
<o:p> </o:p>
set axis_lib=C:\apache-tomcat-5.5.17\webapps\axis\WEB-INF\lib<o:p></o:p>
set axis_path=%axis_lib%\axis.jar;%axis_lib%\commons-discovery.jar;%axis_lib%\jaxrpc.jar;%axis_lib%\commons-logging.jar;%axis_lib%\log4j.jar;%axis_lib%\wsdl4j.jar;%axis_lib%\saaj.jar<o:p></o:p>
<o:p>
</o:p>
java -classpath %axis_path% org.apache.axis.client.AdminClient deploy.wsdd<o:p></o:p>
java -cp %axis_path% org.apache.axis.client.AdminClient list
<o:p>
</o:p>
<o:p>
</o:p>
<o:p> </o:p>
如果运行时说没有找到类,那么可能是类路径没有配置好,建议将所有的与axis相关的jar都写到classpath中去。这样只要运行:<o:p></o:p>
<o:p> </o:p>
java org.apache.axis.client.AdminClient deploy.wsdd<o:p></o:p>
可以看到以下运行结果:<o:p></o:p>
<o:p> </o:p>
Processing file deploy.wsdd<o:p></o:p>
<Admin>Doneprocessing</Admin><o:p></o:p>
<o:p> </o:p>
这表明Capacity服务定制发布完成。<o:p></o:p>
<o:p> </o:p>
发布完成会增加或更新WEB-INF\server-config.wsdd的文件或内容。<o:p></o:p>
<o:p> </o:p>
<!-- handler --><o:p></o:p>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder" /><o:p></o:p>
<handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper" /><o:p></o:p>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" /><o:p></o:p>
<o:p>
</o:p>
<!--
系统服务
<o:p>
</o:p>
<service name="AdminService" provider="java:MSG"><o:p></o:p>
<parameter name="allowedMethods" value="AdminService" /><o:p></o:p>
<parameter name="enableRemoteAdmin" value="false" /><o:p></o:p>
<parameter name="className" value="org.apache.axis.utils.Admin" /><o:p></o:p>
<namespace>http://xml.apache.org/axis/wsdd/</namespace><o:p></o:p>
</service><o:p></o:p>
<service name="Version" provider="java:RPC"><o:p></o:p>
<parameter name="allowedMethods" value="getVersion" /><o:p></o:p>
<parameter name="className" value="org.apache.axis.Version" /><o:p></o:p>
</service> <o:p></o:p>
--><o:p></o:p>
<!--
自定义服务
--><o:p></o:p>
<service name="Capacity" provider="java:RPC"><o:p></o:p>
<parameter name="allowedMethods" value="*" /><o:p></o:p>
<parameter name="className" value="test.capacity.Capacity" /><o:p></o:p>
</service><o:p></o:p>
<o:p>
</o:p>
<!-- transport to handler --><o:p></o:p>
<transport name="http"><o:p></o:p>
<requestFlow><o:p></o:p>
<handler type="URLMapper" /><o:p></o:p>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" /><o:p></o:p>
</requestFlow><o:p></o:p>
<parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler" /><o:p></o:p>
<parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" /><o:p></o:p>
<parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler" /><o:p></o:p>
<parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler" /><o:p></o:p>
<parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler" /><o:p></o:p>
<parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler" /><o:p></o:p>
</transport> <o:p></o:p>
<transport name="local"><o:p></o:p>
<responseFlow><o:p></o:p>
<handler type="LocalResponder" /><o:p></o:p>
</responseFlow><o:p></o:p>
</transport><o:p></o:p>
<o:p>
</o:p>
你也可以调用:<o:p></o:p>
undeploy.wsdd
文件:<o:p></o:p>
<undeployment <o:p></o:p>
xmlns="http://xml.apache.org/axis/wsdd/"<o:p></o:p>
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"><o:p></o:p>
<service name="Capacity"/><o:p></o:p>
</undeployment><o:p></o:p>
<o:p> </o:p>
java org.apache.axis.client.AdminClient undeploy.wsdd
来取消部署。<o:p></o:p>
<o:p> </o:p>
你也可以调用:<o:p></o:p>
java org.apache.axis.client.AdminClient list
来获得所有的已经部署的服务的列表。在这里你会看到services, handlers, transports等等,注意这个调用只是列出了WEB-INF\server-config.wsdd的文件内容。<o:p></o:p>
<o:p> </o:p>
一定要注意:编译后的class文件要拷贝到web-inf/classes的目录中,如果该文件中有包存在的话,别忘了还要在classes目录下创建包的目录。<o:p></o:p>
通过访问http://localhost:8080/axis/services/Capacity?wsdl可以看到这个服务的WSDL描述文件,这说明Capacity服务被成功发布了。<o:p></o:p>
你也可以通过访问http://localhost:8080/axis/servlet/AxisServlet查看所有定制发布的服务。<o:p></o:p>
访问:<o:p></o:p>
http://localhost:8080/axis/services/Capacity?method=convertGallon2Litre&gallon=100
可以看到执行结果。<o:p></o:p>
<o:p> </o:p>
Web.xml<o:p></o:p>
<servlet><o:p></o:p>
<servlet-name>AxisServlet</servlet-name><o:p></o:p>
分享到:
相关推荐
WebService——AXIS详解 在IT领域,WebService是一种基于标准的、平台无关的、可以在不同系统之间交换数据的方式。...学习和掌握AXIS不仅可以提升开发效率,也是现代企业级应用开发的重要技能之一。
而"Axis1[1].4+开发指南_V1.0.pdf"则可能详细介绍了Axis1.4版本的使用,包括设置开发环境,创建和发布服务,调用远程服务,以及处理异常和安全问题。 在深入学习这两个框架时,开发者应理解它们的原理,熟悉配置和...
WebService-Axis2 详细讲解 WebService是一种基于XML的开放标准,用于在不同的应用程序之间进行通信。它允许不同系统之间的数据交换,打破了平台和语言的界限。Axis2是Apache软件基金会开发的一个高性能、灵活且可...
【Java Axis2 WebService开发详解】 在Java世界中,开发Web服务经常会选择使用Apache Axis2框架,它是一个高效且灵活的Web服务引擎,允许开发者轻松地创建和部署Web服务。本篇文章将详细介绍如何使用Java和Axis2来...
Apache Axis是Java社区中最常用的Web服务工具之一,它提供了用于生成和部署Web服务的框架。 在Java中,Web服务通常通过SOAP(Simple Object Access Protocol)协议进行通信,这是一种XML(eXtensible Markup ...
在本文中,我们将深入探讨如何使用SpringBoot框架开发基于Axis的Web服务。SpringBoot以其便捷的启动和配置方式,已经成为Java开发中的首选框架之一。而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供...
在本场景中,"webservice-client-call axis" 指的是使用Axis库来调用Web服务客户端。Axis是Apache软件基金会开发的一个开源项目,主要用于创建和部署Web服务以及作为客户端来调用Web服务。 1. **Axis简介**:Axis是...
标题“Java-tomcat-axis2开发webservice返回json数据”涉及的是使用Java、Tomcat服务器以及Axis2框架来创建Web服务,并返回JSON格式的数据。这是一个常见的技术组合,用于构建RESTful API或者提供服务化接口。下面...
Java Axis Web服务示例(`[JAVA]-Axis-Webservice-Demo`)提供了发布和调用Web服务的实际操作步骤。通过学习和实践这个示例,开发者可以更好地掌握使用Axis创建Web服务的技术,理解Web服务的基本原理,以及如何通过...
Axis2 WebService 开发指南 Axis2 是一个基于 Java 的开源 WebService 框架,具有高效、灵活、可扩展等特点。以下是对 Axis2 WebService 开发指南的知识点总结: 1. 环境准备: Axis2 的开发需要下载相关的 jar ...
WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2 WebService大讲堂之Axis2
【WebService - AXIS工程】是一个基于Java的Web服务开发框架,它允许开发者创建、部署和消费Web服务。在本文中,我们将深入探讨WebService和AXIS的相关知识点,并结合标签"源码"和"工具"来理解其核心概念和使用方法...
本资源集合了Axis进行Webservice开发所需的jar包,解决了开发者寻找这些依赖库的困扰。接下来,我们将详细讨论Axis、相关jar包以及它们在Web服务开发中的作用。 1. **Apache Axis**: Apache Axis是Apache软件基金会...
### 部署WebService(eclipse-axis2)的关键步骤与实践 #### 一、概述 部署WebService涉及使用Eclipse集成开发环境结合Axis2框架来搭建Web服务。本文将详细介绍如何使用Eclipse 3.5.0 和 Axis2-1.3 版本进行...
标题"webservice-axis2"暗示了本压缩包主要涉及的是使用Apache Axis2来开发和部署Web服务的内容。Apache Axis2是Axis1的升级版,其设计目标是提高性能、增强可扩展性和提供更好的模块化结构。它是Apache SOAP...
【WebService-axis demo】是一个关于如何使用Axis框架创建和运行Web服务的示例项目。这个小Demo旨在帮助开发者理解并实践基于Axis的WebService开发过程。在本文中,我们将深入探讨WebService和Axis的相关概念,并...
在标题“webservice-axis1”中,我们关注的是与Axis1相关的Web服务开发。在描述中提到的"需要的jar包",这是构建和运行基于Axis1的Web服务所必需的库文件。以下是压缩包中包含的三个关键jar文件: 1. **axis.jar**...