`
chnic
  • 浏览: 227725 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

利用AXIS开发Webservice(二) —— WSDD的一些高级特性

阅读更多

时间过的真快,一不小心过了半年了,半年后我来更新第二篇webservice的博文。春困秋乏夏打盹,睡不醒的冬三月。最近又懒了。confused

 

第一篇介绍了AXIS的两种发布方式,和一些基本的应用。这一篇说一下一些高级应用。 开篇之前先把上篇的一个遗漏补充上,上篇只讲了怎么发布一个webservice,但是如何取消没有却没有提。其实取消一个已经发布的webservce也是非常简单的,我们就拿上篇的HelloWorld来做例子吧。 

 

发布webservice的时候我们有一个deploy.wsdd文件,当然在取消发布的时候就会有一个undeploy.wsdd文件。这个文件的内容也很简单,xml的代码如下。

<undeployment xmlns="http://xml.apache.org/axis/wsdd/">
 <service name="HelloWorld"/>
</undeployment>

编写完这个xml文件之后,把它同样copy到%TOMCAT_HOM\webapps\axis\WEB-INF目录下,然后CMD打开控制台,在控制台输入一个我们很熟悉的命令

    java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient undeploy.wsdd

 

运行之后得到如下结果说明取消发布成功

Processing file undeploy.wsdd       
<Admin>Done processing</Admin>

 

说完取消发布之后就来说一下AXIS的一些高级特性,AXIS在编写deploy.wsdd这个文件时,每个<service>节点下面会有这样一个子节点。

 <parameter name="scope" value="value"/>

这个节点配置着你的service object也就是你webservice服务的那个object的圣明周期,在后面的value里可以有三个选项request, session, or application。熟悉Jsp、Servlet、或者EJB里的SessionBean的朋友应该能很快能明白这个三个配置选项的含义。

 

requst :这个选项会让AXIS为每一个SOAP的请求产生一个服务对象,可以想像如果这个webservice的对象足够复杂,而且SOAP的请求过多,这个选项是非常耗费服务器性能的。

session :如果选择了session,程序就会给每个调用这个webservice的客户端创造一个服务对象。

application :这个选项最彪悍,程序只会在内存里new出来一个服务对象,然后为所有webservice客户端服务。很显然这个选项不能储存客户端的一些个性化数据。所以在功能性上很多时候不能满足要求。

 

接下来说一下Axis的Handler和Chain机制,Handler和Chain是Axis引擎提供的一个很强大的工具。假如现在客户有这样一个需求,需要记录某一个webservice被调用的次数,这个时候如果在service object里去实现这个功能不仅麻烦,而且侵入了原有的程序也会对增加原有程序的不稳定性。有了Handler我们就能见easy的解决这个问题。我们先来编写handler的代码。

package com.chnic.handler;

import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;

public class HelloWorldHandler extends BasicHandler{

	private static final long serialVersionUID = 1L;
	public void invoke(MessageContext context) throws AxisFault {
		String status = (String) this.getOption("status");
		System.out.println("HelloWorldHandler's status is: " + status);
	}
} 

BasicHandler是一个抽象类,Axis提供了很多Handler的具体实现,BasicHandler只是其中最简单的一个。要实现一个自己的handler首先要从继承BasicHandler这个类开始并实现其中的invoke(MessageContext arg)这个方法。MessageContext可以看成是一个Axis的上下文,里面存储的是一些Axis和webservice的基本信息。想了解的朋友可以看一下Axis的API。编写完Handler代码之后我们连编写发布文件。

<deployment xmlns="http://xml.apache.org/axis/wsdd/" 
	xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
	<handler name="Hello" type="java:com.chnic.handler.HelloWorldHandler">
  	   <parameter name="status" value="success"/>
	</handler>

 	<service name="HelloWorld" provider="java:RPC">
	 <requestFlow>
	   <handler type="Hello"/>
	 </requestFlow>
 		<parameter name="className" value="com.chnic.webservice.HelloWorld"/>
 		<parameter name="allowedMethods" value="*"/>
 		<parameter name="scope" value="session"/>
 	</service>
</deployment>

发布代码中有这样的一句,细心的朋友一定会发现。

<parameter name="status" value="success"/>

看完这句代码再对比一下Handler的实现代码中的一句,相信大多数人都能明白了。

String status = (String) this.getOption("status");

Handler通过getOption(String)这个方法拿到了配置文件中我配置的属性值。而我们上述所做的所有工作对于原来的Webserivce来说都是透明的,不会对侵入原有的程序当中。 一个Handler可以被多个service所使用通过<requestFlow>这个标签来引用到某一个service中,这里还要多提一句既然是一个requestFlow,这个当然可以加不只一个的Handler。接下来编写测试代码运行。在本地应用服务器上会打出如下语句:HelloWorldHandler's status is: success

说明测试成功,而且handler是配置在requestflow标签中所以这段代码会在service代码之前先执行。

 

介绍完了Handler再来介绍Chain。从Chain的字面意思就能猜到他实现的一连串Handler的功能。假如某个service需要不止一个Handler,或者要根据Client的情况来选择需要那些Handler。特别是后一个需求,我们无法用一个或者几个Handler来解决,这个时候我们就需要<Chain>来实现了。我们先再编写一个Handler,加上之前的那个Handler我们来组成一条锁链。

package com.chnic.handler;

import org.apache.axis.AxisFault;
import org.apache.axis.MessageContext;
import org.apache.axis.handlers.BasicHandler;

public class MyHandler extends BasicHandler {

	private static final long serialVersionUID = 1L;
	public void invoke(MessageContext context) throws AxisFault {
		System.out.println("This is MyHandler..");
	}
}

 之后我们编写Chain的代码

package com.chnic.chain;

import org.apache.axis.SimpleChain;
import com.chnic.handler.HelloWorldHandler;
import com.chnic.handler.MyHandler;

public class HelloWorldChain extends SimpleChain {

	private static final long serialVersionUID = 1L;
	public HelloWorldChain(){
		HelloWorldHandler hwh = new HelloWorldHandler();
		MyHandler mh = new MyHandler();
		this.addHandler(hwh);
		this.addHandler(mh);
	}
}

在Chain的构造函数中,把我要的两个Handler用addHandler()方法加载进去。之后我们来编写发布文件。<chain>和<handler>元素有些许不同在这里有必要多句嘴。

<chain>元素中的子元素只允许是<handler>或者<chain>。后者也就是允许在“锁链”里再嵌套“锁链”,在这里就拿嵌套<handler>来举例,他同样有两种方式来实现。第一种是直接包含<handler>:

 

<chain name="myChain">
  	<handler type="java:com.chnic.handler.MyHandler"/>
</chain>

第二种是引用别的<handler>

 

<handler name="myHandler" type="java:com.chnic.handler.MyHandler"/>
<chain name="myChain"/>
   <handler type="myHandler"/>
</chain>

因为我们这里的Handler并没有由BasicHandler来实现,而是由继承SimpleChain这个类来实现,严格意义上讲,SimpleChain也可以算是一个Handler,因为SimpleChain也是从BasicHandler继承而来,他同样实现了invoke()这个方法。下面回归正题,来看我们的发布代码。

<deployment xmlns="http://xml.apache.org/axis/wsdd/" 
	xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
 	
	<chain name="myChain">
  		<handler type="java:com.chnic.chain.HelloWorldChain"/>
	</chain>
	
 	<service name="HelloWorld" provider="java:RPC">
	 <requestFlow>
	   <chain type="myChain"/>
	 </requestFlow>

 		<parameter name="className" value="com.chnic.webservice.HelloWorld"/>
 		<parameter name="allowedMethods" value="*"/>
 		<parameter name="scope" value="session"/>
 	</service>	
</deployment>

从新发布webservice之后,运行我们的测试代码。会发现在应用服务器的本地控制台上打出两句Handler要输出的语句,说明测试成功。而且控制台打出语句的顺序是和我们加载handler的顺序一样的。

 

除了<requestFlow>之外,Axis还提供了与之相应的</responseFlow>,用法和是requestflow一样的,所不同的是一个在service执行之前一个是之后。可以加下面代码到发布文件中的<service>元素下就可以实现responseflow的功能

<responseFlow>
 	<handler type="HelloWorldHandler"/>
 </responseFlow>

 

最后简单提一下远程管理,也就是Remote Administration。要实现远程管理在发布文件的<service>标签下加入下面一段语句就可以了。

<parameter name="enableRemoteAdmin" value="true"/>

 不过远程管理会有安全方面的问题,所以不建议使用。

 

一些高级部分就先说到这里,还有一些比如RPC docuement Wrapped Message的区别和使,如何传递一个Javabean,还有一些配置方面的的问题就留到下节说吧。

 

分享到:
评论

相关推荐

    利用Axis构建Webservice

    ### 利用Axis构建Webservice的关键知识点 #### 一、Axis环境的安装与配置 - **基础环境需求**: - J2SE SDK 1.4:Java版本的选择非常重要,因为Axis的一些特性依赖于特定的Java版本。 - Tomcat 5.0:作为Web容器...

    利用axis一步一步开发webservice

    本教程将详细介绍如何利用Axis来一步步开发Web服务。 1. **Web服务基础** 在理解如何使用Axis之前,首先要了解Web服务的基本概念。Web服务使用XML(Extensible Markup Language)作为数据交换格式,SOAP(Simple ...

    Axis和WebService配置使用之Hello

    标题中的“Axis和WebService配置使用之Hello”表明我们将探讨如何在Java环境中使用Axis库来创建和使用Web服务,实现一个简单的“Hello World”示例。 Axis是一个开源的Java SOAP(简单对象访问协议)工具包,它允许...

    用eclipse+xdoclet+axis开发WebService.pdf

    在使用Eclipse集成开发环境配合XDoclet和Axis开发WebService的背景下,本文将详细介绍相关的知识点和步骤。首先需要了解的是,WebService是一种可让应用程序通过网络(尤其是互联网)进行通信的接口和协议。它通常...

    Axis WebService 技术指南,开发文档

    本指南将详细介绍如何使用 Axis 进行 WebService 开发,包括从基础入门到高级特性的应用。 ### 1. Axis 简单入门 在开始之前,你需要从官方网站下载 Axis 的工程和必要的库文件,例如 `axis-bin-1.4`。解压缩后,...

    Axis开发webservice搭建指南

    Axis开发Web服务(Webservice)的搭建过程是一个系统性的步骤,涉及到服务器端的配置和客户端的调用。在本文中,我们将深入探讨如何使用Apache Axis框架来创建和部署Web服务。Apache Axis是一个开源工具,它允许...

    axis1.4及webService开发教程

    在IT行业中,Web服务是一种基于互联网的标准协议,用于应用程序之间的通信。...在深入学习和实践过程中,还会涉及到WS-Security、WS-Addressing等高级特性,这些将帮助开发者构建更安全、可扩展的Web服务解决方案。

    Axis实现WebService开发指导V1.0.doc

    ### Axis 实现 WebService 开发指导 #### 一、WebService 概述 WebService 是一种用于在应用程序之间交换数据和服务的标准技术。它通过基于 XML 的消息处理来实现不同组件模型、操作系统和编程语言间的通信,从而...

    WebService Axis 搭建开发

    二、用Java开发WebService Axis简单实例 在使用Axis开发Web服务时,有三种主要的方法: 1. **Dynamic Invocation Interface (DII)方式** - 动态调用接口,允许直接调用Web服务方法。 2. **Dynamic Proxy方式** - ...

    axis2+myeclipse开发webService

    通过这个过程,我们学会了如何利用Axis2和MyEclipse开发Web服务,包括服务接口定义、服务实现、部署及测试。这为我们提供了基础的Web服务开发能力,进一步可以扩展到更复杂的业务场景,如安全机制、消息编码、服务...

    springboot+axis1.4

    3. **创建WebService**:在Spring Boot应用中,你可以通过Axis1.4创建一个WebService。首先,定义一个Java类,包含你想要公开的方法。然后,使用Axis的工具生成服务端点接口和服务类。 4. **配置Spring Boot**:...

    axis1.4 部署webservice说明

    总结,Axis1.4是Java Web服务开发的重要工具,通过其提供的工具可以方便地生成WSDD和测试类,简化服务的部署和测试流程。了解并熟练掌握这些工具的使用,对于开发和维护Web服务至关重要。在实际操作中,还需要关注与...

    axis1.4+ibatis2.3开发webservice服务[图解]

    尽管Axis 2提供了一些改进和新特性,但在实际项目部署过程中发现,Axis 2在处理发布的服务aar包中的iBatis `sqlmapconfig.xml`配置文件时存在问题,导致配置文件无法被正确识别和加载。因此,在这种情况下,建议选择...

    axis1.4发布webservice接口步骤(java).docx

    本文将通过具体的步骤演示如何利用Eclipse集成开发环境完成WebService的创建与发布过程。 #### 二、准备工作 在正式开始之前,请确保已经安装了以下软件: - Java Development Kit (JDK) - Eclipse IDE for Java ...

    IDEA下开发webservice(axis)文档

    ### IDEA 下开发 Webservice(Axis)的关键知识点 #### 一、概述 在现代软件开发过程中,Web服务(尤其是 SOAP 类型的服务)作为一种重要的组件模型,为不同应用间的交互提供了标准化的途径。本文将详细介绍如何在 ...

    [原创]使用Axis1.4开发WebService

    ### 使用Axis 1.4开发WebService:关键技术与实践 #### 一、Axis 1.4 简介 Axis是一个开放源代码的Web服务引擎,它由Apache软件基金会开发和维护,支持SOAP协议,用于创建和部署Web服务。Axis 1.4版本是其稳定且...

    springboot使用axis1.4的demo

    总结起来,将Spring Boot与Axis1.4结合使用,可以方便地在Spring Boot应用中构建和发布Web服务,利用Spring Boot的便利性和Axis1.4的强大功能。通过理解并熟练掌握上述步骤,你可以在实际项目中灵活地部署和管理Web...

    Axis1.4_开发指南

    它介绍了WebService的基本概念、Axis框架的安装与使用、WebService开发和部署的关键技术,以及如何处理复杂对象传递、异常和文件传递等高级特性。通过这份指南,开发者可以有效地利用Axis1.4来构建稳定、可扩展的...

    Delphi7调用Java AXIS写的WebService

    因目前公司客户端采用delphi7开发,与服务器交换数据用的webservice也用delphi开发 本人是做java开发,所以想研究一下怎么用java开发webservice供delphi7调用 javaserver 是WebService 服务端,采用AXIS 1.4 为...

Global site tag (gtag.js) - Google Analytics