如何使用axis构建SOAP应用程序

本文档的所有源码:http://download.csdn.net/detail/feichenwangyalin/7911159

你可以根据将其中的SoapServer和SoapClient导入Eclipse,将axis放入tomcat的webapps中。


1.基本概念


1.1 SOAP的概念


        SOAP即简单对象访问协议,是交换数据的一种协议规范,是一种轻量的、简单的、基于XML(标准通用标记语言下的一个子集)的协议。简单的说,SOAP也是web service的一种实现形式,是一个系统对外发布的一种服务,但其数据的交换形式是XML。

        SOAP的三大重要的部件是:接口程序(即服务端代码)、WSDL(即web servicedescription language)、WSDD(web servicedeploy description),不是很清楚基本概念的读者可以先百度下这些基本概念。


1.2 为什么要使用SOAP


        实现webservice的形式的有多重多样,而SOAP也只是实现接口的其中一种形式。首先我们得明白,我们的系统为什么要对外发布接口,就拿电信软件来说吧,我们知道一个电信运行商需要支撑其各种业务需要各种系统,虽然都是一个运行商,但其内的各个系统并不一定是一个软件厂家开发,比如BOSS(运营支撑系统)有A公司开发,而彩铃业务系统有B公司开发,某营销系统有C公司开发,虽然这些系统同属一个公司,但很明显A公司的BOSS系统得源码是不可能对其他系统开放的,因此这些系统之间的交互就需要通过相互调用接口来实现,而这个接口各个系统发布的接口包括HTTP接口、SOAP接口等等。

 

2.使用axis开发SOAP应用程序


2.1 axis简介


        Axis是对Java官方提供的Javawebservice的一种封装,axis最大的优点在于可以根据服务端提供的wsdl直接生成客户端代码,作为调用者可以透明地调用服务端接口,就如同服务器端接口在本地一样。

 

2.2 服务端接口开发


        下面我们将做一个实验,开发一个简单的接口,并描述如何通过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文件


3.测试SOAP接口


注:本文提供的源码中已经做了如下步骤,你可以根据以下步骤来自己做测试


3.1部署接口


       部署服务器端有两步: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生成时默认的类名,如果我们不是这么取名的,需要手动更改。


3.2 测试接口


1、首先我们访问如下地址,来查看服务是否发布成功:

http://ip:port/axis/servlet/AxisServlet,如果服务列表中存在SoapiSayHello服务,说明我们的服务发布成功了。

2、我们将构建出的SoapServer_axis.jar放入SoapClient工程中,并添加引用。

3、运行CientTester.java测试接口能不能请求成功。如果输出:“调用SOAP接口:hello, 丁祥勇, 返回码为:000000 “,那么说明接口调用成功了。



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值