标签:soap web service webservice axis
本文档的所有源码:http://download.csdn.net/detail/feichenwangyalin/7911159
你可以根据将其中的SoapServer和SoapClient导入Eclipse,将axis放入tomcat的webapps中。
SOAP即简单对象访问协议,是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议。简单的说,SOAP也是web service的一种实现形式,是一个系统对外发布的一种服务,但其数据的交换形式是XML。
SOAP的三大重要的部件是:接口程序(即服务端代码)、WSDL(即web servicedescription language)、WSDD(web servicedeploy description),不是很清楚基本概念的读者可以先百度下这些基本概念。
实现webservice的形式的有多重多样,而SOAP也只是实现接口的其中一种形式。首先我们得明白,我们的系统为什么要对外发布接口,就拿电信软件来说吧,我们知道一个电信运行商需要支撑其各种业务需要各种系统,虽然都是一个运行商,但其内的各个系统并不一定是一个软件厂家开发,比如BOSS(运营支撑系统)有A公司开发,而彩铃业务系统有B公司开发,某营销系统有C公司开发,虽然这些系统同属一个公司,但很明显A公司的BOSS系统得源码是不可能对其他系统开放的,因此这些系统之间的交互就需要通过相互调用接口来实现,而这个接口各个系统发布的接口包括HTTP接口、SOAP接口等等。
Axis是对Java官方提供的Javawebservice的一种封装,axis最大的优点在于可以根据服务端提供的wsdl直接生成客户端代码,作为调用者可以透明地调用服务端接口,就如同服务器端接口在本地一样。
下面我们将做一个实验,开发一个简单的接口,并描述如何通过ant脚本构建项目,生成服务器端接口代码、wsdl、wsdd以及客户端用jar包,这几个就是我们在1.1中提过的SOAP应用程序的四个要素。
构建过程如下图所示:
下面给出最为重要的build.xml源码,这个构建过程是完全按照上图的构建顺序进行构建的,其中有注解,读者可以查阅理解:
<?xml version="1.0"?> <project name="SoapServer" basedir="."> <!-- 定义各种路径 --> <property name="srcDir" location="src" /> <property name="outputDir" location="output" /> <property name="classDir" location="output/classes" /> <property name="jarDir" location="output/lib" /> <property name="srcJarFile" location="${jarDir}/SoapServer.jar" /> <property name="java2wsdlDir" location="output/wsdl" /> <property name="genwsddDir" location="output/wsdd" /> <property name="wsdl2javaDir" location="output/java" /> <property name="wsdl2classDir" location="output/class" /> <property name="wsdl2jarFile" location="${jarDir}/SoapServer_axis.jar" /> <!-- 定义axis支持包 --> <property name="axisHome" location="lib" /> <property name="name" value="TestSoap" /> <property name="version" value="1.0" /> <property name="author" value="author:Martin" /> <!-- 指定axis classpath --> <path id="axis.classpath"> <fileset dir="${axisHome}"> <include name="**/*.jar" /> </fileset> </path> <taskdef resource="axis-tasks.properties" classpathref="axis.classpath" /> <!-- 一些基本信息--> <echo message="----------- ${name} ${version} [${author}] ------------" /> <!-- 文件目录初始化 --> <target name="init"> <delete dir="${outputDir}" /> <delete dir="${classDir}" /> <delete dir="${jarDir}" /> <delete dir="${java2wsdlDir}" /> <delete dir="${wsdl2javaDir}" /> <delete dir="${wsdl2classDir}" /> <delete dir="${genwsddDir}" /> <mkdir dir="${outputDir}" /> <mkdir dir="${classDir}" /> <mkdir dir="${jarDir}" /> <mkdir dir="${java2wsdlDir}" /> <mkdir dir="${genwsddDir}" /> <mkdir dir="${wsdl2javaDir}" /> <mkdir dir="${wsdl2classDir}" /> </target> <!-- 开始编译,生成classes文件 --> <target name="compile" depends="init"> <javac srcdir="${srcDir}" destdir="${classDir}" /> </target> <!-- 根据生成的classes, 打包生成jar --> <target name="makeJar" depends="init,compile"> <jar destfile="${srcJarFile}" basedir="${classDir}" /> </target> <!-- 生成wsdl --> <target name="buildJava2Wsdl"> <axis-java2wsdl classname="com.martin.intrefaces.SoapiSayHello" location="http://localhost:8080/axis/services/SoapiSayHello" namespace="http://intrefaces.martin.com" output="${java2wsdlDir}/SoapiSayHello.wsdl" style="RPC"> <classpath> <pathelement path="${classDir}" /> </classpath> </axis-java2wsdl> </target> <!-- 根据生成的wsdl生成对应的java代码以及wsdd文件 --> <target name="buildWsdl2Java"> <axis-wsdl2java all="true" url="${java2wsdlDir}\SoapiSayHello.wsdl" deployscope="Request" output="${wsdl2javaDir}" serverside="true" testcase="false" noimports="false" typemappingversion="1.2"> </axis-wsdl2java> <!-- 将生成的deploy.wsdd移动至指定位置,并重命名 --> <move tofile="${genwsddDir}/SoapiSayHello.wsdd" file="${wsdl2javaDir}/com/martin/intrefaces/deploy.wsdd"></move> </target> <!-- 将wsdl生成的Java代码编译打包 --> <target name="compileWsdl2Jar"> <!--编译成class文件 --> <javac srcdir="${wsdl2javaDir}" destdir="${wsdl2classDir}"> <!-- 编译时 引用axis的jar包 --> <classpath> <fileset dir="${axisHome}"> <include name="**/*.jar" /> </fileset> </classpath> </javac> <!--将class文件打包成jar --> <jar destfile="${wsdl2jarFile}" basedir="${wsdl2classDir}" /> </target> </project>
构建完毕后,我们来查看构建出来的产物,如下图所示:
classes文件夹:server端接口编译后的class文件;
java文件夹:根据wsdl生成的客户端用Java代码;
class文件夹:客户端代码编译后的class文件;
lib文件夹:SoapServer_axis.jar为客户端调用接口的接口包,该包用于放置在客户端工程的引用包下;
SoapServer.jar为服务器端用的接口实现包,改包用于放置在axis下lib包下;
wsdl和wsdd包:生成的wsdl和wsdd文件
注:本文提供的源码中已经做了如下步骤,你可以根据以下步骤来自己做测试
部署服务器端有两步:1 将对应的服务器端实现包放置在axis对应的lib下;
2 将生成的wsdd文件中的service节点的内容添加进axis的wsdd文件中,此时需要注意的是,需要手动将:
<parameter name="className"value="com.martin.intrefaces.SoapiSayHelloSoapBindingImpl"/>替换成:
<parameter name="className"value="com.martin.intrefaces.SoapiSayHello"/>
因为前者是axis生成时默认的类名,如果我们不是这么取名的,需要手动更改。
1、首先我们访问如下地址,来查看服务是否发布成功:
http://ip:port/axis/servlet/AxisServlet,如果服务列表中存在SoapiSayHello服务,说明我们的服务发布成功了。
2、我们将构建出的SoapServer_axis.jar放入SoapClient工程中,并添加引用。
3、运行CientTester.java测试接口能不能请求成功。如果输出:“调用SOAP接口:hello, 丁祥勇, 返回码为:000000 “,那么说明接口调用成功了。
标签:soap web service webservice axis
原文地址:http://blog.csdn.net/feichenwangyalin/article/details/39256157