webservice系列2---javabean&handler
摘要:本节主要介绍以下两点,1.带javabean的webservice的开发和调用 2.handler的简单介绍及使用
1.引言 在之前的一篇博客 webservice系列1---基于web工程上写一个基本数据类型的webservice 中介绍了如何采用axis1.4来完成一个简单的webservice的开发流程(入参和出参都是基本类型),但是在实际的开发中,方法的入参和出参基本类型已经无法满足我们日常的需求,如果方法的入参和出参中有对象的时候,我们要怎么处理呢?通过本节的介绍我会一一道来。 同时,我会引入对handler的介绍以及简单的使用,写了一个统计webservice调用次数的handler。 2.项目环境 system:win7 myeclipse:6.5 tomcat:5.0 JDK:开发环境采用JDK1.5;编译环境采用JDK1.4 axis:仍然采用1.4的版本。采用版本1是axis1比axis2稳定,实际项目中我们项目中也只用axis1,axis1.4是目前axis1最新版本。 这里测试客户端和服务端放在同一个工程的不同package中; 图中多个handler在一起,其实这就组成了chain,后面我会对这个做个简单的介绍; 配置文件 <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <servlet> <servlet-name>AxisServlet</servlet-name> <servlet-class> org.apache.axis.transport.http.AxisServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>AxisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping> </web-app>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: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> <!-- 配置一个handler,用来统计webservice的访问次数 --> <handler name="GroupServiceHandler1" type="java:com.server.wsddhandler.GroupServiceHandler"> <parameter name="status" value="success" /> </handler> <!-- 配置自己的服务 --> <service name="GroupService" provider="java:RPC"> <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的访问次数的handler --> <responseFlow> <handler type="GroupServiceHandler1" /> </responseFlow> </service> </deployment> 服务端代码 (1)javabean GroupInfo.java
package com.server.bean; import java.util.List; public class GroupInfo { private List colNames = null; // 数据库表的列名组成的List private String[] colValues; // 数据库表一条记录的各个列的值组成的数组,即一条数据库表记录值 private int colCount = 0; // 数据库表记录的列数 private UserInfo userInfo = null; public List getColNames() { return colNames; } public void setColNames(List colNames) { this.colNames = colNames; } public String[] getColValues() { return colValues; } public void setColValues(String[] colValues) { this.colValues = colValues; } public int getColCount() { return colCount; } public void setColCount(int colCount) { this.colCount = colCount; } public UserInfo getUserInfo() { return userInfo; } public void setUserInfo(UserInfo userInfo) { this.userInfo = userInfo; } }UserInfo.java
package com.server.bean; public class UserInfo { private String serverIp = ""; private String localIp = ""; private long opId = 0; public String getServerIp() { return serverIp; } public void setServerIp(String serverIp) { this.serverIp = serverIp; } public String getLocalIp() { return localIp; } public void setLocalIp(String localIp) { this.localIp = localIp; } public long getOpId() { return opId; } public void setOpId(long opId) { this.opId = opId; } }
(2)服务类 ?IGroupInfoService.java
package com.server.interfaces; import com.server.bean.GroupInfo; import com.server.bean.UserInfo; /** * *Module: IGroupInfoService.java *Description: 带javabean的webservice的服务 *Company: *Version: 1.0.0 *Author: pantp *Date: Aug 21,2012 */ public interface IGroupInfoService { public abstract GroupInfo getGroupInfo(UserInfo userInfo,long groupId); }IGroupInfoServiceImpl.java
package com.server.impl; import java.util.ArrayList; import java.util.List; import com.server.bean.GroupInfo; import com.server.bean.UserInfo; import com.server.interfaces.IGroupInfoService; public class IGroupInfoServiceImpl implements IGroupInfoService { public GroupInfo getGroupInfo(UserInfo userInfo,long groupId) { System.out.println("开始打印入参值..."); System.out.println("groupId:" + groupId); System.out.println("serInfo.getOpId():" + userInfo.getOpId()); System.out.println("serInfo.getServerIp():" + userInfo.getServerIp()); System.out.println("serInfo.getLocalIp():" + userInfo.getLocalIp()); System.out.println("结束打印入参值..."); // 这里是为了学习webservice调用时带javabean,所以方法的返回值就直接手动的构造了 GroupInfo group = new GroupInfo(); group.setColCount(1); List colNames = new ArrayList(); colNames.add("group_id"); colNames.add("group_name"); colNames.add("state"); group.setColNames(colNames); String colValues[] = { "2100014","中国移动通信","1" }; group.setColValues(colValues); group.setUserInfo(userInfo); return group; } }
(3)handler处理类 GroupServiceHandler.java package com.server.wsddhandler; import java.text.SimpleDateFormat; import java.util.Date; import org.apache.axis.AxisFault; import org.apache.axis.MessageContext; import org.apache.axis.handlers.BasicHandler; /* * 采用handler统计webservice的访问次数 */ public class GroupServiceHandler extends BasicHandler { private static final long serialVersionUID = 1L; 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("GroupServiceHandler's status is:" + status + ",COUNT=" + COUNT + ",HandlerRequestCount=" + requestCount); Date date=new Date(); SimpleDateFormat df=new SimpleDateFormat("yyyy年MM月dd日 HH:mm:SS E"); System.out.println("access time:"+df.format(date)); } }; 5.运行效果 发布项目,启动tomcat服务器; (1)在浏览器输入wsdl地址 http://localhost:8080/WebService02/services/GroupService?wsdl (2)采用webservice客户端调用,查看返回结果 服务端后台日志: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |