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.
>>>
>>>
>>
>

Reply via email to