没有定义名为'cxf'的bean

Vir*_*eal 9 spring tomcat cxf

我正在尝试使用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)

希望这可以帮助.

  • 在我的情况下,仅添加"<import resource ="类路径:META-INF/cxf/cxf.xml"/>"就足够了. (3认同)

Dav*_*aga 5

如果有人需要基于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类示例.