`

soap webservice axis

    博客分类:
  • J2EE
阅读更多

应用AXIS开始Web 服务之旅

 

级别: 初级

刘冬 (winter.lau@163.com), 软件工程师

2003 年 7 月 01 日

本文介绍使用AXIS作为开发环境来体会Web服务的开发过程。
<!----><!----><!---->

一. 介绍


本文并不是想介绍Web服务的原理、系统架构等,我们假设您已经了解了关于Web服务的一些基本的概念、原理等知识。本文主要是针对那些已经了解Web服务概念,但是还没有亲身体会Web服务所带来令人欢欣鼓舞的特征的开发人员。在此我们认为你已经具备了Java、XML等基础知识,如果你还有其他开发环境的经验例如VB、VC那是再好不过的了。

1.Web服务


虽然我们并不想详细讲述Web服务的体系结构,但是大概的介绍一下还是有必要的。Web服务是一种新型的Web应用程序。不同于其他Web应用程序,它是自适应、自我描述、模块化的应用程序,并可以跨越Web进行发布、定位以及调用。简单的Web服务可以提供例如天气预报或者航班信息的服务。一旦部署了Web服务,其他的应用程序就可以发现和调用所部署的服务。

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核心引擎的体系结构图:




图1

整个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。

除了前面介绍的AXIS外,本文中还将会用到TOMCAT,这里不再另行介绍。另外为了演示Web服务真正与开发环境无关以及AXIS产生的是标准的、符合规范的Web服务,我们还将用到微软公司的SOAP TOOLKIT以及微软的开发环境VB和VC来做为Web服务的客户端。





回页首


二. 环境搭建


由于AXIS本身是基于JAVA语言开发的项目,并且是以Web应用形式发布的,因此它运行时需要一个应用服务器作为支撑。为了方便我们这里选用的是Tomcat。由于AXIS本身需要用到处理XML信息的包,所以我们建议使用JDK1.4并安装Tomcat 4.1.24。下面是环境搭建步骤,读取根据自身情况进行安装。

  1. 安装JDK1.4.1
  2. 安装Tomcat 4.1.24到C:\Tomcat并验证安装是否成功
  3. 下载AXIS项目打包文件axis-1_1.zip解压缩后将目录中的webapps目录下的axis子目录拷贝到C:\Tomcat\webapps下。
  4. 验证AXIS的安装:重新启动Tomcat服务器后打开浏览器输入网址http://localhost:8080/axis 后应该出现如下图所示页面,点击链接"Validate"来验证Axis所需的几个JAVA包是否齐全。



图2

点击超链接Validate后,AXIS会自动检查所需的每一个JAVA组件,这协组件分为:必需组件以及可选组件,必须保证所有必需组件都存在,如下图所示即为验证成功。




图3





回页首


三. Web Service服务端开发


经过了前两步之后我们就可以开始Web服务之旅了!大多数人在学习一种编程语言的第一步都是从Hello world程序开始的,我们也不例外。我们将提供这样一个Web服务,通过给它传入姓名,服务返回:你好[姓名],欢迎来到Web服务的世界。这就是我们的需求。我们将马上根据AXIS的要求完成我们的需求,你就会发现原来Web服务可以这么简单!

编写JAVA类Hello.java,内容如下:

public class Hello{
 public String hello(String name){
  if(name==null)
   name = "";
  return "你好"+name+",欢迎来到Web服务的世界!";
}
}

仅此而已,无需编译,将该文件改名为Hello.jws并拷贝到AXIS应用目录C:\Tomcat\webapps\axis下。

下面我们就可以测试该Web服务了,打开浏览器并输入刚刚创建的文件名对应的URL地址 http://localhost:8080/axis/Hello.jws 浏览器显示如下结果:

There is a Web Service here
        
        Click to see the WSDL 
      
      

点击页面上的链接查看该Web服务对应的WSDL信息如下所示(我们将在下一小节简单介绍WSDL)

<!---->
xml 代码
  1. <!---->xml version="1.0" encoding="UTF-8" ?>  
  2. -<wsdl:definitions  
  3.  targetNamespace="http://localhost:8080/axis/Hello.jws"  
  4.  xmlns="http://schemas.xmlsoap.org/wsdl/"  
  5.  xmlns="http://www.w3.org/2000/xmlns/"  
  6.  xmlns:apachesoap="http://xml.apache.org/xml-soap"    
  7.  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"  
  8.  xmlns:impl="http://localhost:8080/axis/Hello.jws"    
  9.  xmlns:intf="http://localhost:8080/axis/Hello.jws"  
  10.  xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"    
  11.  xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
  12.  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">  
  13.  - <wsdl:message name="helloRequest">  
  14.  <wsdl:part name="name" type="xsd:string" />    
  15.  wsdl:message>  
  16.  + <wsdl:message name="helloResponse">  
  17.  - <wsdl:portType name="Hello">  
  18.  - <wsdl:operation name="hello" parameterOrder="name">  
  19.  <wsdl:input name="helloRequest" message="intf:helloRequest" />    
  20.  <wsdl:output name="helloResponse" message="intf:helloResponse" />  
  21.  wsdl:operation>    
  22.  wsdl:portType>  
  23.  - <wsdl:binding name="HelloSoapBinding" type="intf:Hello">    
  24.  <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http" />  
  25.  - <wsdl:operation name="hello">    
  26.  <wsdlsoap:operation soapAction="" />  
  27.  - <wsdl:input name="helloRequest">  
  28.  <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"    
  29.   namespace="http://DefaultNamespace" />     
  30.  wsdl:input><wsdl:output name="helloResponse">     
  31.  <wsdlsoap:body use="encoded" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"  
  32.   namespace="http://localhost:8080/axis/Hello.jws" />      
  33.  wsdl:output>    
  34.  wsdl:operation>    
  35.  wsdl:binding>  
  36.  - <wsdl:service name="HelloService">  
  37.  - <wsdl:port name="Hello" binding="intf:HelloSoapBinding">  
  38.  <wsdlsoap:address location="http://localhost:8080/axis/Hello.jws" />    
  39.  wsdl:port>     
  40.  wsdl:service>    
  41.  wsdl:definitions>  
<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:intf="http://localhost:8080/axis/Hello.jws" xmlns:impl="http://localhost:8080/axis/Hello.jws" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetnamespace="http://localhost:8080/axis/Hello.jws" xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:apachesoap="http://xml.apache.org/xml-soap"><wsdl:message name="helloResponse"><wsdl:service name="HelloService"><wsdl:port name="Hello" binding="intf:HelloSoapBinding"> </wsdl:port> </wsdl:service> </wsdl:message></wsdl:definitions>

到此我们已经完成了hello的Web服务了,那我们怎么告诉用户如何来使用该服务呢?我们只需要告诉用户我们的Web服务的URL地址: http://localhost:8080/axis/Hello.jws?wsdl 就可以了!下一节我们将介绍如何通过这个地址来访问对应的Web服务。





回页首


四. Web Service客户端开发


在这一节中我们将使用三种不同的语言来访问刚刚创建的Web服务,分别是JAVA、VB、VC。为了使用VB和VC访问Web服务,我们需要安装微软公司的Soap Toolkit 开发工具包,这个工具包可以从微软公司的主页

http://download.microsoft.com/download/xml/soap/2.0/W98NT42KMe/EN-US/SoapToolkit20.exe

下载,下载该软件包并使用默认方式安装即可。

在开始客户端开发之前有两个概念我们必须先粗略的介绍一下。

SOAP:简单对象访问协议。这是一种在松散的、分布的环境中使用XML对等地交换结构化的和类型化的信息提供了一个简单且轻量级的机制,它是一个基于XML的协议。它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。

虽然这四个部分都作为SOAP的一部分,作为一个整体定义的,但他们在功能上是相交的、彼此独立的。特别的,信封和编码规则是被定义在不同的XML命名空间(namespace)中,这样使得定义更加简单。

SOAP的主要设计目标是简明性和可扩展性。这就意味着有一些传统消息系统或分布式对象系统中的特性将不包含在SOAP的核心规范中。这些特性包括:分布式垃圾收集;批量消息传输/处理;对象引用;对象激活。

WSDL:Web Service描述语言。使用了WSDL,我们就可以通过这种跨平台和跨语言的方法使Web Service代理的产生自动化。就像COM和CORBA的IDL文件,WSDL文件由客户和服务器约定。由于WSDL设计成可以绑定除SOAP以外的其他协议,这里我们主要关注WSDL在HTTP上和SOAP的关系。同样,由于SOAP目前主要用来调用远程的过程和函数,WSDL支持SOAP传输的文档规范。

WSDL文档可以分为两部分。顶部分由抽象定义组成,而底部分则由具体描述组成。抽象部分以独立于平台和语言的方式定义SOAP消息,它们并不包含任何随机器或语言而变的元素。这就定义了一系列服务,截然不同的网站都可以实现。

1. JAVA客户端


使用AXIS的工具将使Web服务的访问和我们之前介绍的创建一个Web服务一样的简单。我们前面安装的AXIS环境中已经包含着这样的工具,它是一个JAVA类,类名为:org.apache.axis.wsdl.WSDL2Java。打开命令行窗口,转到AXIS目录下的WEB-INF子目录。确保Tomcat服务已经处于启动状态,键入命令 :

Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java http://localhost:8080/axis/Hello.jws?wsdl

该命令执行的结果是在当前所在目录下产生一个子目录 localhost/axis/Hello_jws,该目录下有四个JAVA源文件,它们分别是:

Hello.java 定义了Web服务接口,此例中只有一个hello方法。

HelloService.java 定义了用于获取Web服务接口的方法。

HelloServiceLocator.java 接口HelloService的具体实现。

HelloSoapBindingStub.java Web服务客户端桩,通过该类与服务器交互。

这四个JAVA类帮我们处理了大部分的逻辑,我们需要的仅仅是把这些类加到我们的项目然后创建一个我们自己的类来调用它们即可。为此我们新加一个类Main.java,为了方便,让这个类与刚产生的四个类都在同一个包下。内容如下:

//Main.java
package localhost.axis.Hello_jws;
public class Main{
public static void main(String[] args) throws Exception{
 HelloService service = new HelloServiceLocator();
 Hello hello = service.getHello(); 
 System.out.println("Response:"+hello.hello("罐头")); 
 }
}

使用以下命令进行编译:

javac -classpath lib\axis.jar;lib\jaxrpc.jar localhost\axis\Hello_jws\*.java

如果编译没有问题的话执行该测试程序:

java -Djava.ext.dirs=lib -cp . localhost.axis.Hello_jws.Main//运行结果:Response:你好罐头,欢迎来到Web服务的世界!

在WSDL2Java工具自动产生的几个类中,类HelloServiceLocator中保存这一些跟服务器相关的信息,例如URL地址等,当服务器的地址更改后但是服务并没有改动的时候直接修改该文件中的字符串定义,而无需重新生成这几个类。具体需要修改的内容,打开该文件便可一目了然。

分享到:
评论

相关推荐

    WebService Axis初学者

    WebService Axis是基于Java的Web服务框架,用于创建和部署SOAP(简单对象访问协议)服务。这个初学者指南将深入探讨Axis的基本概念、安装过程、创建第一个WebService以及如何进行调用。 1. WebService简介: ...

    Java Webservice Axis2 Client(含soapheader验证)

    总之,Java Webservice Axis2 Client的开发涉及到生成客户端代码、设置SOAP Header、调用服务和处理响应等多个步骤。了解这些概念和API对于构建安全、可靠的Web服务客户端至关重要。在实际项目中,确保遵循最佳实践...

    SOAP WebService简单例子

    在本例中,我们将探讨如何使用Eclipse IDE和Apache Axis2框架创建和测试一个简单的SOAP WebService。 1. **Eclipse IDE**:Eclipse是Java开发者广泛使用的集成开发环境,提供了丰富的插件支持,包括用于Web服务开发...

    webservice axis开发示例

    本示例将围绕“webservice axis开发”展开,详细介绍如何利用Apache Axis进行Web服务开发。 标题中的“webservice axis开发示例”是指使用Apache Axis框架创建和使用Web服务的实践案例。Apache Axis提供了一套工具...

    webService axis2 demo

    【标题】:“webService axis2 demo” 在IT领域,Web服务是一种通过互联网交换数据和实现功能的方法。Web服务的核心技术之一是Axis2,它是Apache软件基金会开发的一个强大的Web服务引擎,用于处理SOAP(简单对象...

    基于axis2实现的webservice简单实现(客户端+服务端)。

    【标题】中的“基于axis2实现的webservice简单实现(客户端+服务端)”表明了本文将探讨如何使用Apache Axis2框架来创建和消费Web服务。Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了高效且灵活的...

    SpringBoot开发WebService之Axis示例

    而 Axis 是一个流行的Apache项目,用于创建和部署Web服务,它提供了强大的SOAP处理能力。通过整合SpringBoot与Axis,我们可以快速构建高效且易于维护的Web服务。 首先,让我们了解什么是SpringBoot。SpringBoot是...

    axis2发布webservice和调用axis2服务接口

    1. **创建WebService**:在Axis2中,可以通过编写一个简单的Java类并暴露其方法作为Web服务接口。这个类通常会遵循SOAP协议,定义服务操作。例如,你可以创建一个名为`HelloWorldService`的类,包含一个`sayHello`...

    soap webservice调试PDF

    在IT领域,特别是软件开发与服务交互中,SOAP WebService是一种广泛使用的协议,用于不同应用程序间的通信。SOAP(Simple Object Access Protocol)是一种基于XML的信息交换协议,它定义了一种调用远程过程的方式,...

    WebService axis1.4接口服务序列/反序列复杂项目实例

    在这个"WebService Axis1.4接口服务序列/反序列复杂项目实例"中,我们将深入探讨如何在 Axis1.4 中处理复杂的参数、自定义实体对象的序列化与反序列化,以及客户端的复杂调用。 首先,让我们理解序列化和反序列化的...

    WebService Axis 搭建开发

    【WebService Axis 搭建开发】是关于使用Apache Axis库创建和部署Web服务的教程。Apache Axis是一个开源项目,主要用于简化Java应用程序与Web服务之间的交互。在这个过程中,我们将重点介绍如何利用Axis进行快速开发...

    webservice axis免费包

    标题中的“webservice axis免费包”指的是可以免费获取的Axis框架的软件包。这个包通常包含了Axis的所有必需组件,包括 Axis服务器、客户端库、文档和示例,让开发者可以在自己的项目中免费使用和学习Web服务技术。 ...

    axis2+spring webservice

    学习如何使用Axis2的会话管理特性,或者通过其他方式(如在SOAP头中传递会话ID)来模拟会话。 5. **依赖注入**:探讨如何通过Spring的DI机制向Web服务类注入依赖,以提高代码的灵活性和可测试性。 6. **AOP集成**...

    Axis实现webservice完整实例

    ** Axis 实现 WebService 完整实例** 在 IT 领域,Web 服务是一种用于应用程序之间进行通信的标准协议,而 Axis 是一个流行的开源 Java 框架,它允许开发者轻松地创建和部署 Web 服务。本实例将详细介绍如何使用 ...

    WebService axis2使用说明

    **WebService与Axis2详解** 1. **WebService** WebService是一种基于开放标准(如SOAP、WSDL和UDDI)的,使得不同系统间能够相互通信的技术。它允许应用程序通过网络调用彼此的功能,从而实现分布式计算。 1.1. ...

    axis2webservice接口例子

    标题中的“axis2webservice接口例子”指的是使用Apache Axis2框架创建的一个Web服务接口实例。Apache Axis2是Java平台上的一款强大的Web服务开发工具,它提供了高效、灵活且可扩展的环境来构建和部署Web服务。这个...

    axis发布webservice教程源代码

    Axis在Web服务领域中扮演着关键角色,因为它简化了SOAP(简单对象访问协议)消息处理和WSDL(Web服务描述语言)的生成。 【标签】"axis发布webs"进一步确认了这个教程的核心内容是关于使用Axis工具发布Web服务。Web...

    java webservice Axis例子

    Java WebService Axis是一个基于Java平台的开源框架,用于创建和消费Web服务。它是一个重要的工具,因为Web服务在分布式系统中的应用广泛,允许不同系统之间的应用程序通过网络进行通信。本例子是一个适合初学者的...

    WebService之Axis2实例

    WebService之Axis2实例是Web服务开发中的一个重要环节,它基于SOAP协议,允许不同平台和语言间的应用程序进行通信。本文将详细介绍Axis2实例的创建、配置和运行,以及如何利用Eclipse IDE、JDK 1.7和Tomcat 7.0进行...

    WebService Axis客户端调用接口需要用到的jar包

    WebService Axis是Apache软件基金会开发的一款基于Java的Web服务框架,它允许开发者创建和部署Web服务。在使用Axis作为客户端调用Web服务接口时,需要依赖一系列的jar包来支持通信和处理数据。以下是对这些关键jar包...

Global site tag (gtag.js) - Google Analytics