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 此工程在上一节的基础之上增加了一个GroupServiceHandler2类和GroupServiceChain类; <?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:tomcat5webappsWebServiceWEB-INFattachments" /> <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客户端调用,查看返回结果 服务端后台日志: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |