我正在尝试使用tomcat 6.0.32,cxf 2.4.1设置一个简单的Restful Web应用程序。每当我发出任何呼叫时,都会返回一个异常“未定义名为’cxf’的bean”,其中cxf是我的总线。
查看应用程序日志,可以看到cxf实例已创建并缓存。
=============== APP LOG BEGIN ======================
910 DEBUG-创建单例bean’cxf’的共享实例
910调试-创建bean’cxf’的实例
1018调试-急速缓存bean’cxf’以允许解析潜在的循环引用
1031 DEBUG-返回尚未完全初始化的单例bean’cxf’的急切缓存实例-循环引用的结果
1034 DEBUG-完成创建bean’cxf’的实例
1035 DEBUG- 返回单例bean’org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor’的缓存实例
1035 DEBUG-返回单例bean’org.apache.cxf.bus.spring.Jsr250BeanPostProcessor’的缓存实例
1035 DEBUG-返回单例bean’org.apache.cxf.bus.spring.BusExtensionPostProcessor’的缓存实例
1035 DEBUG-创建单例bean’连接’的共享实例
1035 DEBUG-创建bean’connection’的实例
1035 DEBUG-过度缓存bean“连接”以解决潜在的循环引用
1052 DEBUG-完成创建bean’connection’实例
1052 DEBUG-创建单例bean’connectionService’的共享实例
1052 DEBUG-创建bean’connectionService’的实例
1053 DEBUG-过度缓存bean’connectionService’以允许解析潜在的循环引用
1053 DEBUG-返回单例bean’连接’的缓存实例
1053 DEBUG-返回单例bean’cxf’的缓存实例
1121 DEBUG-在名称为“ connectionService”的bean上调用init方法“ create”
1356 DEBUG-完成创建bean’connectionService’的实例
1384 DEBUG fecycleProcessor,名称为“ lifecycleProcessor”:使用默认值[org.springframework.context.support.DefaultLifecycleProcessor@45d1c3cd]
1385 DEBUG-返回单例bean’lifecycleProcessor’的缓存实例
1387 DEBUG-返回单例bean’cxf’的缓存实例
1388 DEBUG-在名称为“ connectionService”的bean上调用init方法“ create”
1391 DEBUG-完成创建bean’connectionService’的实例
1391 DEBUG- 无法找到名称为’lifecycleProcessor’的LifecycleProcessor:使用默认[org.springframework.context.support.DefaultLifecycleProcessor@2c3299f6]
1391 DEBUG-返回单例bean’lifecycleProcessor’的缓存实例
1391 DEBUG- 将根WebApplicationContext发布为ServletContext属性,名称为[org.springframework.web.context.WebApplicationContext.ROOT]
1391 INFO-根WebApplicationContext:初始化在1390毫秒内完成
=============== APP LOG END =======================
但是,当一个请求进入时,它总是说它找不到该bean。
====================== Tomcat(本地主机)日志开始====================
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(本地主机)日志结尾====================
我能想到的唯一一件事是,该bean插入了一个上下文,并且正在从另一个上下文中检索,但是无法对此进行验证或找到解决方法。任何帮助将不胜感激。
从错误日志中,我假设您使用Spring,如果这样,则需要在Spring Context XML中添加以下行:
<import resource="classpath:META-INF/cxf/cxf.xml"/> <import resource="classpath:META-INF/cxf/cxf-extension-xml.xml"/> <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
希望这可以帮助。