Spring bean not injected into CXF web service, Why? Spring bean not injected into CXF web service, Why? spring spring

Spring bean not injected into CXF web service, Why?


Try to add below method to your web service:

@PostConstructpublic void init() {    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);}

The current web application context (usually the one loaded by ContextLoaderListener) will be used for autowiring, so the IMyCore bean has to be defined in the context listener configuration file and not in the web service one.


If you want to use Spring Beans in CXF Web Service class, then declare WebService as following in the XML configuration file of the CXF (e.g. spring-cxf.xml)

<bean id="hello" class="demo.spring.service.HelloWorldImpl" /><jaxws:endpoint id="helloWorld" implementor="#hello" address="/HelloWorld" />

Declare separated bean for the WebService class and then put it in the endpoint with an ID. Like this you will have spring managed bean, where you can use AutoWired annotations as well.

Your beans never won't be injected automatically if you will declare your web service as following.

<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"><import resource="classpath:META-INF/cxf/cxf.xml"/><import resource="classpath:META-INF/cxf/cxf-servlet.xml"/><jaxws:endpoint id="helloWorld" implementor="demo.spring.service.HelloWorldImpl" address="/HelloWorld"/>

In this case you will need either:

  • Inject spring beans manually

    SpringBeanAutowiringSupport.processInjectionBasedOnCurrentContext(this);

  • Or retrieve the beans one by one from the spring context

    ApplicationContext context = ...; // your Spring ApplicationContextHelloBean helloBean = (HelloBean) context.getBean("bean");

    I haven't tried this for JAX-RS, but the approach in my opinion should be the same.

    From CXF official documentation.


Try to add below bean configuration at Beans.xml

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>

In my case, it worked..