users@jax-rs-spec.java.net

[jax-rs-spec users] Re: _at_Logged deep binding

From: Alex Rojkov <alex_at_caucho.com>
Date: Wed, 6 Feb 2013 08:33:27 -0800

>>> IMO it should.
>>
>> Thanks. I am adding conditional return to MyResourceClass#hello.
>>
>> MyResourceClass#hello may return any implementation of Foo. Some implementations may not be annotated with @Logged.
>>
>> Can you explain how a jaxrs implementation can determine that LogginFilter should be invoked?
>
> By introspecting the Java type of the returned sub-resource instance. Since this is a potentially processing-intensive operation, the implementations may consider caching the introspection results for future use.

I see. That means filters can be invoked between resources / sub resource method invocations. Appendix C suggests that filters are invoked before any resource method invocations.

IMO, the spec needs to be more clear about Filter contract.

Alex
>
> HTH,
> Marek
>
>>
>> Thanks,
>> Alex
>>
>>>
>>> Marek
>>>
>>> On Feb 5, 2013, at 3:59 AM, Alex Rojkov <alex_at_caucho.com> wrote:
>>>
>>>> Hi All,
>>>>
>>>> Given the mapping below, should LoggingFilter get invoked?
>>>>
>>>> @Provider
>>>> @Logged
>>>> class LoggingFilter implements ContainerRequestFilter,
>>>> ContainerResponseFilter {
>>>> …
>>>> }
>>>>
>>>> @Path("/")
>>>> public class MyResourceClass {
>>>> @Path("{name}")
>>>> public Foo hello(@PathParam("name") String name) {
>> if (name.contains("bogus"))
>> return new FooBean2();
>> else
>>>> return new FooBean();
>>>> }
>>>> }
>>>>
>>>> public interface Foo {
>>>> }
>>>>
>>>> public class FooBean implements Foo {
>>>> @Logged
>>>> @GET
>>>> public String hello() {
>>>> return "FooBean[]";
>>>> }
>>>> }
>>
>> public class FooBean2 implements Foo {
>> @GET
>> public String hello() {
>> return "FooBean2[]";
>> }
>> }
>>
>>>>
>>>> Thanks,
>>>> Alex
>>>>
>>>
>>>
>>
>
>