Hi

PRE_INVOKE.
My main drive to upgrade was to use the RequestFilter on the newer version.


What is the equivalent of it in the previous version ?

There's no support for JAXRS filters in versions up to 2.1.2.

My intent is to trap
every request and look for a specific header value and based on that I need
to let it go forward or I need to redirect the request . If I use the
interceptors , would the http servlet request/response be injected in the
interceptor stage.

No they won't but you can get to them from a CXF message like this :

(HttpServletRequest) m.get(AbstractHTTPDestination.HTTP_REQUEST);
(HttpServletResponse) m.get(AbstractHTTPDestination.HTTP_RESPONSE);

That said, I'm not sure how you can redirect from a CXF in interceptor, that is to block a current request such that a proper HTTP code and redirect directive is returned rather than XML Fault. You can easily do it from RequestFilter but not sure about cxf interceptors. I'm looking at the cxf code now, if a fault is thrown from a current cxf interceptor in a chain (say you throw a RedirectFault) then a message is inwind by invoking on previos interceptors, handleFault().

So may be one option is to have 2 cxf in interceptors - first one would only do possible handleFault() by updating HttpResponse with the right status and response header in case the next one in the chain throws RedirectFault. This might work

Cheers, Sergey


Thanks

On Wed, Nov 5, 2008 at 7:40 AM, Sergey Beryozkin <
[EMAIL PROTECTED]> wrote:

Actually, forgot to ask :

so what stage your custom inInterceptor is using ?


Cheers, Sergey

----- Original Message ----- From: "Sergey Beryozkin" <
[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Wednesday, November 05, 2008 3:28 PM
Subject: Re: @Resource Injection not working



 Hi

 That did the trick but the providers which I had written started
complaining, question is are providers different now - my isWriteable()
method complains with AbstractMethodError.


2.1.2 support 0.8 api and I think from 0.8 api the MessageBodyProviders
have had their signatures changed

 I didn't understand your comment
about cxf interceptor but  i'm using inInterceptor to read a specific
http
header entry, but I guess you do through Request Filters now.


It's ok if you use cxf input interceptors instead of RequestFilters (which
are essentially collocated with a JAXRSInInterceptor which as a cxf input
interceptor and it uses a PRE_STREAM phase) as long as they can do what
you'd like them to do. You can use RequestFilters if you'd like to block a
request, eitehr through a normal Response return or by throwing an exception
whcih can be subsequently mapped using ExceptionMappers, etc...
Using cxf input interceptors  can be handy if you do both jaxrs and jaxws
at the same time so you can reuse the same interceptor...


I had to roll back to previous version


I'm sorry :-) about that @Resource disaster - but I can see now you'd need
to change the signatures anyway.

I'd encourage you to try 2.1.3 - few bugs have been fixed there.

Cheers, Sergey


On Tue, Nov 4, 2008 at 4:14 AM, Sergey Beryozkin <
[EMAIL PROTECTED]> wrote:

 Hi
It's a regression. Since 2.1.2, thread local proxies are used when the
field or setter method injection is required, and as part of that work
the
@Resource filed injection got broken. I've got it fixed with a test in
my
snapshot - but it'll only be available shortly in 2.1.3-SNAPSHOT.

In meantime - please change @Resource to @Context and it will work fine.
Supporting @Resource is still optional AFAIK and I was not paying good
attention to it... Sorry about it

By the way - I can see you're using a CXF interceptor in your
configuration
- what stage your custom interceptor sits in - we'll need to update the
JAXRSInInterceptor's phase a bit so we need to be careful not to break
some
existing interceptors...

Cheers, Sergey


I just did an upgrade to cxf 2.1.2 and my injection is not working now.
I

can't figure out

my beans.xml and sample code is below

<?xml version=*"1.0"* encoding=*"UTF-8"*?>

<beans xmlns=*"http://www.springframework.org/schema/beans"*

xmlns:xsi=*"http://www.w3.org/2001/XMLSchema-instance"*

xmlns:jaxrs=*"http://cxf.apache.org/jaxrs"*

xmlns:cxf=*"http://cxf.apache.org/core"*

xsi:schemaLocation=*"

http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd

http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd

http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.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=*"documentQ"* address=*"/"*>

<jaxrs:serviceBeans>

<ref bean=*"docQService"*/>

</jaxrs:serviceBeans>

<jaxrs:providers>

<bean class=*"org.gg.providers.MapProvider"* />

</jaxrs:providers>

<jaxrs:inInterceptors>

<bean class=*"org.gg.interceptors.SessionInterceptor"* />

</jaxrs:inInterceptors>

<jaxrs:features><cxf:logging /></jaxrs:features>

</jaxrs:server>

<bean id=*"docQService"* class=*"org.gg.services.LoginService"*></bean>

</beans>



and my sample code



*/

@Path("/Login")
*

public* *class* LoginService

{

*private* *static* *final* Logger *logger* = Logger.*getLogger*
(LoginService.*class*);

@Resource HttpServletRequest request;

@Resource HttpServletResponse response;

@Resource ServletContext servletContext;



@POST

@Path("/authenticate")

//@ConsumeMime("application/x-*www*-form-*urlencoded*")

@ConsumeMime("*/*")

*public* Response login(MultivaluedMap<String, String> parameters)

{

String userID = *null*;

*if* (request.getSession().getAttribute("employee") == *null*) {

my request here is coming null









Reply via email to