Hi Sergey, thanks very much for that. I was already thinking changing everything to Response so it's also clearer from the service implementation what's going on.
Do you want me to fill a Jira issue or have you already created it? Cheers, V. On Wed, Oct 14, 2009 at 11:35 AM, Sergey Beryozkin <[email protected]>wrote: > ok... so if you move this code to a custom filter then it will work as > expected (without having to throw the exception). > But it's a form submission. If you decide to use a custom filter then you > can have a JAXRS Providers injected and ask it to get you a provider capable > of reading application/www-url-form-encoded, or simply instantiate a CXF > FormProvider directly and ask it to read the possibly encoded string into a > Map and proceed from there; if it is only a simple user=bar&password=foo > kind of post then you might want just to read it directly from the message > input stream... > > Actually, perhaps the simplest option is to simply return a Response > directly from your method...it will have the right status and Feed set in > > cheers, Sergey > > > > At the moment I solved throwing a WebApplicationException: >> >> feed.addCategory(ERROR_SCHEME, >> String.valueOf(Status.UNAUTHORIZED.getStatusCode()), "Username or password >> not valid."); >> throw new >> >> WebApplicationException(Response.status(Status.UNAUTHORIZED).entity(feed).build()); >> >> were the feed is an Abdera feed. For me it's important to always return a >> proper feed (serialized by the correct provider) independently from the >> status code. Throwing the exception seems to work fine. >> >> Pro: at least in this service I can avoid including the servlet class in >> the >> interface and implementation. >> Contra: it doesn't sound correct to me throwing exceptions for setting the >> status code. >> >> >> Cheers, >> V. >> >> P.s.: in the previous email @PathParam --> @FormParam (not yet Atom style >> for posting) >> >> On Wed, Oct 14, 2009 at 3:01 AM, Vincenzo Vitale >> <[email protected]>wrote: >> >> Hi, >>> >>> in my service implementation I'm injecting the HttpServletResponse with >>> the >>> @Context annotation: >>> >>> @POST >>> @Path("/login") >>> public Feed login(@PathParam("username") String username, >>> @PathParam("password") String password, >>> @Context HttpServletResponse httpServletResponse) >>> >>> and than I set the 401 status code when the user is not authorized. The >>> problem is that the status code is than overwritten in the >>> AbstractHTTPDestination class during the headers flushing: >>> >>> Integer i = (Integer)outMessage.get(Message.RESPONSE_CODE); >>> if (i != null) { >>> int status = i.intValue(); >>> ... ... ... >>> response.setStatus(status); >>> >>> is this the expected behaviour or is this a bug? >>> >>> >>> >>> Thanks in advance, >>> Vincenzo. >>> >>> >> >
