You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Ulrich Hermsen (JIRA)" <ji...@apache.org> on 2009/02/25 08:59:01 UTC

[jira] Created: (OPENJPA-940) Using table-generator in XML descriptor results in ClassCastException

Using table-generator in XML descriptor results in ClassCastException
---------------------------------------------------------------------

                 Key: OPENJPA-940
                 URL: https://issues.apache.org/jira/browse/OPENJPA-940
             Project: OpenJPA
          Issue Type: Bug
    Affects Versions: 1.2.0, 2.0.0
         Environment: Windows XP
Java SE 6 Update 11
            Reporter: Ulrich Hermsen
            Priority: Critical


Defining a table generator in the XML descriptor leads to a class cast exception. The reason is a probably unintentional fall through of a switch/case block in class XMLPersistenceMetaDataSerializer line 502:

...
            switch (type) {
                case TYPE_META:
                    serializeClass((ClassMetaData) obj, fieldAccess
                        && propertyAccess);
                    break;
                case TYPE_SEQ:
                    if (isMappingMode())
                        serializeSequence((SequenceMetaData) obj);
                        // HERE SHOULD BE A break;
                case TYPE_QUERY:
                    serializeQuery((QueryMetaData) obj);
                    break;
...

As a result I get the following stack:

219  testPU  INFO   [main] openjpa.Runtime - Starting OpenJPA 1.2.0
688  testPU  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.DerbyDictionary".
3329  testPU  WARN   [main] openjpa.MetaData - Found duplicate generator "tableGen" in "class com.daimler.tss.lab.jpa.pojo.Slave".  Ignoring.
3830  testPU  INFO   [main] openjpa.MetaData - Writing to file "C:\Uli\Workspaces\TSS_ganymede_2\OpenJPA Test\build\classes\META-INF\test-orm.xml".
3986  testPU  INFO   [main] openjpa.MetaData - Writing sequence "tableGen".
Exception in thread "main" <openjpa-1.2.0-r422266:683325 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: org.apache.openjpa.jdbc.meta.SequenceMapping cannot be cast to org.apache.openjpa.meta.QueryMetaData
	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:196)
	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
	at com.daimler.tss.lab.jpa.test.RelationshipManagementTest.createMaster(RelationshipManagementTest.java:47)
	at com.daimler.tss.lab.jpa.test.RelationshipManagementTest.main(RelationshipManagementTest.java:39)
Caused by: java.lang.ClassCastException: org.apache.openjpa.jdbc.meta.SequenceMapping cannot be cast to org.apache.openjpa.meta.QueryMetaData
	at org.apache.openjpa.persistence.XMLPersistenceMetaDataSerializer.serialize(XMLPersistenceMetaDataSerializer.java:504)
	at org.apache.openjpa.lib.meta.XMLMetaDataSerializer.serialize(XMLMetaDataSerializer.java:257)
	at org.apache.openjpa.lib.meta.XMLMetaDataSerializer.serialize(XMLMetaDataSerializer.java:121)
	at org.apache.openjpa.lib.meta.XMLMetaDataSerializer.serialize(XMLMetaDataSerializer.java:90)
	at org.apache.openjpa.meta.AbstractCFMetaDataFactory.serialize(AbstractCFMetaDataFactory.java:479)
	at org.apache.openjpa.meta.AbstractCFMetaDataFactory.store(AbstractCFMetaDataFactory.java:234)
	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:538)
	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:453)
	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:159)
	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:119)
	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:189)
	... 6 more

May I suggest to run findBugs on your source code. That would have found this section for sure. Does anyone test the XML descriptor stuff?


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


[jira] Assigned: (OPENJPA-940) Using table-generator in XML descriptor results in ClassCastException

Posted by "Catalina Wei (JIRA)" <ji...@apache.org>.
     [ https://issues.apache.org/jira/browse/OPENJPA-940?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Catalina Wei reassigned OPENJPA-940:
------------------------------------

    Assignee: Catalina Wei

> Using table-generator in XML descriptor results in ClassCastException
> ---------------------------------------------------------------------
>
>                 Key: OPENJPA-940
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-940
>             Project: OpenJPA
>          Issue Type: Bug
>    Affects Versions: 1.2.0, 2.0.0-M2
>         Environment: Windows XP
> Java SE 6 Update 11
>            Reporter: Ulrich Hermsen
>            Assignee: Catalina Wei
>            Priority: Critical
>   Original Estimate: 0.33h
>  Remaining Estimate: 0.33h
>
> Defining a table generator in the XML descriptor leads to a class cast exception. The reason is a probably unintentional fall through of a switch/case block in class XMLPersistenceMetaDataSerializer line 502:
> ...
>             switch (type) {
>                 case TYPE_META:
>                     serializeClass((ClassMetaData) obj, fieldAccess
>                         && propertyAccess);
>                     break;
>                 case TYPE_SEQ:
>                     if (isMappingMode())
>                         serializeSequence((SequenceMetaData) obj);
>                         // HERE SHOULD BE A break;
>                 case TYPE_QUERY:
>                     serializeQuery((QueryMetaData) obj);
>                     break;
> ...
> As a result I get the following stack:
> 219  testPU  INFO   [main] openjpa.Runtime - Starting OpenJPA 1.2.0
> 688  testPU  INFO   [main] openjpa.jdbc.JDBC - Using dictionary class "org.apache.openjpa.jdbc.sql.DerbyDictionary".
> 3329  testPU  WARN   [main] openjpa.MetaData - Found duplicate generator "tableGen" in "class com.daimler.tss.lab.jpa.pojo.Slave".  Ignoring.
> 3830  testPU  INFO   [main] openjpa.MetaData - Writing to file "C:\Uli\Workspaces\TSS_ganymede_2\OpenJPA Test\build\classes\META-INF\test-orm.xml".
> 3986  testPU  INFO   [main] openjpa.MetaData - Writing sequence "tableGen".
> Exception in thread "main" <openjpa-1.2.0-r422266:683325 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: org.apache.openjpa.jdbc.meta.SequenceMapping cannot be cast to org.apache.openjpa.meta.QueryMetaData
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:196)
> 	at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:142)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:192)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:145)
> 	at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:56)
> 	at com.daimler.tss.lab.jpa.test.RelationshipManagementTest.createMaster(RelationshipManagementTest.java:47)
> 	at com.daimler.tss.lab.jpa.test.RelationshipManagementTest.main(RelationshipManagementTest.java:39)
> Caused by: java.lang.ClassCastException: org.apache.openjpa.jdbc.meta.SequenceMapping cannot be cast to org.apache.openjpa.meta.QueryMetaData
> 	at org.apache.openjpa.persistence.XMLPersistenceMetaDataSerializer.serialize(XMLPersistenceMetaDataSerializer.java:504)
> 	at org.apache.openjpa.lib.meta.XMLMetaDataSerializer.serialize(XMLMetaDataSerializer.java:257)
> 	at org.apache.openjpa.lib.meta.XMLMetaDataSerializer.serialize(XMLMetaDataSerializer.java:121)
> 	at org.apache.openjpa.lib.meta.XMLMetaDataSerializer.serialize(XMLMetaDataSerializer.java:90)
> 	at org.apache.openjpa.meta.AbstractCFMetaDataFactory.serialize(AbstractCFMetaDataFactory.java:479)
> 	at org.apache.openjpa.meta.AbstractCFMetaDataFactory.store(AbstractCFMetaDataFactory.java:234)
> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:538)
> 	at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:453)
> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:159)
> 	at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:119)
> 	at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:189)
> 	... 6 more
> May I suggest to run findBugs on your source code. That would have found this section for sure. Does anyone test the XML descriptor stuff?

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