Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

No bean named 'cxf' is defined

Tags:

spring

tomcat

cxf

I am trying to setup a simple restful web application, using tomcat 6.0.32, cxf 2.4.1. Anytime I issue any call, I get back an exception "No bean named 'cxf' is defined", where cxf is my bus.

Looking at the application log, I can see the cxf instance is created, and cached.

================ APP LOG BEGIN======================

910 DEBUG - Creating shared instance of singleton bean 'cxf'

910 DEBUG - Creating instance of bean 'cxf'

1018 DEBUG - Eagerly caching bean 'cxf' to allow for resolving potential circular references

1031 DEBUG - Returning eagerly cached instance of singleton bean 'cxf' that is not fully initialized yet - a consequence of a circular reference

1034 DEBUG - Finished creating instance of bean 'cxf'

1035 DEBUG - Returning cached instance of singleton bean 'org.apache.cxf.bus.spring.BusWiringBeanFactoryPostProcessor'

1035 DEBUG - Returning cached instance of singleton bean 'org.apache.cxf.bus.spring.Jsr250BeanPostProcessor'

1035 DEBUG - Returning cached instance of singleton bean 'org.apache.cxf.bus.spring.BusExtensionPostProcessor'

1035 DEBUG - Creating shared instance of singleton bean 'connection'

1035 DEBUG - Creating instance of bean 'connection'

1035 DEBUG - Eagerly caching bean 'connection' to allow for resolving potential circular references

1052 DEBUG - Finished creating instance of bean 'connection'

1052 DEBUG - Creating shared instance of singleton bean 'connectionService'

1052 DEBUG - Creating instance of bean 'connectionService'

1053 DEBUG - Eagerly caching bean 'connectionService' to allow for resolving potential circular references

1053 DEBUG - Returning cached instance of singleton bean 'connection'

1053 DEBUG - Returning cached instance of singleton bean 'cxf'

1121 DEBUG - Invoking init method 'create' on bean with name 'connectionService'

1356 DEBUG - Finished creating instance of bean 'connectionService'

1384 DEBUG fecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@45d1c3cd]

1385 DEBUG - Returning cached instance of singleton bean 'lifecycleProcessor'

1387 DEBUG - Returning cached instance of singleton bean 'cxf'

1387 DEBUG - Returning cached instance of singleton bean 'cxf'

1388 DEBUG - Invoking init method 'create' on bean with name 'connectionService'

1391 DEBUG - Finished creating instance of bean 'connectionService'

1391 DEBUG - Unable to locate LifecycleProcessor with name 'lifecycleProcessor': using default [org.springframework.context.support.DefaultLifecycleProcessor@2c3299f6]

1391 DEBUG - Returning cached instance of singleton bean 'lifecycleProcessor'

1391 DEBUG - Published root WebApplicationContext as ServletContext attribute with name [org.springframework.web.context.WebApplicationContext.ROOT]

1391 INFO - Root WebApplicationContext: initialization completed in 1390 ms

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

But when a request comes in, it always fails saying it can't find the bean.

===================== Tomcat (localhost) Log Begin ==================

INFO: Initializing Spring root WebApplicationContext

Jul 14, 2011 8:57:03 AM org.apache.catalina.core.ApplicationContext log

SEVERE: StandardWrapper.Throwable

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'cxf' is defined

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) Log End ==================

The only thing I can think of is that the bean is inserted in one context, and is being retrieved from another, but can't validate this or find a way around it. Any help would be greatly appreciated.

like image 409
Virtually Real Avatar asked Jul 14 '11 16:07

Virtually Real


2 Answers

From your error log, I assume you use Spring, if so, you will need to add following lines to your 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"/>

Hope this helps.

like image 163
ccppjava Avatar answered Oct 16 '22 21:10

ccppjava


If someone needs the Spring Java Based Configuration for solving this problem, there are two options:

You can import the cxf.xml file into your Java Config class with:

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

Or you can define the bean programatically in your Java Configuration class with:

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

CXF + Spring Java Configuration class example.

like image 36
David Lizárraga Avatar answered Oct 16 '22 21:10

David Lizárraga