Yep, jaxrs:server/jaxrs:serviceBeans solved the issue. Thanks On Wed, Jan 5, 2011 at 7:49 AM, Sergey Beryozkin <sberyoz...@gmail.com>wrote:
> H > > On Wed, Jan 5, 2011 at 5:38 AM, Andrew <subo...@gmail.com> wrote: > > > Note: I originally posted this via Nabble, and for some reason it appears > > to > > have been treated as spam, so here it goes again. > > > > Hi, > > > > I'm looking for some guidance on how to inject a Spring bean into a > JAX-RS > > service (via Annotation or otherwise). I have a CXF JAX-RS service which > > is > > working just fine. Problem is when I > > try to inject my DAO using an annotation: > > > > @Resource > > private MyDAO myDAO; > > > > This should work, unless the service bean is proxified by Spring. It might > work if CGLIB is used only but I'm not sure. > You can make sure it works by adding a method such as > > @Resource > public void setMyDAO(MyDAO dao) { > myDAO = dao; > } > > to the service bean class. If it still does not work then create an > interface with a single setMyDAO method and have the service class > implementing it. > > > > > It's not getting injected. My JAX-RS service is Spring configured like > so: > > > > <beans xmlns="http://www.springframework.org/schema/beans" > > xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" > > > > xmlns:jaxws="http://cxf.apache.org/jaxws" > > xmlns:jaxrs="http://cxf.apache.org/jaxrs" > > xmlns:cxf="http://cxf.apache.org/core" > > > > xsi:schemaLocation=" > > http://www.springframework.org/schema/beans > > http://www.springframework.org/schema/beans/spring-beans-2.0.xsd > > > > http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd > > http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd > > > > http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> > > > > > > <import resource="classpath:META-INF/ > > cxf/cxf.xml"/> > > > > <import > > resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/> > > <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> > > > > <jaxrs:server id="message" serviceClass="com.foo.MessageResourceImpl" > > address="/"> > > > > <jaxrs:features> > > <cxf:logging/> > > </jaxrs:features> > > </jaxrs:server> > > </beans> > > > > The DAO is getting initialized by Spring and I have verified the bean > works > > in any other POJO, just not the CXF service. Furthermore, I don't see any > > errors in the logs. > > > > I'm using version 2.2.11, in case that helps. > > > > > Having jaxrs:server/@serviceClass works and is simpler to using > jaxrs:server/jaxrs:serviceBeans but it bypasses the Spring injection > mechanism as the serviceClass is instantiated by CXF. So use > jaxrs:server/jaxrs:serviceBeans and refer to a separate Spring service bean > declaring "com.foo.MessageResourceImpl". > > Hope it helps, Sergey > > Thanks, > > > > Andrew > > >