[置顶] webservice系列3---chain
2013-05-08 15:03
483 查看
本节摘要:本节主要介绍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
此工程在上一节的基础之上增加了一个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
服务端代码:
(1)javabean
GroupInfo.java和UserInfo.java代码同上;
(2)服务类和接口
IGroupInfoService.java和IGroupInfoServiceImpl.java文件的代码同上;
(3)handler处理类
GroupServiceHandler.java代码同上;
GroupServiceHandler2.java---也是统计webservice访问次数的,直接把GroupServiceHandler拷贝过来稍作修改;
(4)chain处理类
GroupServiceChain.java
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客户端调用,查看返回结果
客户端后台日志:
服务端后台日志:
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
此工程在上一节的基础之上增加了一个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客户端调用,查看返回结果
客户端后台日志:
服务端后台日志:
相关文章推荐
- [置顶] webservice系列1---基于web工程上写一个基本数据类型的webservice
- [置顶] webservice系列2---javabean&handler
- [置顶] webservice的安全机制1---users.lst
- [置顶] webservice的安全机制2---handler实现
- [置顶] webservice的安全机制3---Filter
- [置顶] mybatis高级应用系列一:分页功能
- [置顶] axis 开发webservice
- [置顶] jquery技巧总结
- [置顶] Jquery为单选框checkbox绑定单击事件
- [置顶] spring管理hibernate事务报异常--Transaction not successfully started解决方法
- [置顶] jstl学习笔记(上)
- [置顶] jQuery乱谈(二)
- [置顶] jQuery 插件开发基础
- [置顶] 设计模式之六大原则——依赖倒置原则(DIP)
- [置顶] 那一年,我们二十七八岁
- [置顶] 设计模式之创建类模式——建造者模式
- [置顶] JS操作SELECT表单大全,赋默认值,取值,增,删
- webservice系列3---chain
- [置顶] jBPM4工作流开发实战 之 第一部分 工作流基础
- [置顶] SiteMesh 3.0版本的简单使用