`
gmayvess
  • 浏览: 7125 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Spring mvc with axis (Axis2 Can't find Spring's ApplicationContext)

阅读更多

最近项目中会使用到webservice,实现整个项目中的一个功能,项目使用的是spring mvc + hibernate(annotation),在网上找了一些资料之后,结合项目组的具体情况,决定使用axis2 v1.5.5(网上资料非常多)。为了节省开发成本,打算将axis2整合到项中。

  首先,建一个web项目,将。spring mvc及hibernate (annotation)中要便用的jar包,都拷贝到WEB-INF下lib中,按照平时开发项目的习惯,将准备工作做好。

  然后在apache官网上下载axis2-1.5.5的压缩包,解压之后将lib下的所有jar包都拷贝到WEB-INF下的lib中。

  下面是关键,如果操作不当,配置就不会成功

  1、在webapp下新建axis2-web的文件夹,在这个文件夹中新建一个listServices.jsp,用于迭代项目中的webservice服务,代码如下:

<%@   page contentType="text/html;charset=UTF-8" language="java"%><%@  
page
	import=
"org.apache.axis2.Constants,org.apache.axis2.description.AxisOperation,org.apache.axis2.
description.AxisService,java.util.Collection,java.util.HashMap,java.util.Iterator"%><html>
	<head>
		<title>List Services</title>
		<style>
h2 {
	margin: 20 0 5 0;
}

ul {
	margin-top: 5;
}
</style>
	</head>
	<body>
		<h1>
			Available services
		</h1>
		<%
			HashMap serviceMap = (HashMap) request.getSession().getAttribute(
					Constants.SERVICE_MAP);
			Collection servicecol = serviceMap.values();
			if (servicecol.size() == 0) {
		%>Available services is Empty.<%
			}
			for (Iterator iterator = servicecol.iterator(); iterator.hasNext();) {
				AxisService axisService = (AxisService) iterator.next();
				Iterator opItr = axisService.getOperations();
				String serviceName = axisService.getName();
		%>

		<h2>
			<font color="blue"><a href="<%=serviceName%>?wsdl"
				target="_blank"><%=serviceName%></a> </font>
		</h2>
		<i>Available Operations</i>
		<ul>
			<%
				while (opItr.hasNext()) {
						AxisOperation axisOperation = (AxisOperation) opItr.next();
			%><li><%=axisOperation.getName().getLocalPart()%></li>
			<%
				}
			%>
		</ul>

		<%
			}
		%>
	</body>
</html>

 2、配置spring的applicationContext.xml文件, 这里介绍的是以servletContext加载spring配置文件的模式;applicationContext中的配置可以按照之前普通spring bean的配置方式,但是需要在配置文件中加上下面这段  :

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

 3、axis2与spring整合,访问wsdl是没有问题,但是在调用具体服务的时候,会报Axis2 Can't find Spring's ApplicationContext的bub,需要在项目中添加这样的一个类:

 

package com.tiilii.tiisso.service;

import org.apache.axis2.AxisFault;
import org.apache.axis2.ServiceObjectSupplier;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.Parameter;
import org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder;
import org.apache.axis2.i18n.Messages;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class SSOWebService implements ServiceObjectSupplier,
		ApplicationContextAware {

	private ApplicationContext applicationContext;

	public Object getServiceObject(AxisService axisService) throws AxisFault {
		Parameter springBeanName = axisService.getParameter("SpringBeanName");
		String beanName = ((String) springBeanName.getValue()).trim();

		if (beanName != null) {
			//这块是个人添加的,在网络上找到很多帖子,不知道如何注入applicationContext,就想了这样的一个笨办法
			applicationContext = ApplicationContextHolder.getContext();
			if (applicationContext == null)
				throw new AxisFault("applicationContext is NULL! ");
			if (applicationContext.getBean(beanName) == null)
				throw new AxisFault("Axis2 Can't find Spring Bean: " + beanName);
			return applicationContext.getBean(beanName);
		} else {
			throw new AxisFault(Messages.getMessage("paramIsNotSpecified",
					"SERVICE_SPRING_BEANNAME"));
		}

	}

	@Override
	public void setApplicationContext(ApplicationContext ctx)
			throws BeansException {
		// TODO Auto-generated method stub
		this.applicationContext = ctx;

	}
}
 

 

4、在WEB-INF下新建一个services的文件夹,将version-1.5.aar拷贝到这个文件夹中;在这个文件夹下新建一个与webservice服务名相关的文件夹(任意命名,只试过英文命名),在这个文件夹下,再新建一个文件夹,命名为META-INF,在这个文件夹下新建services.xml文件,文件内容如下:

 

<?xml version="1.0" encoding="UTF-8"?>
<serviceGroup>
	<service name="TiiSSO">
		<description>WeatherService:Spring POJO Axis2 Service Sample
		</description>
		<parameter name="ServiceClass">
			com.tiilii.tiisso.service.SSOService
		</parameter>
		<parameter name="ServiceObjectSupplier" locked="false">
			com.tiilii.tiisso.service.SSOWebService
		</parameter>
		<parameter name="SpringBeanName" locked="false">SSOService
		</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>
</serviceGroup> 

 5、最后配置web.xml 

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	<display-name></display-name>

	<context-param>
		<param-name>log4jConfigLocation</param-name>
		<param-value>/WEB-INF/config/log4j.properties</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
	</listener>

	<servlet>
		<servlet-name>TIIWS</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<!-- 如有多个,请以逗号隔开 -->
			<param-value>/WEB-INF/config/applicationContext.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>
	<servlet>
		<display-name>Apache-Axis Servlet</display-name>
		<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>
	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

 由于项目原因,就不上传代码附件了,第一次写帖子,如帖子中有不到的地方,欢迎指正,大家一起交流,共同进步。

分享到:
评论
1 楼 ling_zhenxiajiuyou 2012-04-20  
写的8错,LZ继续努力。。。 

相关推荐

    spring-axis2-test.rar_Axis2 Spring3_axis2_axis2 spring3_axis2 s

    标题中的“spring-axis2-test.rar_Axis2 Spring3_axis2_axis2 spring3_axis2 s”指的是一个关于Spring和Axis2集成的示例项目,它包含了一组用于演示如何在Spring框架中使用Apache Axis2来开发和部署Web服务的源代码...

    axis2+spring webservice

    在集成Axis2和Spring时,通常会使用Spring的ApplicationContext来加载Axis2配置,并将服务组件作为Spring Bean管理。这样,我们可以在Web服务的生命周期中利用Spring的依赖注入(DI)和面向切面编程(AOP)特性。...

    spring3 + axis2

    【标题】"Spring3 + Axis2" 在Java世界中,Spring框架是企业级应用开发的首选,而Axis2则是Apache组织提供的一个强大的Web服务引擎,主要用于构建和部署Web服务。"Spring3 + Axis2"的组合是将Spring的依赖注入(DI...

    mybatis+spring MVC+webservice axis例子程序实现

    首先,该工程实现了spring MVC、mybatis、axis webservice功能 其次,这个工程很简单,只做了最简单的功能实现 再次,数据库要自己准备 最后,该工程里的src目录下,有一个readme.txt,请下载者仔细阅读,里面有...

    Spring集成axis2实现webservice所用到的包

    当我们需要在Spring项目中提供Web服务时,Axis2是一个常用的工具,它是一个高效的Web服务引擎,支持SOAP 1.1和1.2,以及RESTful服务。本篇文章将详细介绍如何在Spring中集成Axis2来实现Web服务,并且会提及相关的Jar...

    Spring集成AXIS2的Web_service配置方法

    Spring 集成 AXIS2 的 Web service 配置方法 Spring 是一个流行的 Java 应用程序框架,它提供了一个灵活的方式来构建企业级应用程序。AXIS2 是一个流行的 Web Service 引擎,它提供了一个强大的方式来构建 Web ...

    spring axis2整合

    在IT行业中,Spring框架是Java企业级应用开发的首选,而Apache Axis2则是知名的Web服务引擎,用于处理SOAP协议和创建Web服务。本篇将详细探讨如何将Spring 3.2.5版本与Axis2 1.6.2版本进行整合,以便在Spring环境中...

    spring和axis 整合

    此外,Spring MVC可以与Axis2结合,提供RESTful Web服务。 8. **项目构建和管理**:`.classpath`和`.project`文件是Eclipse IDE中的项目配置文件,用于跟踪项目的编译路径和构建设置。`src`目录包含了源代码,`...

    springboot集成axis2-1.7.9实例

    在本文中,我们将深入探讨如何将Apache Axis2与Spring Boot集成,以构建一个高效、可扩展的Web服务应用。Apache Axis2是Java平台上的一个Web服务框架,它提供了高性能、灵活的服务开发和部署机制。而Spring Boot是...

    Axis2与Spring整合发布多个WebService

    在IT行业中,开发Web服务是常见的任务,而Axis2和Spring框架的整合为开发者提供了强大的工具来实现这一目标。本文将深入探讨如何利用这两个技术来发布多个WebService,并着重讲解项目管理和整合过程。 首先,让我们...

    Spring3Mvc+Hibernate整合Axis2发布WebService并配置Quartz调度

    本主题聚焦于如何使用Spring3 MVC与Hibernate进行整合,以便更好地处理业务逻辑和数据持久化,并结合Axis2发布Web服务,同时利用Quartz进行任务调度。以下将详细介绍这些技术及其整合过程。 **Spring3 MVC** 是...

    spring与axis的整合

    2. **在Eclipse中配置引入Spring框架、Axis包**:这一步骤涉及到具体的开发环境配置,包括添加必要的库文件、配置项目属性等。由于Axis支持多种扩展功能,可以通过`happyaxis.jsp`页面找到并引入相关的可选包,即使...

    axis2 + spring3.2.0

    标题中的"axis2 + spring3.2.0"指的是在Java Web开发中,将Apache Axis2服务框架与Spring 3.2.0版本的依赖管理相结合的技术应用。Apache Axis2是一个用于构建Web服务和SOA(Service-Oriented Architecture,面向服务...

    Spring+Axis2例子

    Spring 和 Axis2 是两个在Java世界中非常重要的技术框架,它们分别在企业级应用开发和服务化方面发挥着关键作用。Spring 是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)...

    Spring整合axis2经典

    Spring整合Axis2经典案例解析 在Java Web服务开发中,Spring框架和Apache Axis2是两个重要的组件。Spring作为一款强大的企业级应用框架,提供了一种模块化、灵活的方式来构建应用程序,而Axis2则是Apache组织提供的...

    使用Axis2整合Spring(二)

    在本篇博文中,我们将深入探讨如何在Java Web开发中使用Apache Axis2框架与Spring框架进行集成,以实现服务端的高效管理和灵活控制。Apache Axis2是著名的Web服务引擎,而Spring则是流行的Java企业级应用框架,它们...

    axis2+spring整合实例

    标题"axis2+spring整合实例"表明了这个压缩包内容是关于如何将Apache Axis2服务框架与Spring框架进行集成的实践案例。Apache Axis2是用于构建Web服务和SOA(Service-Oriented Architecture)的高性能、灵活的开源...

    axis2+spring2.5整合(webservice)

    当我们谈论“Axis2+Spring2.5整合(Web服务)”时,我们指的是将Apache Axis2和Spring框架结合在一起,以便更高效地开发和管理Web服务。 Apache Axis2是Apache软件基金会开发的一个Web服务引擎,它提供了SOAP消息...

    Axis2WebService与Spring的整合

    将Axis2与Spring整合可以让我们在Spring的环境中便捷地创建、管理和部署Web服务,同时利用Spring的众多优点。本文将深入探讨如何将这两者融合,并介绍相关的技术细节。 首先,理解Axis2 Web服务的核心概念。Axis2是...

    axis2-spring-1.5.4.jar

    《 Axis2 与 Spring 整合详解:axis2-spring-1.5.4.jar 入门指南》 在Java Web服务开发领域,Apache Axis2 和 Spring 框架都是不可或缺的重要工具。Apache Axis2 是一个高效且可扩展的Web服务引擎,用于处理SOAP...

Global site tag (gtag.js) - Google Analytics