升级JBoss 7.4.7-eap后部署报错:WELD-001318依赖冲突
升级JBoss EAP 7.4.7后应用部署失败:RESTEASY003940依赖冲突问题
异常信息
java.lang.RuntimeException: RESTEASY003940: Unable to instantiate MessageBodyReader at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:81) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at org.jboss.threads.ContextClassLoaderSavingRunnable.run(ContextClassLoaderSavingRunnable.java:35) at org.jboss.threads.EnhancedQueueExecutor.safeRun(EnhancedQueueExecutor.java:1990) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.doRunTask(EnhancedQueueExecutor.java:1486) at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1377) at java.lang.Thread.run(Thread.java:750) at org.jboss.threads.JBossThread.run(JBossThread.java:513) Caused by: java.lang.RuntimeException: java.lang.RuntimeException: RESTEASY003940: Unable to instantiate MessageBodyReader at org.jboss.resteasy.plugins.providers.RegisterBuiltin.register(RegisterBuiltin.java:58) at org.jboss.resteasy.spi.ResteasyDeployment.startInternal(ResteasyDeployment.java:272) at org.jboss.resteasy.spi.ResteasyDeployment.start(ResteasyDeployment.java:98) at org.jboss.resteasy.plugins.server.servlet.ServletContainerDispatcher.init(ServletContainerDispatcher.java:140) at org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher.init(HttpServletDispatcher.java:42) at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:117) at org.wildfly.extension.undertow.security.RunAsLifecycleInterceptor.init(RunAsLifecycleInterceptor.java:78) at io.undertow.servlet.core.LifecyleInterceptorInvocation.proceed(LifecyleInterceptorInvocation.java:103) at io.undertow.servlet.core.ManagedServlet$DefaultInstanceStrategy.start(ManagedServlet.java:309) at io.undertow.servlet.core.ManagedServlet.createServlet(ManagedServlet.java:145) at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:588) at io.undertow.servlet.core.DeploymentManagerImpl$2.call(DeploymentManagerImpl.java:559) at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:42) at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43) at org.wildfly.extension.undertow.security.SecurityContextThreadSetupAction.lambda$create$0(SecurityContextThreadSetupAction.java:105) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1551) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1551) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1551) at org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$UndertowThreadSetupAction.lambda$create$0(UndertowDeploymentInfoService.java:1551) at io.undertow.servlet.core.DeploymentManagerImpl.start(DeploymentManagerImpl.java:601) at org.wildfly.extension.undertow.deployment.UndertowDeploymentService.startContext(UndertowDeploymentService.java:97) at org.wildfly.extension.undertow.deployment.UndertowDeploymentService$1.run(UndertowDeploymentService.java:78) ... 8 more Caused by: java.lang.RuntimeException: RESTEASY003940: Unable to instantiate MessageBodyReader at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1846) at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1769) at org.jboss.resteasy.plugins.providers.RegisterBuiltin.registerProviders(RegisterBuiltin.java:148) at org.jboss.resteasy.plugins.providers.RegisterBuiltin.register(RegisterBuiltin.java:54) ... 29 more Caused by: org.jboss.weld.exceptions.AmbiguousResolutionException: WELD-001318: Cannot resolve an ambiguous dependency between: - Managed Bean [class org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataReader] with qualifiers [@Any @Default], - Managed Bean [class org.jboss.resteasy.plugins.providers.multipart.MultipartFormDataReader] with qualifiers [@Any @Default] at org.jboss.weld.manager.BeanManagerImpl.resolve(BeanManagerImpl.java:1158) at org.jboss.weld.util.ForwardingBeanManager.resolve(ForwardingBeanManager.java:94) at org.jboss.weld.bean.builtin.BeanManagerProxy.resolve(BeanManagerProxy.java:117) at org.jboss.resteasy.cdi.CdiConstructorInjector.construct(CdiConstructorInjector.java:66) at org.jboss.resteasy.spi.ResteasyProviderFactory.createProviderInstance(ResteasyProviderFactory.java:2835) at org.jboss.resteasy.spi.ResteasyProviderFactory.addMessageBodyReader(ResteasyProviderFactory.java:1068) at org.jboss.resteasy.spi.ResteasyProviderFactory.registerProvider(ResteasyProviderFactory.java:1841) ... 32 more
应用依赖配置
<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-multipart-provider</artifactId> <scope>provided</scope> <version>3.15.6.Final</version> </dependency>
服务器环境情况
已确认EAR包中无resteasy相关jar包,但JBoss模块目录存在两个版本的resteasy-multipart-provider jar:
./modules/system/layers/base/.overlays/layer-base-jboss-eap-7.4.7.CP/org/jboss/resteasy/resteasy-multipart-provider/main/resteasy-multipart-provider-3.15.4.Final-redhat-00001.jar./modules/system/layers/base/org/jboss/resteasy/resteasy-multipart-provider/main/resteasy-multipart-provider-3.15.1.Final-redhat-00001.jar
问题结论与解决方法
你的猜想完全正确,这两个不同版本的resteasy-multipart-provider jar正是引发冲突的根源:
JBoss模块系统会同时加载overlay目录和基础目录中的模块,导致同一个MultipartFormDataReader类存在两个不同的类实例(来自不同版本的jar)。Weld在查找Managed Bean时发现两个拥有相同@Any @Default限定符的Bean,触发AmbiguousResolutionException,最终导致RESTEasy无法实例化MessageBodyReader。
解决方法:
- 清理旧版本模块:删除基础目录下旧版本的
resteasy-multipart-provider-3.15.1.Final-redhat-00001.jar及其对应的module.xml文件,保留overlay目录中的新版本模块。 - 配置模块优先级:通过JBoss模块配置,强制应用只加载overlay目录中的新版本模块,避免旧模块被加载。
- 对齐依赖版本:调整应用的依赖版本,确保
provided范围的版本与服务器中实际使用的新版本(3.15.4.Final-redhat-00001)一致,避免版本不匹配带来的潜在问题。
内容的提问来源于stack exchange,提问作者Nicholas DiPiazza
相关产品推荐
相关产品推荐

