zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SHELL基础
    阿里
    Ansible基础
    js实现的跳转页面方法实现汇总
    绕过js-sdk,微信转发的时候在标题添加时间和地点。
    wechat-js-sdk
    js调用百度地图api实现定位
    微创网站工作总结:用错地方的资源
    项目进行时—整理
    js实现双击改变文本内容
  • 原文地址:https://www.cnblogs.com/zhangguangju/p/4972446.html
Copyright © 2011-2022 走看看