[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wink-dev
Subject:    [jira] Commented: (WINK-218) GenericEntity's generic type is not
From:       "Michael Elman (JIRA)" <jira () apache ! org>
Date:       2009-10-21 14:09:59
Message-ID: 30059306.1256134199415.JavaMail.jira () brutus
[Download RAW message or body]


    [ 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.


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic