Thanks for the reply,
Annotating the httpRequest works, but like you said is unsafe. Looks
like this is not yet the time to depend on that feature :-)
Cheers,
Eelco
> HttpServletRequest instance can be injected in CXF JAX-RS into a @Resource
> annotated field
> So perhaps you can refactor your code like this, assuming you're only
> interested in HttpServletRequest :
>
> @Resource
> private HttpServletRequest httpRequest;
>
> @Resource
> public void setContext(WebServiceContext context) {
> this.httpRequest =
> (HttpServletRequest)context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
> }
>
> This way JAX-RS impl will initialize an httpRequest directly, while JAX-WS
> runtime will do the same through the setContext
> method. The only catch is that JAX-RS impl does not support thread local
> proxies for fields (it will be...) so the above code won't be thread-safe...
>
> In JAX-RS you can also access the cookies or various bits of a request
> URI...Let me know please if you need more info about it....
>
> Cheers, Sergey
>
>
>> Hi all,
>>
>> As far as I've been able to trace, it looks like the
>> WebServiceContextImpl threadlocal is only set for regular web
>> services, not for services implemented using jaxrs. Is that on purpose
>> or might it be added in a future version?
>>
>> This is what I'm trying to do. I have a service:
>>
>> @Path("/surveyservice/1.0")
>> @ProduceMime("application/xml")
>> public class SurveyWebServiceImpl ...
>> ...
>> private WebServiceContext context;
>>
>> @Resource
>> public void setContext(WebServiceContext context) {
>> this.context = context;
>> }
>>
>> and then later in a service method I'm trying to get the servlet request:
>>
>> HttpServletRequest request =
>> (HttpServletRequest)context.getMessageContext().get(MessageContext.SERVLET_REQUEST);
>>
>> The service is configured using Spring:
>>
>> <import resource="classpath:META-INF/cxf/cxf.xml" />
>> <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
>> <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
>> <import resource="classpath:META-INF/cxf/cxf-extension-jaxws.xml" />
>> <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
>>
>> <bean id="surveyWebService"
>> class="ts4.component.survey.ws.v1_0.SurveyWebServiceImpl"
>> autowire="autodetect"></bean>
>>
>> <jaxrs:server id="surveyWebServiceRs" address="/">
>> <jaxrs:serviceBeans>
>> <ref bean="surveyWebService" />
>> </jaxrs:serviceBeans>
>> </jaxrs:server>
>>
>> And I have the CXFServlet configured etc.
>>
>> The injection of the context works fine, but as the thread local in
>> the WebServiceContextImpl (the only implementation of the
>> WebServiceContext interface I could find) is never set for services
>> over REST, the context object is quite useless :-)
>> Is there another way to get the HttpServletRequest (or HttpSession, as
>> that's what I'm really after)?
>>
>> Also, I thought the @HttpSessionScope and @Stateful annotations as
>> described here:
>> http://weblogs.java.net/blog/ramapulavarthi/archive/2007/02/useful_goodies.html
>> are an elegant solution for what I'm trying to do (implementing
>> conversational web services). Does anyone here know what the status is
>> on that, particularly in CXF?
>>
>> Cheers,
>>
>> Eelco
>
> ----------------------------
> IONA Technologies PLC (registered in Ireland)
> Registered Number: 171387
> Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland
>