[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] enum access cast issue
|
I don't seem to be able to see you attachments. Perhaps inline them, or
provide a link.
Also include the code for the classes where it works, and where it does not.
drrevis wrote:
>
>
> No, I have a list of enums, not strings. I'm not using the @Enumerated
> annotation, but the docs say the default is to store them as ordinals, so
> I assume that should be what it's doing (based on JPA 2.0 docs). In three
> of four cases, this happens correctly and it reads the objects as enums,
> but in one case, it gets confused and thinks the objects are strings. It
> then complains that it can't convert them to enums.
>
> The list in question is part of a Predicate object. The Predicate object
> is included in a Clause object and I have four different types of clauses
> that I use. When I access three of the four clause types, everything is
> fine, but one clause type causes it to fail and I have no idea what could
> be different. The clause object is the same but the function is
> distinguished by another enum value stored in the clause.
>
> It doesn't make any sense to me because it's the exact same lines of code
> that work in one case but not in another. How can that be? There is
> nothing different about the way I treat and access a Predicate object
> based on the type of clause and it goes through exactly the same code
> path.
>
> Even beyond that, in the logs I included which show one good case and one
> failed case, the type of clause is the same. In the first case that
> succeeds, I am retrieving the value by starting with the clause object,
> and in the case that fails, I am retrieving the value by starting with
> another object that includes the clause which then of course includes the
> predicate object. The reason I say that three out of four clause types
> work is because with the other three types, I can include them in other
> objects nested as much as I need and the predicate values and verbForms
> are always handled correctly.
>
> You can see in the log I included that in the first case (starting from
> the clause object), the object is correctly understood as a VerbForm enum
> with the value of ED, and in the failure case (starting from another
> object that includes the clause object), the value is still ED, but the
> system thinks it needs to convert from a string to an enum. I'm simply
> accessing it with verbForms.get(indexValue) where the index value is zero
> in both cases.
>
> I'm really baffled. Any help or suggestions would be much appreciated!
>
> Renee
>
> (BTW, Sorry if the included messages are a little weird. My browser
> doesn't seem to be handling them well.)
>
>
>
> James Sutherland wrote:
>>
>> So you have a List of basic Enum types, stored as String (VARCHAR) in the
>> database, and in some cases your object's values are the correct Enums,
>> and in another case (for the same class/attribute) there are Strings in
>> the List not the Enums, correct?
>>
>> That is odd, it seems the Converter on the DirectCollectionMapping is not
>> be utilized in your exception case. What is different about the case
>> where it works and doesn't? How do you read this object?
>>
>>
>>
>> drrevis wrote:
>>>
>>> Hi,
>>>
>>> I'm using Glassfish v3 w/EclipseLink and have an entity with a list of
>>> enums defined as:
>>>
>>> @ElementCollection
>>> private List<VerbForm> verbForms;
>>>
>>> I can access the verbForms in many cases with no problems, but in one
>>> particular case where this entity is nested within other entities, when
>>> I try to reference it, I get a cast error.
>>>
>>>
>>> Here is a log from a normal/good case with my debug info showing that it
>>> is accessed as the correct enum class:
>>>
>>> [#|2010-04-23T15:08:21.113-0400|INFO|glassfishv3.0|com.leadingstep.grammardb.sentences|_ThreadID=27;_ThreadName=Thread-1;|calling
>>> addAuxVerbs, index: 0|#]
>>>
>>> [#|2010-04-23T15:08:21.113-0400|INFO|glassfishv3.0|com.leadingstep.grammardb.sentences|_ThreadID=27;_ThreadName=Thread-1;|verbForm:
>>> ED|#]
>>>
>>> [#|2010-04-23T15:08:21.113-0400|INFO|glassfishv3.0|com.leadingstep.grammardb.sentences|_ThreadID=27;_ThreadName=Thread-1;|class:
>>> class com.leadingstep.grammardb.verbs.VerbForm|#]
>>>
>>> [#|2010-04-23T15:08:21.113-0400|INFO|glassfishv3.0|com.leadingstep.grammardb.sentences|_ThreadID=27;_ThreadName=Thread-1;|no
>>> cast issues w/addAuxVerbs|#]
>>>
>>> -----------------
>>>
>>> And here is the log when the problem occurs:
>>>
>>> [#|2010-04-23T15:09:23.582-0400|INFO|glassfishv3.0|com.leadingstep.grammardb.sentences|_ThreadID=26;_ThreadName=Thread-1;|calling
>>> addAuxVerbs, index: 0|#]
>>>
>>> [#|2010-04-23T15:09:23.582-0400|INFO|glassfishv3.0|com.leadingstep.grammardb.sentences|_ThreadID=26;_ThreadName=Thread-1;|verbForm:
>>> ED|#]
>>>
>>> [#|2010-04-23T15:09:23.582-0400|WARNING|glassfishv3.0|javax.enterprise.system.container.ejb.com.sun.ejb.containers|_ThreadID=26;_ThreadName=Thread-1;|A
>>> system exception occurred during an invocation on EJB GrammarDBBean
>>> method public java.util.List
>>> com.leadingstep.grammardb.beans.GrammarDBBean.fetchAllModifiedNounValues(com.leadingstep.grammardb.nouns.ModifiedNoun)
>>> javax.ejb.EJBException
>>> at
>>> com.sun.ejb.containers.BaseContainer.processSystemException(BaseContainer.java:5070)
>>>
>>> <snip>
>>>
>>> Caused by: java.lang.ClassCastException: java.lang.String cannot be cast
>>> to com.leadingstep.grammardb.verbs.VerbForm
>>> at
>>> com.leadingstep.grammardb.sentences.Predicate.fetchValue(Predicate.java:1047)
>>>
>>> -------------------
>>>
>>> I can include more of the error message if it would be helpful, but I'm
>>> really at a loss to understand how JPA can access the field and
>>> correctly interpret it as an Enum class in one instance, but then access
>>> the same field at the same point in code later and think it is a String
>>> that needs to be converted? This same entity is embedded indirectly in
>>> four other different entities and I can access it correctly in three out
>>> of four of those cases. I can't begin to imagine what could be
>>> different in the way it's accessed that would cause this problem.
>>>
>>> I had been using the EclipseLink 1.1.2 - Galileo library, but upgraded
>>> to EclipseLink 2.0.1 and that didn't help or change anything. I'm
>>> running on a Mac with GlassFish Tools Bundle for Eclipse, v1.2.
>>>
>>> Can anyone give me some clues as to what might be going on and how I can
>>> resolve this issue?
>>>
>>> Thanks so much,
>>> Renee
>>>
>>>
>>
>>
>
>
-----
http://wiki.eclipse.org/User:James.sutherland.oracle.com James Sutherland
http://www.eclipse.org/eclipselink/
EclipseLink , http://www.oracle.com/technology/products/ias/toplink/
TopLink
Wiki: http://wiki.eclipse.org/EclipseLink EclipseLink ,
http://wiki.oracle.com/page/TopLink TopLink
Forums: http://forums.oracle.com/forums/forum.jspa?forumID=48 TopLink ,
http://www.nabble.com/EclipseLink-f26430.html EclipseLink
Book: http://en.wikibooks.org/wiki/Java_Persistence Java Persistence
--
View this message in context: http://old.nabble.com/enum-access-cast-issue-tp28350990p28447741.html
Sent from the EclipseLink - Users mailing list archive at Nabble.com.