Uploaded image for project: 'Wink'
  1. Wink
  2. WINK-310

Annotations inherited by a resource class should determine parameter type from the subclass, not the superclass

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Major
    • Resolution: Fixed
    • 1.1
    • 1.1.2
    • Server
    • None

    Description

      I have a generic service interface, like so:

      public interface GenericService<T> {
      @POST
      @Consumes(MediaType.APPLICATION_JSON)
      public void doSomething(T obj);
      }

      And an implementation of the interface, like so:

      @Path("/impl")
      public class Impl implements GenericService<RealJAXBType> {
      public void doSomething(RealJAXBType obj)

      { // blah blah }

      }

      RealJAXBType is annotated as a JAXB XMLRootElement. For information's
      sake, I'm using Apache Wink 1.1 with Jackson 1.5.5.

      When I call the service exposed by the Wink servlet, Wink attempts to
      deserialize the passed JSON content to an HashMap of some description, not
      a RealJAXBType. I assume that's because the @POST annotation is on the
      generic interface. My guess is that Wink picks up the "class" of T, which
      is of course Object (as generic type T isn't scoped), and based on this,
      attempts a best-effort conversion into a HashMap, which is incompatible
      with the implementation's type of RealJAXBType.

      I've verified this happens for an abstract superclass as well as an
      interface, so I guess it's to do with the annotation inheritance code.

      This seems unintuitive - I'd certainly expect Wink to look at the
      implementation parameter's class when deciding what to attempt to
      deserialise the JSON content into. Ideally, I'd like Wink to heed the
      type of the implementation.

      Attachments

        1. WINK-310.patch
          15 kB
          Michael Rheinheimer

        Activity

          People

            rott Michael Rheinheimer
            nickmaynard-ibm Nick Maynard
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: