AXIS2 开发WebService

1.服务端的开发

    a.     axis2不支持事务。对数据库增删改查一般都需要事务处理的,但是在对外发布的接口中是不能配置事务的。

              解决方法:或者写一个代理类或者直接在dao中进行事务管理。

           b.     axis2不支持方法重载。

           在对外发布的接口中不能使用方法重载,

                  [WARN] We don't support method overloading. Ignoring [updateClassifyTask]
                  [WARN] We don't support method overloading. Ignoring [updateClassifyTask]
                  [WARN] We don't support method overloading. Ignoring [updateClassifyTask]

                 如果你写了多个重名的方法,在该service中只会注册一个。

                 解决方法:无。要么更改成不同的方法名要么在传参上想办法

    c.      AXIS2 1.4.1 does not support java.util.Date type

                 Time portion of java.util.Date is missing from SOAP response in Axis2 1.5

                 瞧瞧axis2 的这些个bug,使用起来太不方便了。

                 虽然Apache的官方网站的bug页上有解决方案,但是我把DateServuce。aar文件考下来后仍然报相同的错误:

                 [ERROR] date string can not be less than 19 charactors

                 Caused by: java.lang.NumberFormatException: date string can not be less than 19 charactors

                 也不知道是怎么个意思,是把日期转换一下吗?好郁闷- - !

                  Axis2 1.5只能返回日期部分,时间部分丢失了!

                  解决方法:把Date类型都改成String类型的,这样是最安全的,但可能跟要求不符,应该不能算是一个好的解决方案吧。

           d.    axis2不能传递list类型的数据集合。

                   解决方法:将list转换成数组类型。这个还不算麻烦吧。

           e.    配置axis2  servlet的是时候要配置成/services/*的形式,因为生成本地代码的时候本地代码已经含有地址,不能手动填入地址,发现如果配置成/erbServices/*这样子不可以

2.与Spring 整合

    a.    web.xml中配置axis2 servlet

<servlet>
      <servlet-name>AxisServlet</servlet-name>  
      <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>  
      <load-on-startup>1</load-on-startup>  
  </servlet>  
  <servlet-mapping>  
        <servlet-name>AxisServlet</servlet-name>  
        <url-pattern>/services/*</url-pattern>  
  </servlet-mapping>

          b.    建立发布webService的配置文件

      在webroot下面建立services文件夹名字必须为services,services文件夹下面在建立一个文件夹,名字可随便起,如:mytest,testService等等,如果起名为mytest ,在mytest文件夹下面在建立META-INF文件夹,

                 在META-INF文件夹下创建ServiceData.xml(里边是空文件,如果不建立,会报找不到此文件异常,暂时没发现有什么其他作用)和services.xml(里边定义webservice向外暴露的接口)

      

      ServiceData.xml

<?xml version="1.0" encoding="UTF-8"?>
<ServiceData>  
</ServiceData>

                 services.xml         

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
    <service name="EmpService">
        <description>axis2与spring集成案例</description>
        <!-- 通过ServiceObjectSupplier参数指定SpringServletContextObjectSupplier类
               来获得Spring的ApplicationContext对象 
        -->
        <parameter name="ServiceObjectSupplier">
            org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier
        </parameter>
        <!-- 
             SpringBeanName固定的不能改
             helloWorld是spring中注册的实现类得id
         -->
        <parameter name="SpringBeanName">empWebService</parameter>
        <!-- 
                在这里最值得注意的是<messageReceivers>元素,该元素用于设置处理WebService方法的处理器。
                例如,getGreeting方法有一个返回值,因此,需要使用可处理输入输出的RPCMessageReceiver类,
                而update方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。
         -->
        <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>
</serviceGroup>

          c.集成spring配置

      在application-context.xml中配置以下bean

      <bean id="applicationContext" class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" />                  

                  发布成功后测试地址eg:  http://localhost:8084/pro_service/services/EmpService?wsdl

 

posted @ 2015-11-17 17:59  张广举  阅读(486)  评论(0编辑  收藏  举报