`
lichaobao
  • 浏览: 47088 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

在自己的项目中利用axis2+spring发布webservice与客户端调用包括session

阅读更多

axis2-1.6.2+spring3.1.4发布webservice客户端调用总结

   

一、下载axis2-1.6.2

    下载地址:http://axis.apache.org/axis2/java/core/download.cgi,自己根据情况确定下载,本人下载

二、spring3.1.4下载

    这个根据自己项目需要下载对应的版本,这里就不说明。

 

三、创建整合工程并发布测试

 

    3.1、创建工程名为axis

    3.2、导入需要的axisspringJar

       axisJar(相对较精简的Jar包,可能其他情况还需要用别的jar,下面的jar足以发布webservice,可能还可以精简)

客户端测试必须的jar,可能还需要其他包

  httpcore-4.0.jar

  commons-httpclient-3.1.jar

axis2spring整合的jar包: 

    axis2-spring-1.6.2.jar

    axis-xmlbeans-1.6.2.har不知道是否有用

springJar

 

    3.3、编写普通Java  LessonAction.java  代码如下:

        publicclass LessonAction {

            publicint add(int a,int b){

               return a+b;

            }

        }

    3.4、编写spring的配置文件applicationContext.xml   代码如下:

<beans xmlns="http://www.springframework.org/schema/beans"

    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

    xmlns:context="http://www.springframework.org/schema/context"

    xmlns:aop="http://www.springframework.org/schema/aop"

    xmlns:tx="http://www.springframework.org/schema/tx"

    xsi:schemaLocation="http://www.springframework.org/schema/beans

                         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

                         http://www.springframework.org/schema/context

                         http://www.springframework.org/schema/context/spring-context-3.0.xsd

                         http://www.springframework.org/schema/tx

                         http://www.springframework.org/schema/tx/spring-tx-3.0.xsd

                         http://www.springframework.org/schema/aop

                         http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

 

 

   <!-- 如果没有配置对应的bean,运行则报错,Caused by: org.apache.axis2.deployment.DeploymentException: The following error occurred during schema generation: No bean named 'lessonAction' is defined  由于在services.xml需要用到这里配置的bean -->

    <bean id="lessonAction" class="com.lcb.axis.service.LessonAction"></bean>

</beans>

   

<!-- 手动为axis2使用的bean配置事务开始 -->

<bean id="transactionBase"  

class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"  

            lazy-init="true" abstract="true">  

        <!-- 配置事务管理器 -->  

        <property name="transactionManager" ref="transactionManager" />  

        <!-- 配置事务属性 -->  

        <property name="transactionAttributes">  

            <props>  

                <prop key="*">PROPAGATION_REQUIRED</prop>  

            </props>  

        </property>  

    </bean> 

 

<bean id="lessonActionTarget" class=" com.lcb.axis.service.LessonAction "></bean>

<bean id="ariesService"  parent="transactionBase" >  

        <property name="target" ref=" lessonActionTarget " /> 

    </bean>

  <!--<bean id="lessonAction" class="com.lcb.axis.service.LessonAction"> </bean>  -->

</beans>

<!--EndFragment-->

    3.5、在WEB-INF下创建services文件夹,,名字一定是services,其他不能识别,在services一定要再创建一个文件夹(名字顺便,例如:MyService),在MyService下创建一个文件夹,名字一定是META-INF,在META-INF下创建services.xml文件,这个名字也是不变的。最后路径是WEB-INF/services/MyService/META-INF/services.xml services.xml代码如下:

<!-- 访问地址中 的访问那个webservice的名字 -->

<service name="LessonAction">  

    <description>Spring aware </description>  

<!--通过ServiceObjectSupplier参数指定SpringServletContextObjectSupplier类来获得SpringApplicationContext对象-->

    <parameter name="ServiceObjectSupplier">  

org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier

    </parameter>  

<!-- 配置在applicationContext中配置的bean,,这里的值bean中的id一样的,否则就报错找不到bean错 -->

    <parameter name="SpringBeanName">lessonAction</parameter>  

    <messageReceivers>  

<!-- 配置没有返回值的方法 lessonAction的第一个方法 -->

    <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"  

           class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />  <!-- 配置没有返回值的方法  lessonAction的第一个方法 ,一直下去

        <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"

class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />   

    -->   

 </messageReceivers>  

<!-- 如果 aries.common.webservice.AriesServicespring中配置了事务,必须加上下面这句,否则报错  

    aries.common.webservice.AriesService本人还无法实现注解方法配置事务--> 

    <parameter name="ServiceClass"> aries.common.webservice.AriesService(包名+接口名</parameter>

</service>

<!--EndFragment-->

3.6、在web.xml文件添加如下代码:

   <!-- 用于初始化spring容器的监听器 -->

    <listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

    </listener>

    <!-- Spring ApplicationContext配置文件的路径,可使用通配符,多个路径用,号分隔. 此参数用于Spring-Context loader -->

    <context-param>

       <param-name>contextConfigLocation</param-name>

       <param-value>classpath*:/applicationContext*.xml</param-value>

    </context-param>

<!--axis2  WebService配置信息开始-->

  

 <servlet>

        <servlet-name>AxisServlet</servlet-name>

       <servlet-class>org.apache.axis2.transport.http.AxisServlet

       </servlet-class>

        <!--<init-param>-->

        <!--<param-name>axis2.xml.path</param-name>-->

        <!--<param-value>/WEB-INF/conf/axis2.xml</param-value>-->

        <!--<param-name>axis2.xml.url</param-name>-->

        <!--<param-value>http://localhost/myrepo/axis2.xml</param-value>-->

        <!--<param-name>axis2.repository.path</param-name>-->

        <!--<param-value>/WEB-INF</param-value>-->

        <!--<param-name>axis2.repository.url</param-name>-->

        <!--<param-value>http://localhost/myrepo</param-value>-->

        <!--</init-param>-->

        <load-on-startup>1</load-on-startup>

    </servlet>

   

    <!-- 可要可不要开始 -->

    <servlet>

        <servlet-name>AxisAdminServlet</servlet-name>

        <servlet-class>

            org.apache.axis2.webapp.AxisAdminServlet</servlet-class>

    </servlet>

    <!-- 可要可不要结束 -->

    <!-- servlet>

        <servlet-name>SOAPMonitorService</servlet-name>

        <display-name>SOAPMonitorService</display-name>

        <servlet-class>org.apache.axis2.soapmonitor.servlet.SOAPMonitorService</servlet-class>

        <init-param>

            <param-name>SOAPMonitorPort</param-name>

            <param-value>5001</param-value>

        </init-param>

        <init-param>

            <param-name>SOAPMonitorHostName</param-name>

            <param-value>localhost</param-value>

        </init-param>

        <load-on-startup>1</load-on-startup>

    </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>

    <!-- 可要可不要结束 -->

   

<!-- axis2  WebService配置信息结束-->

    3.7、工程结构

 

   3.8、axis管理session

1、把sessionId存在ServiceContext 

MessageContext context = MessageContext.getCurrentMessageContext();

ServiceContext serviceContext = context.getServiceContext();

HttpServletRequest request = null;

HttpSession session = null;

   if(context!=null){

  request = (HttpServletRequest) context.getProperty(HTTPConstants.MC_HTTP_SERVLETREQUEST);  

        }

serviceContext.setProperty(session.getId(), session.getId());//sessionId存在serviceContext

 

 2、从ServiceContext 获取sessionId

MessageContext context = MessageContext.getCurrentMessageContext();

ServiceContext serviceContext = context.getServiceContext();

serviceContext.setProperty(session.getId())//键就是上面存的

<!--EndFragment-->

 

四、部署tomcat

   4.1、在浏览器访问:http://localhost:8088/axis/services/LessonAction?wsdl,,显示如图,则表明发布webservice成功

 

    4.2、客户端调用:

import org.apache.axiom.om.OMAbstractFactory;

import org.apache.axiom.om.OMElement;

import org.apache.axiom.om.OMFactory;

import org.apache.axiom.om.OMNamespace;

import org.apache.axis2.AxisFault;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.rpc.client.RPCServiceClient;

import javax.xml.namespace.QName; 

 

 

publicclass TestMain { 

    publicstaticvoid main(String args[]){ 

       //  使用RPC方式调用WebService         

         getRPCServiceClient();

    }

     publicstaticvoid getRPCServiceClient() {

        RPCServiceClient serviceClient;

       try {

           serviceClient = new RPCServiceClient();

//当我们使用sessionID进行判断,这个对象在每个客户端都是唯一的,否则sessionId是不存在的,对象不同相当于两个客户端调用

<!--EndFragment-->

           Options options = serviceClient.getOptions(); 

           //  指定调用WebServiceURL 

           EndpointReference targetEPR = new EndpointReference( 

//  是浏览器中的访问地址

"http://localhost:8088/axis/services/LessonAction?wsdl"); 

           options.setTo(targetEPR); 

           //  指定add方法的参数值 

           Object[] opAddEntryArgs = new Object[] {1,2}; 

           //  指定add方法返回值的数据类型的Class对象 

           Class[] classes = new Class[] {boolean.class}; 

           //  指定要调用的add方法及WSDL文件的命名空间

           //第一个参数浏览器中看到targetNamespace的值targetNamespace="http://service.axis.lcb.com"  第二个参数是方法名

           QName opAddEntry = new QName("http://service.axis.lcb.com", "add"); 

           //  调用add方法并输出该方法的返回值 

           System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);  //输出3

       } catch (AxisFault e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

     }

 五、总结

  如果有错或者有更好的方法,麻烦告知,谢谢!

 

  • 大小: 12.4 KB
  • 大小: 170.6 KB
  • 大小: 15.9 KB
  • 大小: 15.4 KB
  • 大小: 72 KB
0
0
分享到:
评论

相关推荐

    axis2+spring webservice

    标题中的“axis2+spring webservice”指的是使用Apache Axis2框架与Spring框架集成来开发Web服务。Apache Axis2是Java环境中广泛使用的Web服务引擎,它提供了高性能、灵活且可扩展的架构。Spring框架则是一个全面的...

    Axis2集成SSH搭建WebService支持事务(图文详解含核心代码)

    通过本教程,你将了解到如何按照传统的SSH方式编写代码,如何利用Axis2发布WebService,以及如何在一个项目中配置多个WebService接口。此外,还会探讨提高WebService安全性的一些建议,并提供服务端和客户端的测试...

    axis2;WebService

    - 使用Axis2提供的工具,可以将Java类发布为Web服务,同时生成客户端的 stubs,使得客户端能够方便地调用这些服务。 **WebService会话Session管理** - Axis2支持在不同Web服务间管理会话,这对于需要跨服务共享...

    axis2_WebService_开发指南

    为了更好地管理和配置WebService,Axis2允许开发者利用Spring框架的JavaBean来发布WebService,这样做可以使得服务的配置更加灵活和模块化。 最后,Axis2还支持使用SoapMonitar这样的工具来监视WebService的请求和...

    WebService大讲堂之Axis2系列教程

    Axis2作为一个强大的工具,它在多种场景下被广泛应用,包括发布服务端Java类的方法以供不同客户端调用,促进技术集成,以及在SOA架构中作为数据交换的桥梁。 在课程中,你会学到Axis2的核心特性,如: 1. **以多种...

    webservice6 跨越session管理

    3. **客户端启用Session管理**:在客户端调用Web服务时,需要调用`setManageSession(true)`方法来开启Session管理。这样,客户端和服务端之间传输的数据就会包含Session信息,确保服务间通信时Session状态的一致性。...

    axis2-WebService-开发指南.docx

    需要将下载下来的 axis2-1.5.3-war.zip 文件中的 axis2.war 文件放在 Tomcat 目录下,启动 Tomcat 后,将 war 文件转换成一个可以跑起来的 axis2 项目。 4. 简单 WebService 示例: 可以编写一个简单的 ...

    axis2 webservice基础教程

    - **Axis2概述**:Axis2是Apache的一个项目,它是一款基于Java的WebService引擎,旨在提供高性能、灵活的服务发布机制。相比于之前的Axis1.x版本,Axis2在设计上进行了重大改进,不仅支持SOAP 1.1和SOAP 1.2协议,还...

    axis2建webservice文档

    3. **异步调用WebService**:在“WebService大讲堂之Axis2(8):异步调用WebService .doc”中,可能会讨论如何利用Axis2实现非阻塞的异步调用,这对于处理长时间运行的操作或者高并发场景至关重要。 4. **跨服务会话...

Global site tag (gtag.js) - Google Analytics