没有定义名为'cxf'的bean

时间:2011-07-14 16:34:24

标签: 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'connection'的共享实例

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'connection'的缓存实例

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:使用默认[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 ms完成

================ APP LOG END ======================

但是当一个请求进来时,它始终无法说它找不到bean。

===================== Tomcat(localhost)日志开始==================

INFO:初始化Spring root WebApplicationContext

2011年7月14日上午8:57:03 org.apache.catalina.core.ApplicationContext log

严重: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被插入到一个上下文中,并且正在从另一个上下文中检索,但无法对此进行验证或找到解决方法。任何帮助将不胜感激。

4 个答案:

答案 0 :(得分: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"/>

希望这有帮助。

答案 1 :(得分:1)

如果有其他人到这里并使用mulesoft esb。该问题也存在于该系统中。要解决此问题,请在定义流之前添加以下部分。

<spring:beans>
    <spring:import resource="classpath:META-INF/cxf/cxf.xml" />
    <spring:import resource="classpath:META-INF/cxf/cxf-extension-xml.xml" />
    <spring:import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
    <spring:bean class="org.apache.cxf.bus.spring.Jsr250BeanPostProcessor" /> 
    <spring:bean id="classname" name="classname" class="some.implemented.interface.path" />
</spring:beans>

答案 2 :(得分:0)

在pom文件中添加这些依赖项:

<dependency>
   <groupId>org.apache.cxf</groupId>
   <artifactId>cxf-rt-rs-extension-search</artifactId>
   <version>2.6.0</version>
</dependency>
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-rs-extension-providers</artifactId>
    <version>3.0.1</version>
</dependency>

答案 3 :(得分:0)

请检查以下步骤:

1)下面提到的行应该包含在Spring Context XML中:

<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

2)Web.xml应配置如下:

<context-param>
     <param-name>contextConfigLocation</param-name>
     <param-value>classpath*:cxf.xml</param-value>
</context-param>

3)下面的依赖项应该添加到你的pom.xml中:

<dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxws</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-security</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-ws-policy</artifactId>
        <version>${cxf.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-service-description</artifactId>
        <version>${cxf.version}</version>
    </dependency>

如果所有这些都没有帮助您解决问题,最后一步是检查您的weblogic配置,以下是您必须在weblogic服务器上检查的步骤:

  1. 确保您已为您的服务器定义了一台计算机。
  2. 您需要为部署指定服务器和计算机,如下所示:
  3. Weblogic app deployment

    我希望通过检查所有这些步骤来解决您的问题。

    干杯