`

CXF脱离Spring运行

    博客分类:
  • SOA
阅读更多

CXF和Spring结合的非常紧密,默认发布Server端是需要用到Spring的,但是项目中用到的Spring jar包比较老2.0,CXF版本2.3.1,跟Spring不兼容,需要换乘Spring2.5,但是换jar包对原来的项目存在风险,上网搜了一个脱离Spring运行的方法。

 

写一个类继承CXFNonSpringServlet,重写loadBus方法。

@SuppressWarnings("unchecked")
	public void loadBus(ServletConfig servletConfig) throws ServletException {
		super.loadBus(servletConfig);
		Bus bus = this.getBus();
		BusFactory.setDefaultBus(bus);
		
		Enumeration<String> enums = getInitParameterNames();
		while (enums.hasMoreElements()) {
			String key = enums.nextElement();
			String value = getInitParameter(key);
			try {
				Class clz = Class.forName(value);
				try {
					Endpoint.publish(key, clz.newInstance());
				} catch (InstantiationException e) {
					e.printStackTrace();
				} catch (IllegalAccessException e) {
					e.printStackTrace();
				}
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}
	}

 

在web.xml里将要发布的类配置一下,可以配置多个。

<servlet>
         <servlet-name>CXFServlet</servlet-name>
         <servlet-class>
              com.infodms.ws.util.MyCXFNoSpringServlet
         </servlet-class>
         <init-param>
         	<param-name>/TestService</param-name>
         	<param-value>com.infodms.ws.test.TestServiceImpl</param-value>
         </init-param>
         <init-param>
         	<param-name>/HelloWorld</param-name>
         	<param-value>com.infodms.ws.test.HelloWorldImpl</param-value>
         </init-param>
     </servlet>
     <servlet-mapping>
         <servlet-name>CXFServlet</servlet-name>
         <url-pattern>/ws/*</url-pattern>
     </servlet-mapping>

 

配置完成,启动tomcat,报错,还是加载了spring,但是代码确实走了刚刚加的MyCXFNoSpringServlet

java.lang.RuntimeException: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cxf.bus.spring.BusApplicationListener' defined in class path resource [META-INF/cxf/cxf.xml]: Initialization of bean failed; nested exception is java.lang.NoSuchMethodError: org.springframework.context.support.AbstractApplicationContext.addApplicationListener(Lorg/springframework/context/ApplicationListener;)V
	org.apache.cxf.bus.spring.SpringBusFactory.createBus(SpringBusFactory.java:96)

 调试了一下源码,内部需要从环境变量中取得org.apache.cxf.bus.factory的值,如果为空就默认按照spring的方式加载。于是在类的最开始加入一行代码。

System.setProperty("org.apache.cxf.bus.factory", "org.apache.cxf.bus.CXFBusFactory"); 

 

再次启动tomcat,报错,由异常可知WoodstoxValidationImpl类没有默认构造方法,通过反射实例化对象报错,看了一下这个类的源码,确实没有无参构造方法。

Caused by: java.lang.InstantiationException: org.apache.cxf.wstx_msv_validation.WoodstoxValidationImpl 
        at java.lang.Class.newInstance0(Class.java:340) 
        at java.lang.Class.newInstance(Class.java:308) 
        at org.apache.cxf.bus.extension.Extension.load(Extension.java:110) 

 

http://cxf.547215.n5.nabble.com/jira-Created-CXF-3077-java-lang-InstantiationException-org-apache-cxf-wstx-msv-validation-WoodstoxVal-td3228305.html

引用这个,加入三个jar包

woodstox-core-asl-4.0.8.jar 
stax2-api-3.0.2.jar
msv.jar

 

问题解决。

分享到:
评论
1 楼 liqy_2012 2012-05-24  
谢谢您的文档,真给力!!!

相关推荐

    cxf整合spring

    在IT行业中,Web服务是应用程序之间进行通信的一种标准方法,而CXF和Spring都是Java生态系统中的关键组件。本文将深入探讨如何将CXF与Spring框架整合,以构建高效且灵活的Web服务解决方案。 首先,让我们了解CXF。...

    CXF-Spring相关jar包

    在【压缩包子文件的文件名称列表】中,"cxf-spring"可能包含的是用于集成CXF与Spring的必要jar包,如cxf-spring-integration.jar,这个文件通常包含了CXF与Spring集成所需的类和资源,使得开发者能够在Spring环境下...

    cxf+spring实现webservice

    在IT行业中,开发Web服务是常见的需求,而CXF和Spring框架的结合为开发者提供了一种高效、灵活的方式来实现Web Service。本篇将深入探讨如何利用CXF和Spring来创建、部署和消费Web Service。 CXF,全称CXF Commons ...

    cxf+spring所需的jar包

    综上所述,这个“cxf+spring”的压缩包为开发者提供了一个基础平台,能够快速地搭建和运行基于CXF和Spring的Web服务应用。开发者只需要按照正确的配置和编程规范,就可以轻松地利用这些jar包进行开发,实现高效的...

    WebService的CXF整合Spring

    将CXF与Spring整合的主要目的是利用Spring的管理能力来配置和控制CXF组件,例如服务端点、客户端代理等。这样可以实现更细粒度的控制,提高代码的可测试性和可维护性。 整合步骤如下: 1. **引入依赖**:首先,在...

    CXF+SPRING例子

    此示例项目虽然注释不够详细,但通过运行和调试,你可以深入理解CXF和Spring如何协同工作,这对于学习和实践SOA(面向服务架构)非常有帮助。同时,由于项目能够正常运行,对于初学者来说,这是一个很好的学习起点。

    CXF整合Spring步骤

    在企业级应用开发中,Apache CXF 和 Spring 框架的整合是非常常见的,因为它们分别提供了强大的服务端和客户端的 Web 服务支持以及灵活的依赖注入和配置管理。本教程将详细介绍如何将 CXF 与 Spring 整合,帮助...

    CXF整合spring的客户端和服务端

    【CXF整合Spring详解】 CXF(CXF stands for "CXF is not just an XFire fork", but was originally named XFire)是一个开源的Java框架,它提供了服务导向架构(SOA)和Web服务的实现。CXF使得开发人员能够轻松地...

    cxf_spring 相关 jar

    在IT行业中,CXF和Spring框架的整合是创建高效、灵活的Web服务的重要途径。"cxf_spring 相关 jar"的标题暗示了这个压缩包包含的是用于整合CXF与Spring的Java库。让我们深入了解一下CXF、Spring以及它们如何协同工作...

    cxf+spring整合

    将CXF+Spring整合的项目导入MyEclipse后,可以利用其内置的服务器支持和调试工具,方便地部署和运行Web服务。 5. **开发实践** 在实际开发中,开发者需要编写服务接口和服务实现,然后在Spring配置文件中声明这些...

    CXF和Spring搭建webservice代码

    通过Spring Boot,我们可以更简洁地配置和运行CXF服务,无需复杂的XML配置。 总的来说,结合CXF和Spring框架,开发者可以构建健壮、可扩展的Web服务,同时享受到Spring带来的便利性和灵活性。无论是SOAP还是RESTful...

    cxf spring maven 实例

    【标题】"CXF Spring Maven 实例"是一个关于如何整合并使用这些技术创建Web服务的教程。CXF是一个开源框架,主要用于构建和部署SOAP和RESTful Web服务,Spring则是一个广泛应用的Java企业级开发框架,而Maven是项目...

    基于maven的cxf+spring简单demo

    最后,通过Maven的cxf-codegen-plugin插件生成客户端和服务端的Stubs,并运行项目。访问指定的URL(如http://localhost:8080/hello?wsdl),就可以看到服务的WSDL描述。 【标签】"cxf"和"spring"表明这个项目主要...

    cxf+spring+client

    在这个"**cxf+spring+client**"的主题中,我们将深入探讨CXF与Spring框架结合创建客户端服务的细节,以及如何利用Spring MVC来增强应用程序的交互性。 首先,让我们关注CXF。CXF允许开发者使用Java编程语言来定义和...

    cxf与Spring的整合实例(适合初学者)

    **标题解析:** "cxf与Spring的整合实例(适合初学者)" 指的是一个教程或示例项目,旨在帮助初次接触CXF和Spring框架的开发者理解如何将这两个强大的开源工具集成在一起。CXF是一个流行的开源服务框架,常用于构建...

    简单cxf+spring构建webservice服务

    通过阅读和运行这些代码,你可以更深入地理解如何将CXF与Spring集成以构建Web服务。 总的来说,使用CXF和Spring构建Web服务涉及了Java编程、Web服务原理、Spring框架的使用、以及CXF的相关配置和工具。这是一个典型...

    CXF集成Spring

    CXF集成了Spring框架,使得构建和管理Web服务变得更加简便和灵活。本篇将深入探讨CXF与Spring的集成,以及如何通过它们来发布一个WebSocket服务的代码实例。 首先,我们了解CXF的核心功能。CXF提供了SOAP和RESTful...

    CXF与Spring 2.5整合

    1. **Spring的依赖注入**:Spring的核心特性之一就是依赖注入,它使得对象之间的关系可以在运行时动态配置,提高了代码的可测试性和可维护性。在整合CXF时,我们可以将CXF的服务实例化和配置交给Spring来处理。 2. ...

    CXF和spring整合所需jar包

    10. **commons-logging.jar**:通用日志库,CXF和Spring都依赖它来记录运行时信息。 11. **stax-api.jar** 和 **woodstox-core-asl.jar**:提供STAX(Streaming API for XML)解析器,用于高效处理XML文档。 12. *...

    CXF2.1.3+spring3.0+struts2.3.4

    【标题】"CXF2.1.3+spring3.0+struts2.3.4" 描述了集成这三大框架实现Web服务的场景。CXF是一个开源的服务框架,它允许开发人员创建和消费各种Web服务。Spring是Java企业级应用的核心框架,提供了依赖注入和面向切面...

Global site tag (gtag.js) - Google Analytics