Java远程通信技术Axis实战.docx

上传人:b****5 文档编号:8635379 上传时间:2023-02-01 格式:DOCX 页数:65 大小:1.17MB
下载 相关 举报
Java远程通信技术Axis实战.docx_第1页
第1页 / 共65页
Java远程通信技术Axis实战.docx_第2页
第2页 / 共65页
Java远程通信技术Axis实战.docx_第3页
第3页 / 共65页
Java远程通信技术Axis实战.docx_第4页
第4页 / 共65页
Java远程通信技术Axis实战.docx_第5页
第5页 / 共65页
点击查看更多>>
下载资源
资源描述

Java远程通信技术Axis实战.docx

《Java远程通信技术Axis实战.docx》由会员分享,可在线阅读,更多相关《Java远程通信技术Axis实战.docx(65页珍藏版)》请在冰豆网上搜索。

Java远程通信技术Axis实战.docx

Java远程通信技术Axis实战

前言

在Internet网络覆盖全球的今天,网络通信已经是当今软件开发过程中离不开的话题。

在常用的Windows、Liunx、Unix系统当中,大部分的网络数据传输都是使用TCP/IP、UDP/IP作为底层传输协议的,而HTTP协议就是基于TCP/IP协议而运行的超文本传送协议。

在JAVA高级开发语言中,陆续出现RMI、CORBA、JAX-RPC、JAX-WS、Axis、XFire、HTTPInvoker、Hessian、Burlap、JMX等远程通信架构去实现系统之间数据传送。

在“远程通信技术”的一系列文章中,本人将对上述复杂的JAVA远程通信技术作出归纳。

首先,在本篇文章中先对有着10多年历史的Axis进行介绍。

 

目录

一、Axis简介

二、Axis1.x实例

三、Web服务会话管理

四、自定义Handler

五、新一代SOAP引擎Axis2.x

六、AXIOM对象模型

七、Module模块独立化处理方式

八、异步调用Web服务

 

 

一、Axis简介

1.1Web服务的起源

Web服务是现今实现网络服务概念的趋势,它把基础架构建立于标准化的XML语言之上,能够使用一种与平台无关的方式对数据进行编码,其中SOAP与WSDL都遵从此标准化的XML编码规则。

SOAP(SimpleObjectAccessProtocol,简单对象访问协议)是一种轻量的、简单的、基于XML的协议,用于描述在服务过程中服务器端与客户端之间所交换的消息。

SOAP可以和现存的许多因特网协议和格式结合使用,包括超文本传输协议(HTTP),简单邮件传输协议(SMTP),多用途网际邮件扩充协议(MIME)。

WSDL(WebServiceDefinitionLanguage,Web服务描述语言)是一种基于XML的协议,用于定义服务端与客户端之间的契约,描述Web服务的公共接口,列出Web服务进行交互时需要绑定的协议和信息格式。

Web服务采用WSDL语言描述该服务支持的操作和信息,运行时再将实际的数据以SOAP方式在服务端与客户端进行信息传递。

由于软件开发平台众多,当中存在不同的开发风格,当服务器端与客户端使用不同的开发工具时,数据转换成为复杂且关键的问题。

而SOAP与WSDL的主要特性之一在于它们都是可扩展的,且与开发平台无关。

为了建立统一的XML协议,微软、IBM、Sun、Oracle、BEA等多家软件开发商联合起来,组成了一个名为WS-I(WebServiceInteroperability)组织,由该组织制定WS-ReliableMessage、WS-Discovery、WS-Federation、WS-Coordination、WS-AtomicTransaction、WS-BusinessActivity、WS-Enumeration、WS-Eventing、WS-Management等一系列用于数据交换的规范。

1.2JAX-RPC、JAX-WS简介

JAX-RPC(JavaAPIforXML-basedRPC)是Java库中基于XML远程服务的一组标准API,它通过WSDL方式对所提供的服务进行描述,并以RPC的风格把SOAP信息进行公开,是Java库中最早对Web服务提供支持的一组API。

JAX-RPC1.0从其名称可以看出,最初的目的只是为了支持使用(RemoteProcedureCall,RPC)的XML远程过程调用操作,它以BP1.0(WS-I’sBasicProfile1.0)为基础,依赖于SAAJ1.2(SOAPwithAttachmentsAPIforJava)为规范,虽然支持SOAP协议,但对Web服务功能有一定的局限性。

于是在2003年底,开发团队对JAX-RPC1.0进行大幅修订,由Sun公司组织了一个专家组开始进行JAX-RPC2.0规范的开发。

JAX-RPC2.0是基于JAVA5而开发的,它依赖于Annotation等新特性,在JAX-RPC的基础上提供还增加了如异步回调,面向消息等新增技术。

JAX-RPC2.0以BP1.1(WS-I’sBasicProfile1.1)为基础,依赖于SAAJ1.3(SOAPwithAttachmentsAPIforJava)为规范,能使用SOAP1.1、SOAP1.2进行信息公开。

它是JAX-RPC1.1架构发展的成果,在开发完成后,JAX-RPC2.0被正式改名成为JAX-WS(JavaAPIforXML-WebServices)。

 

1.3Axis概述

Axis全称ApacheEXtensibleInteractionSystem(阿帕奇可扩展交互系统),它是一个SOAP引擎,提供创建Web服务的基本框架。

Axis1.x是基于JAX-RPC而实现一个工具包,它可以使用HTTP、JMS、SMTP等多种传输方式支持SOAP 。

Axis2.x是新一代的Axis引擎,它支持JAX-WS、JAX-PRC等API,并且在Axis1.x的基础上增加了灵活数据绑定、异步调用等新增功能,可使用SOAP1.1、SOAP1.2协议。

在服务请求上,Axis2.x支持三种请求-响应模式:

In-Only、Robust-In和In-Out,也可支持使用REST风格的开发方式。

基本的AxisWeb服务由四部分组成:

AxisServlet、Axis部署描述、远程服务接口、服务实现类。

AxisServlet是Axis的核心,它负责WSDL基础服务信息的公开,并把SOAP请求转化为Java方法的调用,最后把返回值转化为SOAP。

AxisServlet隐藏了构建Web服务的大量代码,使用开发人员不用直接与SOAP打交道便可轻松完成Web服务的开发。

Axis部署描述是一个XML文档,它用于管理Web服务的发布,决定哪些服务类需要通过SOAP对外公开。

远程服务接口并非必要的,但在很多的Web服务开发过程中都会使用远程服务接口用于对外暴露服务类的方法,在服务器端通过服务实现类去继承实现服务接口。

由于Axis1.x与Axis2.x有各自的特色,下面将分开来介绍。

回到目录

二、Axis1.x实例

2.1Axis1.x的下载与安装

Axis1.x可于官网http:

//axis.apache.org/axis/ 下载,完成下载后建立WebProject作为测试项目,把lib文件夹下的jar文件拷贝,引入到测试项目当中。

在web.xml文件下加入AxisServlet配置后,系统就会对以后缀为*.jws及路径为/services/*的请求进行监听,遇到此类请求时将把信息交由 org.apache.axis.transport.http.AxisServlet进行处理。

1

2Apache-Axis

3

4org.apache.axis.transport.http.AxisHTTPSessionListener

5

6

7Apache-AxisServlet

8AxisServlet

9

10org.apache.axis.transport.http.AxisServlet

11

12

13

--服务管理-->

14

15AxisAdminServlet

16AdminServlet

17

18org.apache.axis.transport.http.AdminServlet

19

20100

21

22

--对输入输出的SOAP信息进行检测-->

23

24SOAPMonitorService

25SOAPMonitorService

26

27org.apache.axis.monitor.SOAPMonitorService

28

29

30SOAPMonitorPort

315001

32

33100

34

35

36AxisServlet

37/servlet/AxisServlet

38

39

40AxisServlet

41*.jws

42

43

44AxisServlet

45/services/*

46

47

48SOAPMonitorService

49/SOAPMonitor

50

51

而SOAPMonitorService并非必要配置,但加入SOAPMonitorService配置,可以便于对服务运行时所传输的SOAP信息进行监听,在服务的requestFlow或responseFlow中加入SOAPMonitorHandler,系统就可显示服务请求和回发时的SOAP信息。

1

//xml.apache.org/axis/wsdd/"

2xmlns:

java="http:

//xml.apache.org/axis/wsdd/providers/java">

3

org.apache.axis.handlers.SOAPMonitorHandler">

4

5

6value="http:

//tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"/>

7

8

9

10

RPC">

11

12

13

14

15

16

RPC">

17

18

19

20

21

22

23

24

25

26

 

2.2调用服务的三种方式

下面从最简单的HelloWorld开始,介绍Axis的使用方法。

首先在WEB-INF文件夹下建立server-config.wsdd文件,在Axis1.x当中,此文件正是用于管理服务发布的默认配置文件。

首先service用于定义对外暴露的服务,其中name属性用于定义服务的名称。

像下面例子,当name为PersonService时,对外暴露的服务路径则对应为http:

//localhost:

8080/axis.server/services/PersonService。

而parameter用于定义服务的相关属性,className表示此服务的实现类,而allowedMethods表示所公开的服务方法,“*"则默认为公开此类中的所有public公共方法。

而scope则是用于定义服务对象生成的方式,它包括三个选项:

request、session、application。

request是默认选择,表示为每个请求生成一个服务对象;

session表示对同一个客户代理对象所发送的请求使用同一个服务对象,并把服务信息放在同一个上下文当中。

当使用有状态服务时,使用此session更为合适,在下节将再作进一步介绍;

application类似于使用单体模式,表示所示的请求均使用同一个服务对象,当使用无状态服务时使用application能有效提高运行效率。

最后在transport中定义一个requestFlow处理类org.apache.axis.handlers.http.URLMapper,表示在系统接受到http请求时,将会调用URLMapper类来处理路径映射等问题。

1

//xml.apache.org/axis/wsdd/"

2xmlns:

java="http:

//xml.apache.org/axis/wsdd/providers/java">

3

--在浏览器暴露服务PersonService-->

4

RPC">

5

--绑定服务实现类型PersonServiceImpl-->

6

7

8

9

10

--当接收到http请求时交由URLMapper进行处理-->

11

12

13

org.apache.axis.handlers.http.URLMapper"/>

14

15

16

PersonService服务代码如下,此时运行服务,输入路径http:

//localhost:

8080/axis.server/services/PersonService?

wsdl,浏览器上将显示此服务的wsdl信息。

1publicinterfaceIPersonService{

2StringHelloWorld(Stringname);

3}

4

5publicclassPersonServiceImplimplementsIPersonService{

6@Override

7publicStringHelloWorld(stringname){

8return"Hello"+name;

9}

10}

客户端的生成工具有多种,其中一种是使用Axis1.x中的自带生成器WSDL2Java,此生成器可以根据wsdl文件生成客户端。

首先在环境变量中把Axis_Home绑定到Axis1.x的根目录,在path加入设置 ".;%Axis_Home%\lib",然后输入

Javaorg.apache.axis.wsdl.WSDL2Javahttp:

//localhost:

8080/axis.server/services/PersonService?

wsdl-paxis.client.person

此时系统将在axis.client.person包内生成客户端代码类PersonServiceImpl、PersonServiceImplService、PersonServiceImplServiceLocator、PersonServiceSoapBindingStub。

PersonServiceImplServiceLocator用于实现PersonServiceImplService接口,它绑定了服务的名称,地址,端口等详细资料。

PersonServiceImpl用于定义服务的接口,而PersonServiceSoapBindingStub则是此服务代理,它通过SOAP协议把操作请求发送到服务器,并把返回信息转化为Java对象。

1publicstaticvoidmain(String[]args)throws

2RemoteException,MalformedURLException,ServiceException{

3//TODOAuto-generatedmethodstub

4HelloWorld();

5}

6

7privatestaticvoidHelloWorld()throws

8RemoteException,MalformedURLException{

9PersonServiceImplpersonService=newPersonServiceSoapBindingStub(

10newURL("http:

//localhost:

8080/axis.server/services/PersonService"),

11newPersonServiceImplServiceLocator());

12System.out.println(personService.helloWorld("Leslie"));

13}

通过系统自动生成的代理类就能简单地调用远程服务,这是因为在代理类中已经完成了大量关于PersonService服务的配置,但本人觉得想要深入地了解Axis的开发,就应该了解其内部的结构。

所以在下面例子当中将介绍如何使用Axis的内部机制直接调用Web服务。

在org.apache.axis.client中存在着服务的基础类Service,通过Service可用于管理服务的绑定地址,端点,获取服务的WSDL等详细信息。

另外Call类用于管理每个服务请求动作,它可以设置每个请求的方法,最后通过call.invoke(Object[])调用服务,并获取完成后的返回值。

1publicstaticvoidmain(String[]args)throws

2RemoteException,MalformedURLException,ServiceException{

3HelloWorld();

4}

5

6privatestaticvoidHelloWorld()throws

7ServiceException,RemoteException{

8//生成服务对象Service

9Serviceservice=newService();

10Callcall=(Call)service.createCall();

11//设置Endpoint地址

12call.setTargetEndpointAddress(

13"http:

//localhost:

8080/axis.server/services/PersonService");

14//绑定请求方法名称

15call.setOperationName("HelloWorld");

16//通过call.invoke调用服务,获取返回值

17Stringdata=(String)call.invoke(newObject[]{"Lesli

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 外语学习 > 英语考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1