[ 
https://issues.apache.org/jira/browse/WINK-218?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12768249#action_12768249
 ] 

Michael Elman commented on WINK-218:
------------------------------------

bq. What is the reason for this provider to not be able to handle any objects 
of known generic types? After all the XAtomEntry is an instance of AtomEntry, 
so I don't see why this won't work always.

I think that JAXBXmlProvider should be able to handle any object that can be 
handled by JAXB framework.
As I've just checked, the JAXB is able to handle the objects with inherited 
annotations, therefore it's a bug in the JAXBXmlProvider: it should determine 
if the object can be handled not only by searching the proper annotations on 
the class.
The best solution will be probably testing if the class can be handled. I'm not 
sure if there is a way to check it using JAXB APIs.
Anyway, I still think that JAXBXmlProvider should ignore the generic type, 
since I don't think that it somehow changes if the object is readable/writeable.

bq. Do you think I should close this and open a feature request?

Theoretically, it's possible to change this Issue's description, but IMO it's 
better to open a new one. And close this one.
The bug should be something like: "JAXBXmlProvider should be able to handle 
inherited types, since JAXB is able to handle them."

> GenericEntity's generic type is not used when choosing provider.
> ----------------------------------------------------------------
>
>                 Key: WINK-218
>                 URL: https://issues.apache.org/jira/browse/WINK-218
>             Project: Wink
>          Issue Type: Bug
>          Components: Common
>    Affects Versions: 0.2
>            Reporter: Kaloyan Kolev
>
> I have created a subclass of the AtomEntry, let's say XAtomEntry. When I 
> return that as an entity resource I get exception that there is no provider 
> for that type. The exception is thrown by FlushResultHandler. I tried to wrap 
> the new type in a GenericEntity with a generic type set to AtomEntry, but the 
> result was the same.
> Here is the check for the GenericEntity:
> {code}
>  Class<?> rawType = null;
>         if (entity instanceof GenericEntity) {
>             GenericEntity<?> genericEntity = (GenericEntity<?>)entity; 
>             entity = genericEntity.getEntity(); // this is the XAtomEntity 
> instance
>             rawType = genericEntity.getRawType(); // this is the  XAtomEntity 
> class
>             genericType = genericEntity.getType(); // this is the AtomEntity 
> class
>         } else {
>             rawType = (entity != null ? entity.getClass() : null);
>             if (isOriginalEntityResponseObj) {
>                 genericType = rawType;
>             } else {
>                 genericType = (genericType != null ? genericType : rawType);
>             }
>         }
> {code}
> This should match the default JAXBXmlProvider, right? 
> Later a provider is searched for:
> {code}
> // get the provider to write the entity
>         Providers providers = context.getProviders();
>         MessageBodyWriter<Object> messageBodyWriter =
>             (MessageBodyWriter<Object>)providers.getMessageBodyWriter(rawType,
>                                                                       
> genericType,
>                                                                       
> declaredAnnotations,
>                                                                       
> responseMediaType);
> {code}
> Here the messageBodyWriter is set to null.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to