axis2 发布web服务,非pojo,非内置axis2

一、使用services.xml发布你的Service

 

在上一章中,笔者给大家演示了如何使用Axis2的0配置发布Service,虽然很简单,但不知大家是否发现,我们所发布的Service是没有带包的,但实际开发过程中这几乎是不可能的。POJO不可能单单仅放置在\WEB-INF\POJO\目录下,因为没有包,咱们的POJO管理几乎是非常不方便的。

 

打开你的IDE,咱们接下来编写一个带包的POJO发布成Service:

 

 

上述是笔者项目的工程目录结构,可见笔者要将发布成Service 的POJO安置在org.johngao.service包下,先来看看POJO中的内容吧:

 

Java代码  收藏代码
  1. <span style="font-size: small;">package org.johngao.service;  
  2.   
  3. /** 
  4.  *  用户登陆效验 
  5.  * 
  6.  *  @author JohnGao 
  7.  */  
  8. public class LoginValidate   
  9. {  
  10.     /** 
  11.      *  用户账号与密码效验 
  12.      * 
  13.      *  @author JohnGao 
  14.      *  
  15.      *  @param String: 用户账号, 用户密码 
  16.      *  
  17.      *  @throws Exception 
  18.      *  
  19.      *  @return boolean: 登陆效验结果 
  20.      */  
  21.     public boolean validate(String account, String pwd)   
  22.             throws Exception  
  23.     {  
  24.         /* 登陆效验 */  
  25.         if("admin".equals(account))  
  26.             if("123456".equals(pwd))  
  27.                 return true;  
  28.         return false;  
  29.     }  
  30. }</span>  

 

上述POJO中的内容笔者提供了一个validate()方法模拟用户登陆效验。因为当系统选择集成后,可能会共用同一平台资源,所以我们需要将登陆进行整合

 

在发布之前我们先按照管理跑JUnit看看效果以确保我们发布的Service能够正常工作:

 

 

值得庆幸的是,咱们的POJO顺利通过测试,那么接下来咱们就需要将该POJO发布为Service了。但是在发布之前咱们仍然有一些准备工作要做,因为咱们不可能继续将带包的POJO放置在\WEB-INF\POJO\目录下。

想要将带包的POJO顺利发布成Service,那么必不可少的条件就是需要services.xml文件,因为该文件描绘与类的关系结构

 

关于services.xml该放置在何处呢?然后又该怎么发布呢?别急,听笔者细细道来。你首先需要在工程目录下新建一个\META-INF\文件夹,然后新建一个service.xml文件即可。

services.xml文件中的内容如下:

 

Java代码  收藏代码
  1. <span style="font-size: small;"><?xml version="1.0" encoding="UTF-8"?>  
  2. <!-- Service名称 -->  
  3. <service name="myService">  
  4.     <!-- Service描述 -->  
  5.     <description>  
  6.         登陆效验Service  
  7.     </description>  
  8.     <!-- 描绘包与类的关系结构 -->     
  9.     <parameter name="ServiceClass">  
  10.         org.johngao.service.LoginValidate  
  11.     </parameter>  
  12.     <!-- 定义方法处理器 -->  
  13.     <messageReceivers>  
  14.         <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"  
  15.             class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  
  16.         <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"  
  17.             class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />  
  18.     </messageReceivers>  
  19. </service></span>  

 

上述文件中<service/>标签描绘了你的Service结构,但一个<service/>标签仅用于描绘一个POJO,其中属性name则定义了目标Service的名称。<description/>标签用于描绘该Service的作用。<parameter/>标签比较关键,描绘了POJO与包的结构关系,然后通过反射的形式进行加载调用。而<messageReceivers>标签则尤为重要,该标签定义了Service的方法处理器,什么是方法处理器呢?或许这个名字比较绕口,但理解起来还是挺容易的,换句话来说方法处理器可以理解为对方法返回结果的管理。因为我们所发布的Service方法并不一定每一个都是具备返回值。假设你的Service并无返回值,那么你可以选择RPCInOnlyMessageReceiver(输入处理器)类作为你的方法处理器,反之可以选择RPCMessageReceiver(输入输出处理器)类作为你的方法处理器。

 

提示:

如果你在services.xml文件中需要发布多个Service,那么你可以使用<serviceGroup/>标签:

 

Java代码  收藏代码
  1. <span style="font-size: small;"><serviceGroup>  
  2.     <service>  
  3.         <!-- 第一个Service -->  
  4.     </service>  
  5.     <service>  
  6.         <!-- 第二个Service -->  
  7.     </service>  
  8. </serviceGroup></span>  

 

 

接下来要做的事情就是你最期待的,那便是将带包的POJO发布成Service进行调用。当然你选择使用service.xml文件的形式发布Service,首先则必须将项目打包成".aar"文件(也就是".jar")。你可以先将项目打包成jar,然后再将文件后缀改变为aar即可,当然不改也行,只是为了遵循Axis2的规范,笔者还是建议你将文件后缀改成aar。

 

 

这里笔者需要提醒你的是,在将项目打包时,你只需要选择\META-INFA\service.xml即可,字节码文件不需要一起打包:

 

 

接下来我们需要将打包好的aar文件放置在\axis2\WEB-INF\services\目录下。当然这样还并没有结束,你还需要将项目的字节码文件放置在\axis2\WEB-INF\classes\目录下,或者以jar包的形式放置在\axis2\WEB-INF\lib\目录下都可以。当然笔者还是选择将字节码文件放置在classes目录下。

 

启动你的Web容器,输入http://ip:port/axis2/services/listServices进行访问:

 

posted @ 2013-03-07 16:33  csophys  阅读(277)  评论(0)    收藏  举报