1 介绍
本文并不是想介绍Web服务的原理、系统架构等,我们假设您已经了解了关于Web服务的一些基本的概念、原理等知识。本文主要是针对那些已经了解Web服务概念,但是还没有亲身体会Web服务所带来令人欢欣鼓舞的特征的开发人员。在此我们认为你已经具备了Java、XML等基础知识,如果你还有其他开发环境的经验例如VB、VC那是再好不过的了。
1.1 Web服务
虽然我们并不想详细讲述Web服务的体系结构,但是大概的介绍一下还是有必要的。Web服务是一种新型的Web应用程序。不同于其他Web应用程序,它是自适应、自我描述、模块化的应用程序,并可以跨越Web进行发布、定位以及调用。简单的Web服务可以提供例如天气预报或者航班信息的服务。一旦部署了Web服务,其他的应用程序就可以发现和调用所部署的服务。
1.2 AXIS项目
Axis框架来自 Apache 开放源代码组织,它是基于JAVA语言的最新的 SOAP 规范(SOAP 1.2)和 SOAP with Attachments 规范(来自 Apache Group )的开放源代码实现。有很多流行的开发工具都使用AXIS作为其实现支持Web服务的功能,例如JBuilder以及著名的Eclipse J2EE插件Lomboz。AXIS的最新版本是1.1,可以从http://ws.apache.org/axis/index.html下载。下图是AXIS核心引擎的体系结构图:
整个AXIS项目包括以下几个部分:
1. 消息流子系统
消息流子系统提供了灵活的消息传递框架,这个消息传递框架包括处理程序、链、序列化程序和反序列化程序。处理程序是一个处理请求、响应和故障流的对象。处理程序可被组合在一起成为链,而且可以使用一个灵活的部署描述符来配置这些处理程序的顺序。
2. 传输框架子系统
提供了一个传输框架,这个传输框架可以帮助您创建自己的可插式传输发送器和传输侦听器。
3. 数据编码子系统
AXIS完全按照 XML Schema 规范提供各种数据类型的自动序列化,并且提供功能扩展接口来使用您自己定制的序列化器和反序列化器。
4. 其他
AXIS完全支持 WSDL 以及日志记录、出错以及故障处理机制。它同时提供一些工具用来讲WSDL文档转换成客户端的调用框架以及根据类来产生WSDL定义文档。
AXIS目前版本支持的标准是:W3C SOAP 1.1 和 1.2;WSDL 1.1;SAAJ 1.1(SUN公司:SOAP with Attachments API for Java);JAX-RPC(SUN公司:Java API for XML-Based RPC)1.0。
2 Axis使用
2.1 Axis运行需要哪些jar文件
对Axis解包后,将axis-1_1/webapps/axis/WEB-INF/lib/目录下的jar文件复制到/usr/local/apache/htdocs/WEB-INF/lib目录下(Web应用程序的目录)。应包括以下jar文件。
axis-ant.jar
axis.jar
commons-discovery.jar
commons-logging.jar
jaxrpc.jar
log4j-1.2.8.jar
saaj.jar
wsdl4j.jar
2.2 Axis使用注意事项
2.2.1 获取WSDL文件
Axis支持用户通过网络方式,从已发布WEB服务的机器上获取WEB服务描述文件WSDL。用户只需简单在IE地址栏输入如下格式访问链接即可:
http://webappIp[/webapp]/services/WebServiceName?wsdl
其中:
webAppIp:运行WEB服务机器的地址。
[/webapp]:运行Axis WEB服务的Web应用名;如果应用使用跟目录,则不需要
services/WebServiceName:WEB服务定位路径,类似Servlet路径;其中WebServiceName为定义的Web服务接口名称。
用户将访问获的文件直接保存,即可获取对应WEB服务的WSDL描述文件。
2.2.2 参数类型定义(输入、输出参数)
如果用户希望使用函数定义中的输出参数获取响应结果时,自动生成的WSDL文件无法满足,必须手动对自动生成的WSDL文件进行修改。
如定义java Interface接口如下:
int queryUser(long type,User[] users) ;
则使用java2WSDL生成的WSDL如下:
为了将User[]作为输出参数,必须修改自动生成的WSDL文件,在QueryUserResponse返回消息中,添加User[]参数定义,告知Axis在WSDL2java处理中,将User[]作为输入/输出参数处理。
2.2.3 server-config.wsdd
Axis会在WEB应用程序的WEB-INF/目录下自动生成一个名字为server-config.wsdd的xml文件,其中记录了已部署的WEB服务。每部署一个新的WEB服务时,Axis都会将新服务的描述信息加入到server-config.wsdd中。
如果需要在Web服务器启动时,自动加载WEB服务,只需将server-config.wsdd与WEB应用描述文件web.xml一并放置在WEB-INF目录下即可。
server-config.wsdd中的内容可以手工更改获取,也可通过发布获取自动生成的文件。
a) 将WEB服务发布后,从WEB应用的WEB-INF目录下,获取自动生成的server-config.wsdd文件。
b) 手工更改时,将deploy.wsdd文件中的…中的内容直接拷贝,粘贴到原始server-config.wsdd文件中单独行即可。
2.2.4 如何将Axis集成到自己的Web应用中。
Axis是以Servlet的方式运行的,而Tomcat的作用相当于Servlets容器(Container),因此只要配置得当,就可以使Axis在Tomcat环境中运行,这一点也适用于Tomcat以外的其它应用服务器。在Tomcat中配置Axis的方法如下。
将axis-1_1/webapps/axis/WEB-INF/web.xml中的Servlet配置项复制到自己Web应用描述文件web.xml中对应位置上。
2.2.5 Axis提供了哪些开发工具
Apache Axis提供了WSDL2Java和Java2WSDL两个开发工具。
WSDL2Java利用已知的WSDL文件生成服务端和客户端代码。该WSDL文件可以是由合作伙伴提供的,也可以是利用Java2WSDL生成的。Java2WSDL根据已有的Java类文件生成WSDL文件,Java类文件可以是接口类文件,并不需要实现细节。
此外Axis还提供了SoapMonitorApplet和TCPMon工具,可用于监测Web服务。
1 如何开发Web服务的服务端和客户端代码
1.1 生成或取得WSDL文件
Java2WSDL是Axis提供的利用Java类文件得到WSDL文件的工具。类文件可以使用接口文件编译生成。
生成WSDL文件以后,就可以利用Axis提供的WSDL2Java工具生成Web服务的服务端代码和客户端代码了
注意事项 :
WSDL文件也可以由合作伙伴提供。这种情况下合作伙伴往往是Web服务的提供者或标准接口的制定者,开发者只要按照既定的WSDL文从件生成客户端或服务端代码就可以了。
1.2 开发客户端
在开发客户端时,WEB接口定义文件WSDL一般已经提供,或者可以通过Internat获取。如果未提供一般也提供了接口描述文档,详细描述了接口输入、输出参数定义,据此我们可以声明Interface接口,通过Aixs提供的java2WSDL生成WSDL文件。
下面我们假定WSDL文件已经提供;并且我们假定读者对eclipse、ant已经有一定了解。
WSDL2Java工具用于从WSDL文件生成客户端存根(stub)代码,服务端框架(skeleton)代码以及WSDL中的数据类型文件(生成与之对应的Java代码)。开发人员只需向框架代码中补充相关的业务逻辑代码即可得到完整的Web服务代码,因此该工具极大地减轻了开发人员的编码负担。
axis_ant.jar包中已经定义了Axis集成Ant的相关Ant任务定义。任务定义在axis-tasks.properties中
#properties file for taskdefing the public Axis taskdefs
axis-wsdl2java=org.apache.axis.tools.ant.wsdl.Wsdl2javaAntTask
axis-java2wsdl=org.apache.axis.tools.ant.wsdl.Java2WsdlAntTask
axis-admin=org.apache.axis.tools.ant.axis.AdminClientTask
Ant任务名=对应Axis提供的工具
备注
axis-wsdl2java
WSDL2java
axis-java2wsdl
Java2WSDL
axis-admin
AdminClient
1. 假定应用工程目录结构如下:
│ build.properties
│ build.xml
│ myAxis.wsdl
├─bin
└─src
2. build.properties文件内容如下:
axis.home = D:\\java\\axis\\axis-1_2beta
wsdl.file = myAxis.wsdl
namespace.service = urn:MyAxis
package.service = com.MyAxis.client
3. Ant文件build.xml内容如下:
定义Axis包所在类路径-->
从axis-ant.jar包中,引入Axis的Ant任务定义-->
classpathref="axis.classpath" />
依据WSDL文件,生成客户端代码-->
url="${basedir}/${wsdl.file}"
deployscope="Request"
output="${generated.path.src}"
serverside="false"
skeletondeploy="false"
testcase="true"
noimports="false"
>
1.1 开发服务端
开发服务端程序的一般步骤如下:
l 根据接口定义,定义java Interface接口。
l 根据interface接口文件,使用java2WSDL生成WEB服务描述文件
l 根据WSDL文件,使用WSDL2java生成对应的服务端代码
l 修改自动生成的实现代码类[webapp]SoapBindingImpl.java,完成接口具体操作。
l 考虑到WEB服务为系统对外门户,具体业务逻辑可能分模块实现,建议考虑参考门面模式完成interface定义;在服务端具体实现时,WEB服务接口部分向逻辑提供接口,由逻辑实现组件完成具体的逻辑操作。WEB服务部分仅完成SOAP协议解封装等工作。
1. 假定工程路径如下:
├─conf
├─generated
├─source
├─src
└─WebRoot
├─META-INF
└─WEB-INF
└─lib
2. build.properties Ant脚本使用属性
wsdl.file = myAxis.wsdl
########接口文件com.myaxis.MyAxis.java;供java2WSDL使用#####
wsi.interface = com.myaxis.MyAxis
location = http://localhost/CmsWsi/services/CmsWsi
########期望生成的接口定义包与命名空间对应关系;供WSDL2java使用###
namespace.service = http://com./ myaxis.MyAxis/1.00
package.service = com.myaxis.server
########期望生成的接口相关消息类与命名空间对应关系;供WSDL2java使用###
namespace.service.msg = http://com.myaxis.msg/
package.service.msg = com.myaxis.server.msg
########WEB容器定义,共AdminClient发布、注销WEB服务使用###
target.port = 80
target.server = localhost
target.appname = MyAxis
servletpath.admin = services/AdminService
########在ANT脚本中采用命令行方式时,发布调用的AdminClient位置##
location.admin = http://localhost/MyAxis/services/AdminService
3. build.xml
<!--加载build.propertis定义-->
<!--容器下的类路径,Axis相关jar已拷贝到对应目录下-->
<!--引入Axis的Ant任务定义-->
<classpathref="axis.classpath" />
<!--初试化,构造WSDL2java生成代码路径,-->
<!--依据java Interface定义,生成WSDL定义文件-->
location="${location}"
namespace="${namespace.service}"
output="${generated.path}/${wsdl.file}"
style="RPC"
>
根据WSDL文件,生成WEB服务的服务器端源码;考虑到接口更改,版本管理的方便,生成代码不直接导向src目录;第一次运行后,需要手工将代码拷贝到src;每次修改接口后,必须清空生成源目录,通过比较工具修改src目录下的源文件,否则Axis判断[webapp]SoapBindingImpl.java已存在不会进行更新。-->
url="${basedir}/${wsdl.file}"
deployscope="Request"
output="${generated.path.src}"
serverside="true"
skeletondeploy="false"
testcase="true"
noimports="false"
>
拷贝Web服务发布、注销脚本,deploy.wsdd和undeploy.wsdd-->
发布WEB服务到WEB容器,Axis在WEB-INF/下自动生成server-config.wsdd-->
脚本方式发布服务-->
命令行方式发布服务-->
分享到:
相关推荐
本篇文章将深入探讨如何使用Axis开发Web服务,并详细解释相关jar包的作用。 首先,让我们了解Web服务的基本概念。Web服务是一种通过互联网进行通信的应用程序,遵循W3C制定的SOAP(Simple Object Access Protocol)...
访问地址: http://127.0.0.1:8080/axis/services
在本文中,我们将深入探讨如何使用SpringBoot框架开发基于Axis的Web服务。SpringBoot以其便捷的启动和配置方式,已经成为Java开发中的首选框架之一。而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供...
标题 "axis 开发webservice经典入门例子" 指向的是使用Apache Axis工具来创建和使用Web服务的基本教程。Apache Axis是开源的Java框架,它允许开发者轻松地在Java应用程序中构建和部署Web服务。本教程可能是为了帮助...
标题中的“axis2webservice接口例子”指的是使用Apache Axis2框架创建的一个Web服务接口实例。Apache Axis2是Java平台上的一款强大的Web服务开发工具,它提供了高效、灵活且可扩展的环境来构建和部署Web服务。这个...
标题中的“axis开发webservice客户端”指的是使用Apache Axis框架创建并使用Web服务客户端的过程。Apache Axis是Java平台上的一个开源工具,它简化了SOAP(Simple Object Access Protocol)Web服务的开发,包括...
使用Axis开发WebService有两种主要方式:DII(Dynamic Invocation Interface)和Stubs。其中,DII方式更为灵活,适用于动态生成WebService接口的情况。 1. **编写Java类**:创建一个简单的Java类,例如`HelloWorld`...
eclipse axis webservice 开发 eclipse下使用axis2 开发webservice系统
使用 Axis 和 Eclipse 开发 Web Service,可以简化开发流程,提高效率。Axis 是 Apache 维护的开源工具,它提供了生成服务端和客户端代码的能力,而 Eclipse 则提供了一个集成的开发环境,方便创建、调试和部署 Web ...
Axis2 WebService是一个开源的、基于Java的Web服务框架,由Apache软件基金会开发。它提供了构建和部署Web服务以及处理SOAP消息的强大工具。这个源码包可能是为了帮助开发者深入理解Axis2的工作原理,或者用于自定义...
本文将详细介绍如何利用Axis开发Web服务,并探讨其使用的jar包。 首先,我们要理解Axis的核心功能。Axis提供了一套完整的Java API,使得开发者能够方便地构建Web服务客户端和服务器端。它支持SOAP(简单对象访问...
标题中的“axis发布webservice的步骤”涉及到的是在Java环境中使用Apache Axis库创建并部署Web服务的过程。Apache Axis是开源的Web服务工具包,它允许开发者通过简单的API将Java类暴露为Web服务,或者调用远程Web...
本文档主要介绍了如何使用Eclipse和AXIS框架开发和发布Web服务,以及进行客户端测试。以下是详细步骤和关键知识点: 1. **Eclipse插件安装**: - Eclipse提供了Web服务开发的插件,可以从官方网站下载WTP(Web ...
Axis2开发webservice总结,资源一般,希望对大家有用
【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...
4. **部署和发布服务**:如果我们要在Spring中发布一个Web服务,可以使用Axis2的`SpringServiceDeployer`。这需要将服务类和相关的配置文件打包成一个Axis2模块(.aar文件),然后部署到Axis2服务器上。 5. **测试...
本文将深入探讨如何利用Axis开发WebService,以及相关的技术要点。 首先,了解WebService的基础概念是至关重要的。WebService是一种基于开放标准(如XML、WSDL和SOAP)的互联网应用程序,它能够跨平台、跨语言地...