我正在尝试使用tomcat 6.0.32,cxf 2.4.1设置一个简单的restful Web应用程序.无论何时我发出任何调用,我都会收到一个异常"没有定义名为'cxf'的bean",其中cxf是我的总线.
查看应用程序日志,我可以看到cxf实例已创建并缓存.
================ APP LOG BEGIN ======================
910 DEBUG - 创建单例bean'cxf'的共享实例
910 DEBUG - 创建bean'cxf'的实例
1018 DEBUG - 急切地缓存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'连接'的实例
1035 DEBUG - 急切地缓存bean'连接'以允许解析潜在的循环引用
1052 DEBUG - 完成创建bean'连接'的实例
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'的缓存实例
1387 DEBUG - 返回单例bean'cxf'的缓存实例
1388 DEBUG - 在名为'connectionService'的bean上调用init方法'create'
1391 DEBUG - 完成创建bean'connectionService'的实例
1391 DEBUG - 无法找到名为'lifecycleProcessor'的LifecycleProcessor:使用default [org.springframework.context.support.DefaultLifecycleProcessor@2c3299f6]
1391 DEBUG - 返回单例bean'lifecycleProcessor'的缓存实例
1391 DEBUG - 发布根WebApplicationContext作为ServletContext属性,名称为[org.springframework.web.context.WebApplicationContext.ROOT]
1391 INFO - Root WebApplicationContext:初始化在1390毫秒内完成
================ APP LOG END ======================
但是当一个请求进来时,它始终无法说它找不到bean.
===================== Tomcat(localhost)日志开始==================
信息:初始化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)
Run Code Online (Sandbox Code Playgroud)
===================== Tomcat(localhost)日志结束==================
我唯一能想到的是bean被插入到一个上下文中,并且正在从另一个上下文中检索,但无法对此进行验证或找到解决方法.任何帮助将不胜感激.
ccp*_*ava 22
从您的错误日志中,我假设您使用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"/>
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助.
如果有人需要基于Spring Java的配置来解决此问题,有两种选择:
您可以使用以下命令将cxf.xml文件导入Java Config类:
@ImportResource({ "classpath:META-INF/cxf/cxf.xml" })
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用以下命令在Java Configuration类中以编程方式定义bean:
@Bean
public SpringBus cxf() {
return new SpringBus();
}
Run Code Online (Sandbox Code Playgroud)
CXF + Spring Java Configuration类示例.
| 归档时间: |
|
| 查看次数: |
32281 次 |
| 最近记录: |