【发布时间】:2011-10-05 12:33:31
【问题描述】:
我正在尝试使用 tomcat 6.0.32、cxf 2.4.1 设置一个简单的 restful web 应用程序。每当我发出任何调用时,我都会返回一个异常“没有定义名为 'cxf' 的 bean”,其中 cxf 是我的总线。
查看应用程序日志,我可以看到 cxf 实例已创建并缓存。
================ APP日志开始======================
910 调试 - 创建单例 bean 'cxf' 的共享实例
910 调试 - 创建 bean 'cxf' 的实例
1018 调试 - 急切地缓存 bean 'cxf' 以允许解析潜在的循环引用
1031 调试 - 返回尚未完全初始化的单例 bean 'cxf' 的热切缓存实例 - 循环引用的结果
1034 调试 - 完成创建 bean 'cxf' 的实例
1035 调试 - 返回单例 bean 'org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor' 的缓存实例
1035 调试 - 返回单例 bean 'org.apache.cxf.bus.spring.Jsr250BeanPostProcessor' 的缓存实例
1035 调试 - 返回单例 bean 'org.apache.cxf.bus.spring.BusExtensionPostProcessor' 的缓存实例
1035 调试 - 创建单例 bean“连接”的共享实例
1035 调试 - 创建 bean 'connection' 的实例
1035 调试 - 急切地缓存 bean“连接”以允许解析潜在的循环引用
1052 DEBUG - 完成创建 bean 'connection' 的实例
1052 调试 - 创建单例 bean 'connectionService' 的共享实例
1052 调试 - 创建 bean 'connectionService' 的实例
1053 调试 - 急切地缓存 bean 'connectionService' 以允许解析潜在的循环引用
1053 调试 - 返回单例 bean 'connection' 的缓存实例
1053 调试 - 返回单例 bean 'cxf' 的缓存实例
1121 调试 - 在名为“connectionService”的 bean 上调用 init 方法“create”
1356 调试 - 完成创建 bean 'connectionService' 的实例
1384 DEBUG fecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@45d1c3cd]
1385 调试 - 返回单例 bean 'lifecycleProcessor' 的缓存实例
1387 调试 - 返回单例 bean 'cxf' 的缓存实例
1387 调试 - 返回单例 bean 'cxf' 的缓存实例
1388 调试 - 在名为“connectionService”的 bean 上调用 init 方法“create”
1391 调试 - 完成创建 bean 'connectionService' 的实例
1391 调试 - 无法找到名为“lifecycleProcessor”的 LifecycleProcessor:使用默认值 [org.springframework.context.support.DefaultLifecycleProcessor@2c3299f6]
1391 调试 - 返回单例 bean 'lifecycleProcessor' 的缓存实例
1391 调试 - 将根 WebApplicationContext 发布为名称为 [org.springframework.web.context.WebApplicationContext.ROOT] 的 ServletContext 属性
1391 INFO - 根 WebApplicationContext:初始化在 1390 毫秒内完成
================ APP日志结束======================
但是当一个请求进来时,它总是说找不到 bean 失败。
===================== Tomcat (localhost) 日志开始 ==================
INFO:初始化 Spring 根 WebApplicationContext
2011 年 7 月 14 日上午 8:57:03 org.apache.catalina.core.ApplicationContext 日志
严重:StandardWrapper.Throwable
org.springframework.beans.factory.NoSuchBeanDefinitionException:没有定义名为“cxf”的bean
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:527)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1083)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:274)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1079)
at org.apache.cxf.transport.servlet.CXFServlet.loadBus(CXFServlet.java:58)
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.init(CXFNonSpringServlet.java:54)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:129)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:864)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1665)
at java.lang.Thread.run(Thread.java:662)
===================== Tomcat (localhost) 日志结束 ==================
我能想到的唯一一件事是 bean 被插入到一个上下文中,并且正在从另一个上下文中检索,但无法验证这一点或找到解决方法。任何帮助将不胜感激。
【问题讨论】: