我正在尝试使用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被插入到一个上下文中,并且正在从另一个上下文中检索,但无法对此进行验证或找到解决方法。任何帮助将不胜感激。
答案 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服务器上检查的步骤:
我希望通过检查所有这些步骤来解决您的问题。
干杯