Hi,
I was trying to test @XmlSeeAlso, which is intended to work as such:
@XmlSeeAlso(SubType.class)
public class SuperType {}
public class SubType extends SuperType {}
@Path("/")
public class Controller {
@GET
public SuperType get() {
return new SubType();
}
}
So that the marshaller knows to serialise it as a SubType instead of the declared SuperType. But I can't get the JAXBXmlSeeAlsoProvider provider to be invoked, because in ServerResponseWriter we do this:
Class type =
jaxrsResponse.getEntityClass();
Type generic = jaxrsResponse.getGenericType();
MessageBodyWriter writer =
providerFactory.getMessageBodyWriter(
type, generic, annotations, mt);
And `type` is obtained by doing entity.getClass()
(so it is SubType) while `generic` comes from the method
declaration (it is SuperType). And
JAXBXmlSeeAlsoProvider.isReadWritable()
uses the Class to ask if it has the @XmlSeeAlso annotation (it
does not, because it's the SubType class).
All in all, it works, because we fall back to not needing @XmlSeeAlso since the class points to the subtype, but the generic type will point to the superclass and so they're really two different types.
Is this a bug?