cxf 2.7.* org.apache.cxf.bus.extension.ExtensionException: Could not load extens

在使用CXF 2.7.4版本时遇到org.apache.cxf.bus.extension.ExtensionException,经过排查发现是由于cxf-rt-ws-policy-2.7.4.jar引起的冲突。删除该jar文件后问题得到解决,但具体冲突原因不明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cxf' defined in class path resource [META-INF/cxf/cxf.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl.
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:965)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4961)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5455)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl.
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:74)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:958)
	... 23 more
Caused by: org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl.
	at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:173)
	at org.apache.cxf.bus.extension.Extension.getClassObject(Extension.java:185)
	at org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByType(ExtensionManagerImpl.java:138)
	at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:126)
	at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:138)
	at org.apache.cxf.bus.spring.SpringBus.<init>(SpringBus.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
	... 25 more
Caused by: java.lang.IncompatibleClassChangeError: Implementing class
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2928)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1174)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2928)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1174)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
	at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:169)
	... 35 more
ERROR [localhost-startStop-1] - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'cxf' defined in class path resource [META-INF/cxf/cxf.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl.
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:965)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:911)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:485)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:580)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
	at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)
	at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)
	at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
	at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4961)
	at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5455)
	at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
	at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
	at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
	at java.util.concurrent.FutureTask.run(FutureTask.java:166)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
	at java.lang.Thread.run(Thread.java:722)
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [org.apache.cxf.bus.spring.SpringBus]: Constructor threw exception; nested exception is org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl.
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:141)
	at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:74)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateBean(AbstractAutowireCapableBeanFactory.java:958)
	... 23 more
Caused by: org.apache.cxf.bus.extension.ExtensionException: Could not load extension class org.apache.cxf.ws.policy.AssertionBuilderRegistryImpl.
	at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:173)
	at org.apache.cxf.bus.extension.Extension.getClassObject(Extension.java:185)
	at org.apache.cxf.bus.extension.ExtensionManagerImpl.activateAllByType(ExtensionManagerImpl.java:138)
	at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:126)
	at org.apache.cxf.bus.extension.ExtensionManagerBus.<init>(ExtensionManagerBus.java:138)
	at org.apache.cxf.bus.spring.SpringBus.<init>(SpringBus.java:47)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:126)
	... 25 more
Caused by: java.lang.IncompatibleClassChangeError: Implementing class
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2928)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1174)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
	at java.lang.ClassLoader.defineClass1(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
	at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2928)
	at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1174)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1669)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1547)
	at org.apache.cxf.bus.extension.Extension.tryClass(Extension.java:169)
	... 35 more

 .开始以为是spring的jar包有问题我spring是3.0.5的cxf是2.7.4找了很久,最后发现是cxf-rt-ws-policy-2.7.4.jar这东西的问题,删除就好了. 不知这东西和啥有冲突..

<think>我们正在处理一个Java异常:java.lang.ClassNotFoundException:org.apache.cxf.bus.spring.SpringBus。这个异常表明在类路径中缺少了cxf-rt-bindings-soap模块(因为SpringBus类通常位于cxf-rt-core模块中,但根据错误信息,实际缺失的可能是cxf-rt-bindings-soap模块中的某个依赖,但这里明确提示的是SpringBus类)。不过,根据常见的CXF配置,SpringBus类是在cxf-rt-core模块中。解决方案步骤:1.检查Maven依赖(如果使用Maven)或Gradle依赖(如果使用Gradle)中是否包含了ApacheCXF的核心模块,特别是`cxf-rt-core`。2.确保版本一致性:所有CXF模块的版本应该相同,避免版本冲突。3.清理和重新构建项目:有时候构建工具没有正确下载或包含依赖,清理并重新构建可以解决。具体操作:对于Maven项目,在pom.xml中添加如下依赖(以3.4.0版本为例,但请根据实际情况选择版本,注意引用[1]中提到在IDEA环境中需要3.1.11或以上):```xml<dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-core</artifactId><version>3.4.0</version></dependency>```如果项目已经使用了Spring,还需要确保Spring相关依赖的版本与CXF兼容。另外,引用[3]提到了一个类似的异常(虽然类名不同),这也提示我们可能是由于依赖缺失或版本不一致导致。如果问题仍然存在,检查是否因为项目构建时没有正确包含该jar包。在IDE中可以查看项目的依赖树,确认cxf-rt-core是否存在以及版本是否正确。如果使用的是非Maven/Gradle的项目,需要手动下载cxf-rt-core的jar包并添加到类路径中。注意:引用[1]中提到在jetty容器和IDEA环境下,cxf版本需要3.1.11或以上,所以请确保版本不低于3.1.11。如果以上步骤无法解决,考虑检查类加载器的问题,特别是在应用服务器中部署时,可能存在类加载器隔离的问题,尝试调整类加载策略。最后,重新启动应用。因此,总结解决方案如下:1.添加或更新cxf-rt-core依赖到合适版本(>=3.1.11)。2.确保所有CXF模块版本一致。3.清理和重新构建项目。4.检查类加载问题(特别是在应用服务器中)。如果用户提供了更多上下文(如构建工具、CXF版本等),可以进一步具体分析。相关问题:1.如何检查Maven项目的依赖树?2.在Tomcat中部署时遇到ClassNotFoundException如何解决?3.ApacheCXF与Spring框架整合的基本步骤是什么?</think>### Java.lang.ClassNotFoundException: org.apache.cxf.bus.spring.SpringBus 解决方案 该异常表明您的项目缺少 Apache CXF 的核心依赖或存在依赖冲突。以下是系统化的解决步骤: #### 1. **添加缺失的 CXF 依赖** 在 Maven 的 `pom.xml` 中添加核心依赖(推荐使用 3.1.11+ 版本): ```xml <!-- 核心依赖 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-core</artifactId> <version>3.4.0</version> <!-- 或 3.1.11+ --> </dependency> <!-- Spring 集成支持 --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http-jetty</artifactId> <version>3.4.0</version> </dependency> ``` 如果使用 Gradle: ```gradle implementation 'org.apache.cxf:cxf-rt-core:3.4.0' implementation 'org.apache.cxf:cxf-rt-transports-http-jetty:3.4.0' ``` #### 2. **检查依赖冲突** - **执行依赖树分析**: ```bash mvn dependency:tree | grep cxf # Maven gradle dependencies --configuration runtimeClasspath # Gradle ``` - 若存在多个 CXF 版本,通过 `<exclusions>` 排除旧版本: ```xml <dependency> <groupId>com.example</groupId> <artifactId>problematic-lib</artifactId> <exclusions> <exclusion> <groupId>org.apache.cxf</groupId> <artifactId>cxf-core</artifactId> </exclusion> </exclusions> </dependency> ``` #### 3. **验证 Spring 配置** 确保 `spring-cxf.xml` 正确声明总线([^2]): ```xml <!-- 关键配置:显式声明 SpringBus --> <bean id="cxf" class="org.apache.cxf.bus.spring.SpringBus" destroy-method="shutdown"/> <jaxws:endpoint id="DemoService" implementor="#DemoServiceBean" address="/DemoService" bus="#cxf"/> <!-- 关联总线 --> ``` #### 4. **清理并重建项目** ```bash mvn clean install -U # -U 强制更新依赖 ``` 或清除 IDE 缓存: - **IntelliJ IDEA**:`File > Invalidate Caches / Restart` - **Eclipse**:右键项目 > `Maven > Update Project` #### 5. **容器部署注意事项** - **Jetty 容器**:必须使用 CXF 3.1.11+ 版本([^1]) - **Tomcat**:确保 `cxf-rt-transports-http` 依赖存在 - **War 包**:检查 `WEB-INF/lib` 是否包含 CXF JAR 文件 > **根本原因分析**: > 此异常通常由以下情况触发: > 1. 项目未包含 `cxf-rt-core` 或 `cxf-spring-boot-starter-jaxws`(Spring Boot) > 2. 依赖冲突导致类加载器无法定位 `SpringBus.class` > 3. Jetty 容器与旧版 CXF 的兼容性问题([^1]) > 4. 构建工具未正确拉取依赖(需 `-U` 强制更新) ### 相关问题 1. 如何解决 CXF 与其他框架(如 Spring Boot)的依赖冲突? 2. CXF 在 Jetty 容器中部署时有哪些特殊配置要求? 3. 如何通过日志诊断 CXF 的类加载失败问题? 4. CXF 3.x 和 2.x 版本在 Spring 集成中有哪些不兼容变更? [^1]: 引用自 CXF 与 Jetty 容器的版本兼容性说明 [^2]: 参考 Spring 整合 CXF 的端点配置规范 [^3]: 涉及 CXF 扩展机制加载失败的通用解决方案
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值