如何使用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 “,那么说明接口调用成功了。

时间: 2024-08-07 04:16:34

如何使用axis构建SOAP应用程序的相关文章

08-05 细分构建机器学习应用程序的流程-数据预处理

目录 细分构建机器学习应用程序的流程-数据预处理 一.1.1 缺失值处理 1.1 1.1.1 删除缺失值 1.1.1 4.6.1.2 填充缺失值 二.1.2 异常值处理 三.1.3 自定义数据类型编码 四.1.4 通过sklearn对数据类型编码 五.1.5 独热编码 5.1 1.5.1 sklearn做独热编码 5.2 1.5.2 pandas做独热编码 六.1.6 数据标准化 6.1 1.6.1 最小-最大标准化 6.2 1.6.2 Z-score标准化 七.1.7 二值化数据 八.1.8

使用 Eclipse PhoneGap 构建 Android 应用程序入门

Eclipse 是一种支持多种技术的开源集成开发环境 (IDE),但本文重点介绍 Java 支持,这也是 Android 应用程序的“母语”.Android 是 Google 发布的开源移动操作系统.Android 现已成为许多智能手机和平板设备的操作系统,其中包括三星 Galaxy 系列手机和平板电脑.亚马逊 Kindle Fire 平板电脑.Barnes and Noble Nook 平板电脑,以及大量制造商生产的许多其他设备.PhoneGap 是一个开源应用程序平台,可让您使用 HTML

spring mvc构建WEB应用程序入门例子

在使用spring mvc 构建web应用程序之前,需要了解spring mvc 的请求过程是怎样的,然后记录下如何搭建一个超简单的spring mvc例子. 1) spring mvc的请求经历 请求由DispatcherServlet分配给控制器(根据处理器映射),在控制器完成处理后,请求会被发送到一个视图(根据viewController解析逻辑视图) 来呈现输出结果. 整理成下图所示: 2)搭建一个简单的spring mvc例子 ①创建一个maven工程,其中pom中要有spring相关

在 Oracle 数据库上使用 Visual Studio 2005 或 2008 构建 .NET 应用程序 了解构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程。

随着 Microsoft 的 .NET Framework 的日益流行,许多开发人员迫切想了解关于将 .NET 应用程序与 Oracle 集成的最佳方法的信息 - 不仅在基本连通性方面,还包括与使用 Visual Studio 2005 或 2008 进行有效应用程序开发的关系. 在本文中,我将说明构建使用 Oracle 数据库的 .NET 应用程序所涉及到的基本但不可或缺的过程,包括: 如何添加工程引用,以在您的 .NET 工程中支持 Oracle 类 如何创建 Oracle 数据库连接字符串

使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序

http://blog.csdn.net/wingfourever/article/details/7726724 使用eclipse和JavaFX Scene Builder进行快速构建JavaFX应用程序 2012-07-08 18:25 18641人阅读 评论(11) 收藏 举报  分类: JavaFX(52)  版权声明:本文为博主原创文章,未经博主允许不得转载. 了解过JavaFX的都知道,JavaFX自从2.0版本开始,已经完全抛弃了之前的script语言,才用纯java来实现.这样

使用 SailingEase WinForm 框架构建复合式应用程序(插件式应用程序)

对于一些较小的项目,具备一定经验的开发人员应该能够设计和构建出便于进行维护和扩展的应用程序.但是,随着功能模块数量(以及开发维护这些部件的人员)的不断增加,对项目实施控制的难度开始呈指数级增长. SailingEase WinForm 框架为您提供了针对此问题提出的解决方案.在本文中,将对基于SailingEase WinForm 框架的复合应用程序的定义进行解释,并简要说明如何才能构建一个基于 SailingEase WinForm 框架功能的复合应用程序. 传统的单一应用程序 传统的单一应用

Net Core构建Angular4应用程序

在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序 前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布.我一直在想,怎么能够用这个地表最强IDE工具编写Angular4的Asp.Net Core项目.经过不懈的研究.终于的得到了一套很好的解决方案与大家分享. 文章转载请著名出处:http://www.c

借用百度数据,构建自己的程序

个人软件开发过程中,有些需要的资源与数据,个人没有精力及时维护这些数据,但是怎么能轻松的构建自己的程序呢?其实国内的BAT巨头的好多软件数据都是开放的(提供API接口或者可以分析),下面拿百度壁纸客户端的例子来说,如何利用百度壁纸的数据来构建的自己的壁纸管理程序. 首先安装打开百度壁纸,使用Fiddler2来跟踪其数据获取的接口API,截图如下: 选中的网址就是获取壁纸数据的接口,每个分类的数据都分析记录下来. 第二步跟踪接口返回的数据,发现数据都是json结构的,我们的程序直接解析json就可

【Asp.Net Core】在Visual Studio 2017中使用Asp.Net Core构建Angular4应用程序

前言 Visual Studio 2017已经发布了很久了.做为集成了Asp.Net Core 1.1的地表最强IDE工具,越来越受.NET系的开发人员追捧. 随着Google Angular4的发布.我一直在想,怎么能够用这个地表最强IDE工具编写Angular4的Asp.Net Core项目.经过不懈的研究.终于的得到了一套很好的解决方案与大家分享. 文章转载请著名出处:http://www.cnblogs.com/smallprogram 我们的目的 随着Web技术的快速发展,新的技术层出