[jax-rs-spec users] [jsr339-experts] Re: Re: Why is Reader/WriterInterceptor generic?

From: Santiago Pericas-Geertsen <>
Date: Wed, 1 Feb 2012 14:41:19 -0500

On Feb 1, 2012, at 12:17 PM, Marek Potociar wrote:

> I would prefer to make it not generic. (Alas we can't do the same for MBR/MBW…)

 With a type param you can always implement ReaderInterceptor<Object> (or, if nobody is looking, ReaderInterceptor). And when you implement ReaderInterceptor<Widget> you don't need to downcast the return from proceed():

        public Widget aroundReadFrom(ReaderInterceptorContext<Widget> context)
                throws IOException, WebApplicationException {
            Widget w = context.proceed();
            return w;

 The framework code calling the interceptors will be uglier, I think (raw types or some explicit casts to get around existentials maybe).

 Will file JIRA for this.

-- Santiago

> On 02/01/2012 04:38 PM, Santiago Pericas-Geertsen wrote:
>> On Feb 1, 2012, at 10:17 AM, Bill Burke wrote:
>>> Is the generic type supposed to be used for matching purposes? i.e. if you have
>>> ReaderInterceptor<Widget>
>>> that interceptor will only be applied to that type?
>> No, that was never the intent. I think we've been going back and forth on the use of generics in the interceptors. What is your preference?
>> -- Santiago
>>> Not good, IMO, as you would need to recalcuate interceptors chains per-request (on the client) and per-response (on the server). Is there really an existing usecase on why we need this?
>>> If you want to go this route, IMO, Reader/WriterInterceptor should have a isReadable()/isWritable() method just like MessageBodyReader/Writer has. Also you should be allowed to have @Produces/_at_Consumes which would effect binding as well.
>>> --
>>> Bill Burke
>>> JBoss, a division of Red Hat