五、Chain链的作用

Chain是一个链,是Handler的链。也就是说一次请求可能要执行多个Handler。

1、下面我们就编写一个Handler,让它用chain的方法执行。

 

代码
 
   
package com.hoo.service.chain;

import org.apache.axis.SimpleChain;
import com.hoo.service.handler.RequestHandler;
import com.hoo.service.handler.ResponseHandler;

/**
* <b>function:</b>用chain实现调用多个handler
*
@author hoojo
* @createDate Dec 15, 2010 11:25:27 PM
* @file HandlerChain.java
* @package com.hoo.service.chain
* @project AxisWebService
* @blog
http://blog.csdn.net/IBM_hoojo
* @email hoojo_@126.com
*
@version 1.0
*/
public class HandlerChain extends SimpleChain {

private static final long serialVersionUID = 1226195692055911394L ;

public HandlerChain() {
RequestHandler request
= new RequestHandler();
ResponseHandler response
= new ResponseHandler();

this .addHandler(request);
this .addHandler(response);
}
}

 

 

上面的HandlerChain继承了SimpleChain,在构造器中创建了RequestHandler、ResponseHandler,然后用addHandler添加到chain的handler中。特别说明下,这里的chain其实也是一个handler,为什么这样说?我们继承的SimpleChain就继承了BsaicHandler这个抽象类,所以chain也是一个handler。有人想既然是handler那它的配置也应该和handler差不多,没错chain的配置可以引用handler的配置。

 

2、配置chain的wsdd文件

先看配置方式1:

代码
 
   
<? xml version="1.0" encoding="UTF-8" ?>
< deployment xmlns ="http://xml.apache.org/axis/wsdd/"
xmlns:java
="http://xml.apache.org/axis/wsdd/providers/java" >
< chain name ="HandlerChain" >
< handler type ="java:com.hoo.service.chain.HandlerChain" />
</ chain >

< service name ="HelloWorldWSDDHandlerChain" provider ="java:RPC" >
< requestFlow >
< chain type ="HandlerChain" />
</ requestFlow >
< parameter name ="className" value ="com.hoo.service.HelloWorldWSDD" />
< parameter name ="allowedMethods" value ="*" />
< parameter name ="scope" value ="request" />
</ service >
</ deployment >

 

 

 

在chain元素中配置了一个handler标签,这个标签的type就是classpath类路径,然后在requestFlow标签中配置chain元素标签,用type引用上面的chain即可。

 

配置方式2:

 

代码
 
   
<? xml version="1.0" encoding="UTF-8" ?>
< deployment xmlns ="http://xml.apache.org/axis/wsdd/"
xmlns:java
="http://xml.apache.org/axis/wsdd/providers/java" >

< handler name ="hchain" type ="java:com.hoo.service.chain.HandlerChain" />

< chain name ="handlerChain" >
< handler type ="hchain" />
</ chain >

< service name ="HelloWorldWSDDHandlerChain2" provider ="java:RPC" >
< parameter name ="className" value ="com.hoo.service.HelloWorldWSDD" />
< parameter name ="allowedMethods" value ="*" />
< parameter name ="scope" value ="request" />
< responseFlow >
< chain type ="handlerChain" />
</ responseFlow >
</ service >
</ deployment >

 

 

上面先配置了handler,刚才说过chain也是一种特别的handler。所以用handler标签配置chain,然后在chain标签中用handler的type引用hchain,最好在responseFlow标签中用chain引用上面配置好的chain。

注意:chain标签中只能配置handler、chain这2种元素,chain里面可以嵌套配置chain;

 

3、发布wsdd配置过chain的WebService

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8080/AxisWebService/services/AdminService deployChain.wsdd

在浏览器中请求:http://localhost:8080/AxisWebService/servlet/AxisServlet

就可以看到发布的服务了。

 

4、编写客户端代码,请求刚才发布的WebService。客户端的代码和上面的HelloWorldWSDDClient几乎引用,只是请求的服务换成刚才我们发布的那个服务路径就可以了。运行后服务器端控制台效果如下:

state: null, count: 1, requestCount: 1

state: null, count: 1, RESPONSE_COUNT: 1

state: null, count: 2, requestCount: 2

state: null, count: 2, RESPONSE_COUNT: 2

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值