You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by Dain Sundstrom <da...@iq80.com> on 2007/02/13 01:00:38 UTC
NoSuchFieldException
I have this scenario in my CMP2JPA tool where I have to generate
subclasses of CMP1 beans. When the user has an "unknown" primary key
or more commonly, when they use the same ejb class for multiple
deployments, I have to generate a sub class to either add an extra
field, or to differentiate two usages of the same class. So say I
have the class "foo.TestBean", like this:
package foo;
public class TestBeanEJB implements EntityBean {
public Integer KEY_ID;
public String NAME;
}
I generate a sub class like this:
package openejb.foo;
public class TestBeanEJB implements foo.TestBeanEJB {
}
The entity mappings I use look like this:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
version="1.0">
<entity name="TestBean" class="openejb.foo.TestBean">
<table name="TEST"/>
<attributes>
<id name="KEY_ID">
<column name="ID"/>
</id>
<basic name="NAME">
<column name="NAME"/>
</basic>
</attributes>
</entity>
</entity-mappings>
That all seems good, but when I deploy my bean I get the following
exception:
INFO [Thread-10] openjpa.MetaData - Parsing package
"openejb.foo.TestBean".
TRACE [Thread-10] openjpa.MetaData - An exception occurred while
parsing jar:file:/tmp/OpenEJB_Generated_1334.jar!/META-INF/openejb-
cmp-generated-orm.xml at location Line: 7, C: 31. This exception has
been translated to a SAXException, and will be re-thrown. The
original exception is being logged along with this message.
java.lang.NoSuchFieldException: KEY_ID
at java.lang.Class.getDeclaredField(Class.java:1854)
at
org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.parseField
(XMLPersistenceMetaDataParser.java:1079)
at
org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.startId
(XMLPersistenceMetaDataParser.java:877)
at
org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.startClassEl
ement(XMLPersistenceMetaDataParser.java:543)
at org.apache.openjpa.lib.meta.CFMetaDataParser.startElement
(CFMetaDataParser.java:105)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.startElement
(XMLMetaDataParser.java:426)
at org.apache.xerces.parsers.AbstractSAXParser.startElement
(Unknown Source)
at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement
(Unknown Source)
at
org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement
(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl
$FragmentContentDispatcher.dispatch(Unknown Source)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
Source)
at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
Source)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource
(XMLMetaDataParser.java:370)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse
(XMLMetaDataParser.java:312)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse
(XMLMetaDataParser.java:289)
at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse
(XMLMetaDataParser.java:263)
at
org.apache.openjpa.persistence.PersistenceMetaDataFactory.parseXML
(PersistenceMetaDataFactory.java:229)
at org.apache.openjpa.persistence.PersistenceMetaDataFactory.load
(PersistenceMetaDataFactory.java:180)
at org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal
(MetaDataRepository.java:412)
at org.apache.openjpa.meta.MetaDataRepository.getMetaData
(MetaDataRepository.java:270)
at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:
187)
at org.apache.openjpa.enhance.PCClassFileTransformer.transform
(PCClassFileTransformer.java:124)
at org.apache.openjpa.persistence.PersistenceProviderImpl
$ClassTransformerImpl.transform(PersistenceProviderImpl.java:140)
at org.apache.openejb.persistence.PersistenceUnitInfoImpl
$PersistenceClassFileTransformer.transform
(PersistenceUnitInfoImpl.java:259)
Note: the exception should at least tell us which class had the
problem :)
Is there some magic flag for JPA that, I can use to make it look in
the super class fields persistent fields?
-dain
RE: NoSuchFieldException
Posted by Patrick Linskey <pl...@bea.com>.
> Does anyone know if I can declare a mapped-superclass with
> all fields declared as transient and then use attribute-override
> in the subclass for fields I want to map?
I think that your use case should work, modulo the issue that you're
running into in the other thread.
-Patrick
--
Patrick Linskey
BEA Systems, Inc.
_______________________________________________________________________
Notice: This email message, together with any attachments, may contain
information of BEA Systems, Inc., its subsidiaries and affiliated
entities, that may be confidential, proprietary, copyrighted and/or
legally privileged, and is intended solely for the use of the individual
or entity named in this message. If you are not the intended recipient,
and have received this message in error, please immediately return this
by email and then delete it.
> -----Original Message-----
> From: Dain Sundstrom [mailto:dain@iq80.com]
> Sent: Monday, February 12, 2007 5:55 PM
> To: open-jpa-dev@incubator.apache.org
> Subject: Re: NoSuchFieldException
>
> I think I need to declare a mapped-superclass, and then use
> attribute-
> overrides in the subclass.
>
> Does anyone know if I can declare a mapped-superclass with
> all fields
> declared as transient and then use attribute-override in the
> subclass
> for fields I want to map? I would be easier for me to code it that
> way (and yes I am quite lazy).
>
> -dain
>
> On Feb 12, 2007, at 4:00 PM, Dain Sundstrom wrote:
>
> > I have this scenario in my CMP2JPA tool where I have to generate
> > subclasses of CMP1 beans. When the user has an "unknown" primary
> > key or more commonly, when they use the same ejb class for
> multiple
> > deployments, I have to generate a sub class to either add an extra
> > field, or to differentiate two usages of the same class. So say I
> > have the class "foo.TestBean", like this:
> >
> > package foo;
> > public class TestBeanEJB implements EntityBean {
> > public Integer KEY_ID;
> > public String NAME;
> > }
> >
> > I generate a sub class like this:
> >
> > package openejb.foo;
> > public class TestBeanEJB implements foo.TestBeanEJB {
> > }
> >
> > The entity mappings I use look like this:
> >
> > <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> > <entity-mappings
> xmlns="http://java.sun.com/xml/ns/persistence/orm"
> > version="1.0">
> > <entity name="TestBean" class="openejb.foo.TestBean">
> > <table name="TEST"/>
> > <attributes>
> > <id name="KEY_ID">
> > <column name="ID"/>
> > </id>
> > <basic name="NAME">
> > <column name="NAME"/>
> > </basic>
> > </attributes>
> > </entity>
> > </entity-mappings>
> >
> > That all seems good, but when I deploy my bean I get the following
> > exception:
> >
> > INFO [Thread-10] openjpa.MetaData - Parsing package
> > "openejb.foo.TestBean".
> > TRACE [Thread-10] openjpa.MetaData - An exception occurred while
> > parsing jar:file:/tmp/OpenEJB_Generated_1334.jar!/META-INF/openejb-
> > cmp-generated-orm.xml at location Line: 7, C: 31. This exception
> > has been translated to a SAXException, and will be re-thrown. The
> > original exception is being logged along with this message.
> > java.lang.NoSuchFieldException: KEY_ID
> > at java.lang.Class.getDeclaredField(Class.java:1854)
> > at
> >
> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.pa
> rseField
> > (XMLPersistenceMetaDataParser.java:1079)
> > at
> > org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.startId
> > (XMLPersistenceMetaDataParser.java:877)
> > at
> >
> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.st
> artClass
> > Element(XMLPersistenceMetaDataParser.java:543)
> > at org.apache.openjpa.lib.meta.CFMetaDataParser.startElement
> > (CFMetaDataParser.java:105)
> > at org.apache.openjpa.lib.meta.XMLMetaDataParser.startElement
> > (XMLMetaDataParser.java:426)
> > at org.apache.xerces.parsers.AbstractSAXParser.startElement
> > (Unknown Source)
> > at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement
> > (Unknown Source)
> > at
> > org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement
> > (Unknown Source)
> > at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl
> > $FragmentContentDispatcher.dispatch(Unknown Source)
> > at
> > org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
> > (Unknown Source)
> > at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> > Source)
> > at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown
> > Source)
> > at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
> > at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
> > Source)
> > at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
> > at
> > org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource
> > (XMLMetaDataParser.java:370)
> > at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse
> > (XMLMetaDataParser.java:312)
> > at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse
> > (XMLMetaDataParser.java:289)
> > at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse
> > (XMLMetaDataParser.java:263)
> > at
> > org.apache.openjpa.persistence.PersistenceMetaDataFactory.parseXML
> > (PersistenceMetaDataFactory.java:229)
> > at
> > org.apache.openjpa.persistence.PersistenceMetaDataFactory.load
> > (PersistenceMetaDataFactory.java:180)
> > at
> > org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal
> > (MetaDataRepository.java:412)
> > at org.apache.openjpa.meta.MetaDataRepository.getMetaData
> > (MetaDataRepository.java:270)
> > at
> org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:
> > 187)
> > at org.apache.openjpa.enhance.PCClassFileTransformer.transform
> > (PCClassFileTransformer.java:124)
> > at org.apache.openjpa.persistence.PersistenceProviderImpl
> > $ClassTransformerImpl.transform(PersistenceProviderImpl.java:140)
> > at org.apache.openejb.persistence.PersistenceUnitInfoImpl
> > $PersistenceClassFileTransformer.transform
> > (PersistenceUnitInfoImpl.java:259)
> >
> > Note: the exception should at least tell us which class had the
> > problem :)
> >
> > Is there some magic flag for JPA that, I can use to make it
> look in
> > the super class fields persistent fields?
> >
> > -dain
> >
>
>
Re: NoSuchFieldException
Posted by Dain Sundstrom <da...@iq80.com>.
I think I need to declare a mapped-superclass, and then use attribute-
overrides in the subclass.
Does anyone know if I can declare a mapped-superclass with all fields
declared as transient and then use attribute-override in the subclass
for fields I want to map? I would be easier for me to code it that
way (and yes I am quite lazy).
-dain
On Feb 12, 2007, at 4:00 PM, Dain Sundstrom wrote:
> I have this scenario in my CMP2JPA tool where I have to generate
> subclasses of CMP1 beans. When the user has an "unknown" primary
> key or more commonly, when they use the same ejb class for multiple
> deployments, I have to generate a sub class to either add an extra
> field, or to differentiate two usages of the same class. So say I
> have the class "foo.TestBean", like this:
>
> package foo;
> public class TestBeanEJB implements EntityBean {
> public Integer KEY_ID;
> public String NAME;
> }
>
> I generate a sub class like this:
>
> package openejb.foo;
> public class TestBeanEJB implements foo.TestBeanEJB {
> }
>
> The entity mappings I use look like this:
>
> <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
> <entity-mappings xmlns="http://java.sun.com/xml/ns/persistence/orm"
> version="1.0">
> <entity name="TestBean" class="openejb.foo.TestBean">
> <table name="TEST"/>
> <attributes>
> <id name="KEY_ID">
> <column name="ID"/>
> </id>
> <basic name="NAME">
> <column name="NAME"/>
> </basic>
> </attributes>
> </entity>
> </entity-mappings>
>
> That all seems good, but when I deploy my bean I get the following
> exception:
>
> INFO [Thread-10] openjpa.MetaData - Parsing package
> "openejb.foo.TestBean".
> TRACE [Thread-10] openjpa.MetaData - An exception occurred while
> parsing jar:file:/tmp/OpenEJB_Generated_1334.jar!/META-INF/openejb-
> cmp-generated-orm.xml at location Line: 7, C: 31. This exception
> has been translated to a SAXException, and will be re-thrown. The
> original exception is being logged along with this message.
> java.lang.NoSuchFieldException: KEY_ID
> at java.lang.Class.getDeclaredField(Class.java:1854)
> at
> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.parseField
> (XMLPersistenceMetaDataParser.java:1079)
> at
> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.startId
> (XMLPersistenceMetaDataParser.java:877)
> at
> org.apache.openjpa.persistence.XMLPersistenceMetaDataParser.startClass
> Element(XMLPersistenceMetaDataParser.java:543)
> at org.apache.openjpa.lib.meta.CFMetaDataParser.startElement
> (CFMetaDataParser.java:105)
> at org.apache.openjpa.lib.meta.XMLMetaDataParser.startElement
> (XMLMetaDataParser.java:426)
> at org.apache.xerces.parsers.AbstractSAXParser.startElement
> (Unknown Source)
> at org.apache.xerces.impl.xs.XMLSchemaValidator.startElement
> (Unknown Source)
> at
> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement
> (Unknown Source)
> at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl
> $FragmentContentDispatcher.dispatch(Unknown Source)
> at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument
> (Unknown Source)
> at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown
> Source)
> at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
> at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
> Source)
> at javax.xml.parsers.SAXParser.parse(SAXParser.java:375)
> at
> org.apache.openjpa.lib.meta.XMLMetaDataParser.parseNewResource
> (XMLMetaDataParser.java:370)
> at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse
> (XMLMetaDataParser.java:312)
> at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse
> (XMLMetaDataParser.java:289)
> at org.apache.openjpa.lib.meta.XMLMetaDataParser.parse
> (XMLMetaDataParser.java:263)
> at
> org.apache.openjpa.persistence.PersistenceMetaDataFactory.parseXML
> (PersistenceMetaDataFactory.java:229)
> at
> org.apache.openjpa.persistence.PersistenceMetaDataFactory.load
> (PersistenceMetaDataFactory.java:180)
> at
> org.apache.openjpa.meta.MetaDataRepository.getMetaDataInternal
> (MetaDataRepository.java:412)
> at org.apache.openjpa.meta.MetaDataRepository.getMetaData
> (MetaDataRepository.java:270)
> at org.apache.openjpa.enhance.PCEnhancer.<init>(PCEnhancer.java:
> 187)
> at org.apache.openjpa.enhance.PCClassFileTransformer.transform
> (PCClassFileTransformer.java:124)
> at org.apache.openjpa.persistence.PersistenceProviderImpl
> $ClassTransformerImpl.transform(PersistenceProviderImpl.java:140)
> at org.apache.openejb.persistence.PersistenceUnitInfoImpl
> $PersistenceClassFileTransformer.transform
> (PersistenceUnitInfoImpl.java:259)
>
> Note: the exception should at least tell us which class had the
> problem :)
>
> Is there some magic flag for JPA that, I can use to make it look in
> the super class fields persistent fields?
>
> -dain
>