• 使用axis2和spring发布webservice服务


        问题:有一个类,类里可能是这么写的:

        Public class A{

     public B doit(C c){

                 ..........

             } 

        } 

        现在如果想把这个类发布成webservice服务供外部程序调用,需要解决一个问题 -- 外部程序如何知道类B和类C的结构?

        如果单纯使用axis2发布服务,传统做法可能是利用axis2插件或axis2提供的可执行文件根据类A生成N个文件,这些文件有一部分是代理了类B和类C的结构,并在代理类里加入了若干复杂且不知所云的方法,另外一部分代理了类A的结构,并使用了类B和类C的代理类作为参数,你需要将业务逻辑写在这个类A的代理类里面。将来服务发布成功以后,外部程序调用的其实是类A的代理类。这一团相互调用复杂的东东一旦出了问题跟踪起来让人一头雾水。

        现在使用了 spring,你只需要将类A做成spring里面的bean,类B和类C会自动被识别。类似这样:

        <bean id="AService" class="com.izumi.webservice.A"></bean> 

        对于环境的要求也很简单:

        1、包: axis2_XXXXX.jar(多个)  spring.jar(如果axis2版本过低,比如1.3,虽然内置了spring的包但版本过低,需要引进单独的spring.jar包,如果版本较高或许没这个必要,待验证)

        2、配置文件:

        web.xml中加入对spring的配置:

            <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath*:*/spring/*.xml</param-value>
    </context-param>
    <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>
    <servlet-name>AxisAdminServlet</servlet-name>
    <servlet-class>
    org.apache.axis2.transport.http.AxisAdminServlet
    </servlet-class>
    </servlet>
    <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/servlet/AxisServlet</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>*.jws</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>AxisServlet</servlet-name>
    <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>AxisAdminServlet</servlet-name>
    <url-pattern>/axis2-admin/*</url-pattern>
    </servlet-mapping> 

        spring配置文件:

        <bean id="privatePayBillService" class="com.izumi.webservice.server.privatepaybill.PrivatePayBill"></bean> 

        3、修改WEB-INF/services下的services.xml

    <service name="PrivatePayBillService">
    <description>
    Weather Spring POJO Axis2 AAR deployment
                    </description>
    <parameter name="ServiceClass">com.izumi.A
    </parameter>                   
    <parameter name="ServiceObjectSupplier">org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier
    </parameter>
    <parameter name="SpringBeanName">AService
    </parameter>
    <messageReceivers>
    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
    class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
    class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
    </messageReceivers>

    </service> 

    说明:

    1、service的name就是发布服务的名字 ,SpringBeanName 必须和spring配置文件中bean的id对应。

    2、访问服务的wsdl使用这个url路径查看http://IP地址:端口号/应用名/services/服务名?wsdl 

  • 相关阅读:
    安装VMware Tools
    屏幕分辨率
    常用的几种进程通信方式的比较(转载)
    情绪低落
    mvc中validateinput属性在asp.net4中不工作
    读取 XML 数据时,超出最大字符串内容长度配额 (8192)
    excel检测到xls 是sylk文件 解决
    简化自己的一个工程,共享给大家:Silverlight 做的Link Map
    (转)WCF/Silverlight 相关总结
    DOM节点方法介绍
  • 原文地址:https://www.cnblogs.com/mabaishui/p/2015100.html
Copyright © 2020-2023  润新知