webservice系列3---chain

本节摘要:本节主要介绍webservice的高级特性chain的开发和配置

1.引言
之前在上webservice系列2---javabean&handler中讲了handler的使用,当有多个handler的时候,难道我们要一个一个的在wsdd文件中配置,然后一个一个的引入到需要的webservice中码?of course ,no。Apache组织已经替我们考虑到了这种需求,chain就是专门用来处理这种情况的。chain,英文解释是链的意思,在我们这里,就是把多个handler串起来组成一个链子。



2.项目环境
system:win7

myeclipse:6.5

tomcat:5.0

JDK:开发环境1.5,编译环境1.4

project

此工程在上一节的基础之上增加了一个GroupServiceHandler2类和GroupServiceChain类;

GroupServiceHandler2.java复制了GroupServiceHandler1.java;

GroupServiceChain.java是一个chain处理类;



3.chain介绍
Handler Chain是实现一连串多个Handler的链,Chain必须继承SimpleChain类,然后在构造方法中使用:this.addHandler(handler对象);将Handler加入到Chain中。

那么,根据以上的描述,开发一个chain的流程如下:

(1)新建一个类,然后继承SimpleChain类;

(2)在wsdd配置文件中加入chain处理类,通过<chain></chain>标签加入;

(3)在需要的webservice服务中引入chain,通过<requestFlow></requestFlow>标签引入;



4.项目代码
声明:下面中写的同上,指的是和上一节博客webservice系列2---javabean&handler中的一模一样;

新建工程,导入jar包,jar包同上;

配置文件:

web.xml---web.xml同上;

server-config.wsdd

 <?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">
     <globalConfiguration>
         <parameter name="sendMultiRefs" value="true" />
         <parameter name="disablePrettyXML" value="true" />
         <parameter name="adminPassword" value="admin" />
         <parameter name="attachments.Directory"
             value="D:\tomcat5\webapps\WebService\WEB-INF\attachments" />
         <parameter name="dotNetSoapEncFix" value="true" />
         <parameter name="enableNamespacePrefixOptimization"
             value="false" />
         <parameter name="sendXMLDeclaration" value="true" />
         <parameter name="sendXsiTypes" value="true" />
         <parameter name="attachments.implementation"
             value="org.apache.axis.attachments.AttachmentsImpl" />
         <requestFlow>
             <handler type="java:org.apache.axis.handlers.JWSHandler">
                 <parameter name="scope" value="session" />
             </handler>
             <handler type="java:org.apache.axis.handlers.JWSHandler">
                 <parameter name="scope" value="request" />
                 <parameter name="extension" value=".jwr" />
             </handler>
         </requestFlow>
     </globalConfiguration>
     <handler name="LocalResponder"
         type="java:org.apache.axis.transport.local.LocalResponder" />
     <handler name="URLMapper"
         type="java:org.apache.axis.handlers.http.URLMapper" />
     <handler name="Authenticate"
         type="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
     <service name="AdminService" provider="java:MSG">
         <parameter name="allowedMethods" value="AdminService" />
         <parameter name="enableRemoteAdmin" value="false" />
         <parameter name="className" value="org.apache.axis.utils.Admin" />
         <namespace>http://xml.apache.org/axis/wsdd/</namespace>
     </service>
     <service name="Version" provider="java:RPC">
         <parameter name="allowedMethods" value="getVersion" />
         <parameter name="className" value="org.apache.axis.Version" />
     </service>
 
     <transport name="http">
         <requestFlow>
             <handler type="URLMapper" />
             <handler
                 type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
         </requestFlow>
         <parameter name="qs:list"
             value="org.apache.axis.transport.http.QSListHandler" />
         <parameter name="qs:wsdl"
             value="org.apache.axis.transport.http.QSWSDLHandler" />
         <parameter name="qs.list"
             value="org.apache.axis.transport.http.QSListHandler" />
         <parameter name="qs.method"
             value="org.apache.axis.transport.http.QSMethodHandler" />
         <parameter name="qs:method"
             value="org.apache.axis.transport.http.QSMethodHandler" />
         <parameter name="qs.wsdl"
             value="org.apache.axis.transport.http.QSWSDLHandler" />
     </transport>
     <transport name="local">
         <responseFlow>
             <handler type="LocalResponder" />
         </responseFlow>
     </transport>
 
     <!-- 配置一个chain,用来统计webservice的访问次数 -->
     <chain name="GroupServiceChain1">
         <handler type="java:com.server.chain.GroupServiceChain"/>
     </chain>
 
     <!-- 配置自己的服务 -->
     <service name="GroupService" provider="java:RPC">
        <!-- 暴露部分方法
        <parameter name="allowedMethods" value="方法1,方法2" />
         -->
         <parameter name="allowedMethods" value="*" />
         <parameter name="className"
             value="com.server.impl.IGroupInfoServiceImpl" />
         <!-- 配置javabean  -->
         <beanMapping
             languageSpecificType="java:com.server.bean.GroupInfo"
             qname="ns:GroupInfo" xmlns:ns="urn:BeanService">
         </beanMapping>
 
         <beanMapping
             languageSpecificType="java:com.server.bean.UserInfo"
             qname="ns:UserInfo" xmlns:ns="urn:BeanService">
         </beanMapping>
 
 
         <!-- 引入一个用来统计webservice的访问次数的chain -->
         <requestFlow>
            <chain type="GroupServiceChain1"/>
         </requestFlow>
 
     </service>
 </deployment>

服务端代码:

(1)javabean

GroupInfo.java和UserInfo.java代码同上;

(2)服务类和接口

IGroupInfoService.java和IGroupInfoServiceImpl.java文件的代码同上;

(3)handler处理类

GroupServiceHandler.java代码同上;

GroupServiceHandler2.java---也是统计webservice访问次数的,直接把GroupServiceHandler拷贝过来稍作修改;

 package com.server.wsddhandler;
 
 import org.apache.axis.AxisFault;
 import org.apache.axis.MessageContext;
 import org.apache.axis.handlers.BasicHandler;
 
 /*
  * 采用handler统计webservice的访问次数
  */
 public class GroupServiceHandler2 extends BasicHandler {
 
     private static final long serialVersionUID = 2L;
 
     private static long COUNT = 0L;
 
     private int requestCount = 0;
 
     public void invoke(MessageContext arg0) throws AxisFault {
         requestCount++;
         COUNT++;
         //拿到配置文件中配置的属性名称status对应的属性值
         String status = (String) this.getOption("status");
         System.out.println("This is an other handler. GroupServiceHandler2's status is:" + status
                 + ",COUNT=" + COUNT + ",HandlerRequestCount=" + requestCount);
 
     }
 
 };

(4)chain处理类

GroupServiceChain.java

 package com.server.chain;
 
 import org.apache.axis.SimpleChain;
 
 import com.server.wsddhandler.GroupServiceHandler;
 import com.server.wsddhandler.GroupServiceHandler2;
 
 public class GroupServiceChain extends SimpleChain {
 
     private static final long serialVersionUID = 3L;
 
     public GroupServiceChain(){
         GroupServiceHandler handler1=new GroupServiceHandler();
         GroupServiceHandler2 handler2=new GroupServiceHandler2();
         
         this.addHandler(handler1);
         this.addHandler(handler2);
     }
 
 }
客户端代码:

WebServiceClientUtil.java的代码同上,只是需要修改一下wsdl地址;

原有的以下两行改成:

String wsdl_url = "http://localhost:8080/WebService03/services/GroupService?wsdl";
String qname_url = "http://localhost:8080/WebService03/services/GroupService";



5.运行结果
发布项目,启动tomcat服务器;

(1)在浏览器输入wsdl地址

http://localhost:8080/WebService03/services/GroupService?wsdl

(2)采用webservice客户端调用,查看返回结果

客户端后台日志:


服务端后台日志:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值