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.



Reply via email to