编写Module模块

简介: 九、 编写Module模块 Axis可以通过Module模块进行扩展,用户可以编写定制自己的Module模块。编写一个Module的模块至少需要实现两个接口,分别是Handler和Module接口。
九、 编写Module模块

Axis可以通过Module模块进行扩展,用户可以编写定制自己的Module模块。编写一个Module的模块至少需要实现两个接口,分别是Handler和Module接口。开发axis2的Module模块需要如下步骤:

1、 实现Module接口的实现类,这个类要完成基本的初始化、销毁等操作

2、 实现Handler接口的实现类,这个类主要是完成业务处理

3、 在META-INF目录下,创建module.xml配置文件

4、 在axis2.xml中增加配置module的模块

5、 在services.xml中增加module的模块配置

6、 最后发表axis2的module模块,需要用jar命令将工程打包成mar,然后将mar文件发布到[tomcat_home]/webapps/axis2/WEB-INF/modules目录下;

首先编写一个简单的WebService,代码如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码 package com.hoo.module; import java.util.Random; /** * function:编写一个简单的WebService服务器端代码 * @author hoojo * @createDate 2011-3-15 上午06:19:15 * @file SimpleWebService.java * @package com.hoo.module * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class SimpleWebService { public int randInt() { return new Random().nextInt(100); } }

编写Module接口的实现类,代码如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码 package com.hoo.module; import org.apache.axis2.AxisFault; import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.description.AxisDescription; import org.apache.axis2.description.AxisModule; import org.apache.axis2.modules.Module; import org.apache.neethi.Assertion; import org.apache.neethi.Policy; /** * function:axis2模块,实现Module接口实现类 * @author hoojo * @createDate 2011-3-15 上午03:22:24 * @file CustomModule.java * @package com.hoo.module * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class CustomModule implements Module { public void applyPolicy(Policy policy, AxisDescription axisDescription) throws AxisFault { System.out.println("###############applyPolicy##############"); } public boolean canSupportAssertion(Assertion assertion) { System.out.println("##############canSupportAssertion##############"); return true; } public void engageNotify(AxisDescription axisDescription) throws AxisFault { System.out.println("##############engageNotify#############"); } public void init(ConfigurationContext ctx, AxisModule module) throws AxisFault { System.out.println("##############init##############"); } public void shutdown(ConfigurationContext ctx) throws AxisFault { System.out.println("##############shutdown#############"); } }

编写实现Handler接口的实现类,代码如下:

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码 package com.hoo.module; import org.apache.axis2.AxisFault; import org.apache.axis2.context.MessageContext; import org.apache.axis2.description.HandlerDescription; import org.apache.axis2.description.Parameter; import org.apache.axis2.engine.Handler; /** * function:axis2模块Handler接口实现 * @author hoojo * @createDate 2011-3-15 上午03:37:43 * @file CustomHandler.java * @package com.hoo.module * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class CustomHandler implements Handler { private String name; public void setName(String name) { this.name = name; } public String getName() { return this.name; } public void cleanup() { System.out.println("###########cleanup###########"); } public void flowComplete(MessageContext ctx) { System.out.println("###########flowComplete###########"); System.out.println(ctx.getEnvelope().toString()); } public HandlerDescription getHandlerDesc() { System.out.println("###########getHandlerDesc###########"); return null; } public Parameter getParameter(String name) { System.out.println("###########getParameter###########"); return null; } public void init(HandlerDescription handlerDescription) { System.out.println("###########init###########"); } public InvocationResponse invoke(MessageContext ctx) throws AxisFault { System.out.println(ctx.getEnvelope().toString()); return InvocationResponse.CONTINUE; } }

编写module.xml文件

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码 module name="customModule" class="com.hoo.module.CustomModule"> InFlow> handler name="InFlowLogHandler" class="com.hoo.module.CustomHandler"> order phase="customPhase"/> handler> InFlow> OutFlow> handler name="OutFlowLogHandler" class="com.hoo.module.CustomHandler"> order phase="customPhase"/> handler> OutFlow> InFaultFlow> handler name="FaultInFlowLogHandler" class="com.hoo.module.CustomHandler"> order phase="customPhase"/> handler> InFaultFlow> OutFaultFlow> handler name="FaultOutFlowLogHandler" class="com.hoo.module.CustomHandler"> order phase="customPhase"/> handler> OutFaultFlow> module>

编写services.xml文件

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码 service name="CustomModuleService"> description>使用CustomModule SimpleWebService模块description> module ref="customModule"/> parameter name="ServiceClass"> com.hoo.module.SimpleWebService parameter> messageReceivers> messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> messageReceivers> service>

在[tomcat_home]\webapps\axis2\WEB-INF\conf中axis2.xml文件中加入内容,在所有的标签中加入

打包发布module,在c盘建立CustomModuleService,然后将CustomModule.class和CustomHandler.class以及类路径目录复制到该目录。然后将module.xml文件放到META-INF(没有新建)目录。

运行jar命令:jar cvf custom-module.mar .

将生成的custom-module.mar文件粘贴到[tomcat_home] \webapps\axis2\WEB-INF\modules目录中

发布WebService,建立目录simpleWebService,将SimpleWebService.xml和类路径复制到该目录下,将services.xml复制到META-INF目录。

运行jar命令:jar cvf simple-service.aar .

将生成的simple-service.aar文件复制到[tomcat_home] \webapps\axis2\WEB-INF\services目录下

然后重启tomcat服务。

客户端访问WebService代码

img_1c53668bcee393edac0d7b3b3daff1ae.gif img_405b18b4b6584ae338e0f6ecaf736533.gif 代码 package com.hoo.service; import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; /** * function:访问SimpleWebService * @author hoojo * @createDate 2011-3-15 上午07:26:08 * @file SimpleWebServiceClient.java * @package com.hoo.service * @project Axis2WebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class SimpleWebServiceClient { public static void main(String[] args) throws AxisFault { String target = "http://localhost:8080/axis2/services/CustomModuleService"; RPCServiceClient client = new RPCServiceClient(); Options options = client.getOptions(); options.setManageSession(true); EndpointReference epr = new EndpointReference(target); options.setTo(epr); QName qname = new QName("http://module.hoo.com", "randInt"); Object[] result = client.invokeBlocking(qname, new Object[] { null }, new Class[] { int.class }); System.out.println(result[0]); } }

目录
相关文章
|
Java
给网站添加微信扫描二维码登录功能
最近网站PC端集成微信扫码登录,踩了不少坑,在此记录下实现过程和注意事项。
4458 0
|
弹性计算 网络协议 关系型数据库
阿里云ECS安装mysql8远程连接详细操作
阿里云安装mysql8远程连接详细操作
|
10月前
|
监控 物联网 5G
5G物联网卡普及说明
以下是根据5G物联网卡的相关知识,给出一个一般性的普及说明,并假设在某些“以上内容”的情境下如何进行这一普及。
|
11月前
|
JavaScript 开发者 Docker
深入理解Docker容器化技术,打造高效开发环境
深入理解Docker容器化技术,打造高效开发环境
|
数据安全/隐私保护 Android开发 iOS开发
阿里企业邮箱登陆入口
阿里企业邮箱登陆入口https://qiye.aliyun.com/ 阿里企业邮箱可以使用邮箱账号登录,也可以使用钉钉账号登录
6889 0
阿里企业邮箱登陆入口
|
SQL 存储 OLAP
FFA 2023 「核心技术」专场: Flink 核心技术动向深度解读
完整议程已公开,期待 12 月 8-9 日与你 Flink Forward Asia 2023 相会!
574 0
FFA 2023 「核心技术」专场: Flink 核心技术动向深度解读
|
JavaScript 前端开发 中间件
解决跨域的九种方法
跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。
722 0
解决跨域的九种方法
|
消息中间件 监控 安全
线程池面试那些事儿!
相信各位 Javaer 在面试中或多或少肯定被问到过线程池相关问题吧,线程池是一个相对比较复杂的体系,基于此可以问出各种各样、五花八门的问题。 若你很熟悉线程池,如果可以,完全可以滔滔不绝跟面试官扯一个小时线程池,一般面试也就一个小时左右,那么这样留给面试官问其他问题的时间就很少了,或者其他问题可能问的也就不深入了,那你通过面试的几率是不就更大点了呢。
266 1
线程池面试那些事儿!
|
XML SQL Java
[翻译]Mybatis useGeneratedKeys参数的使用和自增主键的获取方式
对于支持自动生成记录主键的数据库,如 MySQL 和 SQL Server,将 useGeneratedKeys 参数的值设置为 true,就可以在记录insert成功后获得数据库自动生成的主键 ID
663 0
|
存储 Linux API
CrossOver23mac苹果电脑如何下载Windows软件
Mac计算机一向要运行Windows应用程序,都需要安装Parallels Desktop、Wine等虚拟计算机或程序转换工具,但Apple推出了自家制M1芯片的Mac计算机后,这些工具都未能成功过渡。近日原Wine制作商就宣布推出全新“CrossOver”工具,能够将Windows应用程序直接在M1芯片的全新Mac计算机上运行。
536 0