Problem solved after upgrading to CXF 2.2.2 and using setter to inject
@Context resource:

@Service
@Transactional
public class MyServiceBean implements Service {

    
    private MessageContext mc;

    @Context
    public void setMessageContext(MessageContext messageContext) {
        this.messageContext = messageContext;
    }

    .......
}


ilgvars wrote:
> 
> Hi,
> I've been trying to inject jax-rs resources using @Context into Spring
> service bean which also has @Transactional annotation. But Spring context
> fails to start. CXF version is 2.2.1, Spring is 2.5.6, using Jetty 6 as
> web container.
> 
> Service example:
> 
> import javax.ws.rs.core.Context;
> import org.apache.cxf.jaxrs.ext.MessageContext;
> ...
> 
> @Service
> @Transactional
> public class MyServiceBean implements Service {
> 
>   @Context
>   private MessageContext mc;
>    
>   // implementation
>   ....
> }
> 
> Spring config:
> 
>   <context:annotation-config />
>   <context:component-scan base-package="...." />
>   <tx:annotation-driven>
> 
> 
>   <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="transport" address="/">
>     <jaxrs:serviceBeans>
>       <ref bean="myServiceBean" />
>       ....
>     </jaxrs:serviceBeans>
>     <jaxrs:extensionMappings>
>       <entry key="xml" value="application/xml" />
>       <entry key="json" value="application/json" />
>     </jaxrs:extensionMappings>
>   </jaxrs:server>
> 
> 
> 
> 
> During Spring context startup I'm getting:
> 2009-06-16 07:38:21,430 ERROR [org.mortbay.log] - Failed startup of
> context
> org.mortbay.jetty.webapp.webappcont...@ed9f47{/alayer-da,src/main/webapp}
> org.springframework.beans.factory.BeanCreationException: Error creating
> bean with name 'transport': Invocation of init method failed; nested
> exception is org.apache.cxf.service.factory.ServiceConstructionException
>       at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
>       at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
>       at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
>       at
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
>       at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
>       at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
>       at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
>       at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
>       at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
>       at
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
>       at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
>       at
> org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
>       at
> org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
>       at
> org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
>       at
> org.mortbay.jetty.handler.ContextHandler.startContext(ContextHandler.java:540)
>       at org.mortbay.jetty.servlet.Context.startContext(Context.java:135)
>       at
> org.mortbay.jetty.webapp.WebAppContext.startContext(WebAppContext.java:1220)
>       at
> org.mortbay.jetty.handler.ContextHandler.doStart(ContextHandler.java:510)
>       at 
> org.mortbay.jetty.webapp.WebAppContext.doStart(WebAppContext.java:448)
>       at
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
>       at
> org.mortbay.jetty.handler.HandlerCollection.doStart(HandlerCollection.java:152)
>       at
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
>       at
> org.mortbay.jetty.handler.HandlerWrapper.doStart(HandlerWrapper.java:130)
>       at org.mortbay.jetty.Server.doStart(Server.java:222)
>       at
> org.mortbay.component.AbstractLifeCycle.start(AbstractLifeCycle.java:39)
>       at
> com.itella.alayer.common.server.EmbeddedJettyServer.start(EmbeddedJettyServer.java:37)
>       at
> com.itella.alayer.da.server.tests.DaJettyServer.main(DaJettyServer.java:36)
> Caused by: org.apache.cxf.service.factory.ServiceConstructionException
>       at
> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:112)
>       at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>       at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>       at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
>       at java.lang.reflect.Method.invoke(Method.java:597)
>       at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
>       at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
>       at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
>       ... 28 more
> Caused by: java.lang.IllegalArgumentException: Can not set
> org.apache.cxf.jaxrs.ext.MessageContext field
> com.itella.alayer.da.server.services.FileInputsBean.mc to $Proxy16
>       at
> sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:146)
>       at
> sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:150)
>       at
> sun.reflect.UnsafeFieldAccessorImpl.ensureObj(UnsafeFieldAccessorImpl.java:37)
>       at
> sun.reflect.UnsafeObjectFieldAccessorImpl.set(UnsafeObjectFieldAccessorImpl.java:57)
>       at java.lang.reflect.Field.set(Field.java:657)
>       at
> org.apache.cxf.jaxrs.utils.InjectionUtils$1.run(InjectionUtils.java:129)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at
> org.apache.cxf.jaxrs.utils.InjectionUtils.injectFieldValue(InjectionUtils.java:125)
>       at
> org.apache.cxf.jaxrs.utils.InjectionUtils.injectContextProxies(InjectionUtils.java:661)
>       at
> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.injectContexts(JAXRSServerFactoryBean.java:180)
>       at
> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.updateClassResourceProviders(JAXRSServerFactoryBean.java:201)
>       at
> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:81)
>       ... 35 more
> 
> Looks like CXF is trying to do field injection but it can't do that for
> Spring generated Proxy (which is required for transaction support).
> I also was trying to use CGLIB proxies with   <tx:annotation-driven
> proxy-target-class="true"/> and also aspectj weaving but with no luck. In
> this case MessageContext was left null. And also method based @Context
> injection doesn't work in this case.
> 
> Does anybody has similar issues with combination of @Context and
> @Transactional?
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Combining-jax-rs-%40Context-and-Spring-%40Transactional-annotations-tp24047621p24053731.html
Sent from the cxf-user mailing list archive at Nabble.com.

Reply via email to