users@jersey.java.net

Re: [Jersey] Annotation[] parameter in MessageBodyReader.readFrom method.

From: Paul Sandoz <Paul.Sandoz_at_Sun.COM>
Date: Mon, 26 Jan 2009 18:09:18 +0100

On Jan 26, 2009, at 6:01 PM, Erick Dovale wrote:

> Thanks a lot Paul.
> Sorry for not finding that issue in bugzilla.

That is OK, i do no think such things are easy to find, quicker to ask
on the list :-)

>
> I'll try to update to 1.0.1 although last time I tried I had a
> problem with the spring integration throwing null pointer exceptions
> during startup.
>

Ah, that might be due to abstract bean definitions that i have fixed
in 1.0.2-SNAPSHOT:

- Fixed issue 191
   https://jersey.dev.java.net/issues/show_bug.cgi?id=191
   ResourceConfig.isProviderClass and
ResourceConfig.isRootResourceClass return
   false if the class parameter is null.
   This fixes an issue with the SpringComponentProviderFactory
throwing an NPE
   for abstract Spring beans.

Is that the case?

If you need to work on a stable release, you could copy the 1.0.2
SNAPSHOT code for Spring and plug it in yourself.

Paul.

> Thanks for your time.
>
> On Mon, Jan 26, 2009 at 11:50 AM, Paul Sandoz <Paul.Sandoz_at_sun.com>
> wrote:
>
> On Jan 26, 2009, at 5:48 PM, Paul Sandoz wrote:
>
>> What version of Jersey are you using?
>>
>
> Replied too quickly, some more info...
>
> This was fixed in Jersey 1.0.1, see:
>
> https://jersey.dev.java.net/source/browse/*checkout*/jersey/trunk/jersey/changes.txt
>
> - Fixed issue 128
> https://jersey.dev.java.net/issues/show_bug.cgi?id=128
> An method parameter that is a request entity is a parameter that is:
> 1) not annotated with any annotations; or
> 2) annotated with one or more annotations all of which are
> recognized by
> the Jersey runtime.
>
> Paul.
>
>> Paul.
>>
>> On Jan 26, 2009, at 5:35 PM, Erick Dovale wrote:
>>
>>> Hi Paul,
>>> Thanks a lot for the quick reply.
>>> I think this is more than a bug in the javadoc then. I tried
>>> annotating the entity parameter with an annotation of my own and
>>> jersey craches on it. This is the exception I am getting:
>>>
>>> SEVERE: Exception occurred when intialization
>>> com.sun.jersey.api.container.ContainerException: Method, public
>>> javax.ws.rs.core.Response
>>> com
>>> .bps
>>> .iproject
>>> .jersey
>>> .resources
>>> .BlueprintControlControlTestResource
>>> .addControlTestsToControl(java.util.LinkedHashSet,long,long),
>>> annotated with PUT of resource, class
>>> com
>>> .bps
>>> .iproject.jersey.resources.BlueprintControlControlTestResource, is
>>> not recognized as valid Java method annotated with @HttpMethod.
>>> at
>>> com
>>> .sun
>>> .jersey
>>> .impl
>>> .model.method.ResourceHttpMethod.<init>(ResourceHttpMethod.java:74)
>>> at
>>> com
>>> .sun
>>> .jersey
>>> .impl
>>> .model.method.ResourceHttpMethod.<init>(ResourceHttpMethod.java:56)
>>> at
>>> com
>>> .sun
>>> .jersey.impl.model.ResourceClass.processMethods(ResourceClass.java:
>>> 244)
>>> at
>>> com.sun.jersey.impl.model.ResourceClass.<init>(ResourceClass.java:
>>> 116)
>>> at
>>> com
>>> .sun
>>> .jersey
>>> .impl
>>> .application
>>> .WebApplicationImpl.newResourceClass(WebApplicationImpl.java:292)
>>> at
>>> com
>>> .sun
>>> .jersey
>>> .impl
>>> .application
>>> .WebApplicationImpl.getResourceClass(WebApplicationImpl.java:263)
>>> at
>>> com
>>> .sun
>>> .jersey
>>> .impl
>>> .application
>>> .WebApplicationImpl.processRootResources(WebApplicationImpl.java:
>>> 827)
>>> at
>>> com
>>> .sun
>>> .jersey
>>> .impl
>>> .application.WebApplicationImpl.initiate(WebApplicationImpl.java:
>>> 671)
>>> at
>>> com
>>> .sun
>>> .jersey
>>> .spi
>>> .spring
>>> .container.servlet.SpringServlet.initiate(SpringServlet.java:66)
>>> at
>>> com
>>> .sun
>>> .jersey
>>> .spi.container.servlet.ServletContainer.load(ServletContainer.java:
>>> 538)
>>> at
>>> com
>>> .sun
>>> .jersey
>>> .spi.container.servlet.ServletContainer.init(ServletContainer.java:
>>> 197)
>>> at
>>> org
>>> .apache
>>> .catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:
>>> 1161)
>>> at
>>> org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:
>>> 981)
>>> at
>>> org
>>> .apache
>>> .catalina.core.StandardContext.loadOnStartup(StandardContext.java:
>>> 4058)
>>> at
>>> org
>>> .apache.catalina.core.StandardContext.start(StandardContext.java:
>>> 4364)
>>> at
>>> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:
>>> 1045)
>>> at
>>> org.apache.catalina.core.StandardHost.start(StandardHost.java:719)
>>> at
>>> org.apache.catalina.core.ContainerBase.start(ContainerBase.java:
>>> 1045)
>>> at
>>> org.apache.catalina.core.StandardEngine.start(StandardEngine.java:
>>> 443)
>>> at
>>> org
>>> .apache.catalina.core.StandardService.start(StandardService.java:
>>> 516)
>>> at
>>> org.apache.catalina.core.StandardServer.start(StandardServer.java:
>>> 710)
>>> at org.apache.catalina.startup.Catalina.start(Catalina.java:578)
>>> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>>> at
>>> sun
>>> .reflect
>>> .NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
>>> at
>>> sun
>>> .reflect
>>> .DelegatingMethodAccessorImpl
>>> .invoke(DelegatingMethodAccessorImpl.java:25)
>>> at java.lang.reflect.Method.invoke(Method.java:585)
>>> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:
>>> 288)
>>> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:
>>> 413)
>>> Jan 26, 2009 11:28:28 AM
>>> org.apache.catalina.core.ApplicationContext log
>>>
>>> Here is the signature of the method:
>>>
>>> @PUT public Response
>>> addQuestionsToBlueprintControl(@JSONPath("questions")
>>> LinkedHashSet<Question> questions,
>>> @PathParam("blueprintId") long blueprintId,
>>> @PathParam("controlId") long controlId)
>>>
>>> Where JSONPath is my annotation defined like this:
>>>
>>> @Target({ElementType.PARAMETER})
>>> @Retention(RetentionPolicy.RUNTIME)
>>> public @interface JSONPath {
>>>
>>> String value();
>>>
>>> }
>>>
>>> I have an instance of MessageBodyReader that is able to convert
>>> the reuest entity to a LinkedHashSet<Question>.
>>>
>>> This exception I get during application startup and jersey fails
>>> to start because of this.
>>> Any ideas?
>>>
>>> Thanks.
>>>
>>> On Mon, Jan 26, 2009 at 4:54 AM, Paul Sandoz <Paul.Sandoz_at_sun.com>
>>> wrote:
>>> Hi Erick,
>>>
>>>
>>> On Jan 26, 2009, at 4:17 AM, Erick Dovale wrote:
>>>
>>> Hi,
>>> Can anyone explain what annotations are passed in the Annotation[]
>>> parameter in the readFrom method in MessageBodyReader?
>>> I can't understand the javadoc; this is what it says:
>>>
>>> an array of the annotations on the declaration of the artifact
>>> that will be initialized with the produced instance. E.g. if the
>>> message body is to be converted into a method parameter, this will
>>> be the annotations on that parameter returned by
>>> <code>Class.getParameterAnnotations</code>.
>>>
>>> First, I could not find such method in java.lang.Class.
>>> Am I missing something?? or this javadoc a bit screwy?
>>>
>>>
>>> Bug in the JavaDoc. It should be "Method.getParameterAnnotations"
>>>
>>> If there is a resource method say:
>>>
>>> @POST
>>> public void post(@QueryParam String a, @XYZ @ABC MyType entity)
>>> { ... }
>>>
>>> Then the parameter "entity" is selected to be the parameter that
>>> the request entity will be serialized to with the selected message
>>> body writer. The array of annotations will be those declared on
>>> the parameter "entity".
>>>
>>> Paul.
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>
>>>
>>
>
>