【问题标题】:No bean named 'cxf' is defined没有定义名为“cxf”的 bean
【发布时间】: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 被插入到一个上下文中,并且正在从另一个上下文中检索,但无法验证这一点或找到解决方法。任何帮助将不胜感激。

【问题讨论】:

    标签: spring tomcat cxf


    【解决方案1】:

    从您的错误日志中,我假设您使用 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"/>
    

    希望这会有所帮助。

    【讨论】:

    • 在我的情况下,只添加“”就足够了。
    【解决方案2】:

    如果有人需要 Spring Java Based Configuration 来解决这个问题,有两种选择:

    您可以将 cxf.xml 文件导入到您的 Java Config 类中:

    @ImportResource({ "classpath:META-INF/cxf/cxf.xml" })
    

    或者您可以在 Java 配置类中以编程方式定义 bean:

    @Bean
    public SpringBus cxf() {        
        return new SpringBus();
    }
    

    CXF + Spring Java 配置类example.

    【讨论】:

      【解决方案3】:

      以防其他人来到这里并使用 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>
      

      【讨论】:

        【解决方案4】:

        在 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>
        

        【讨论】:

          【解决方案5】:

          请检查以下步骤:

          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. 您需要为您的部署指定服务器和机器,如下所示:

          Weblogic app deployment

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

          干杯

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2012-03-25
            • 2012-05-29
            • 2011-12-08
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多