Home » Modeling » EMF "Technology" (Ecore Tools, EMFatic, etc) » [Teneo] Illegal Argument Exception saving null object enumeration
| |
Re: [Teneo] Illegal Argument Exception saving null object enumeration [message #93835 is a reply to message #93818] |
Tue, 21 August 2007 21:50 |
Eclipse User |
|
|
|
Originally posted by: merks.ca.ibm.com
This is a multi-part message in MIME format.
--------------030906070809010207010804
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Martin,
The generated code does this
public BookCategory createBookCategoryFromString(EDataType
eDataType, String initialValue)
{
BookCategory result = BookCategory.get(initialValue);
if (result == null) throw new IllegalArgumentException("The
value '" + initialValue + "' is not a valid enumerator of '" +
eDataType.getName() + "'");
return result;
}
To support nillable elements in XML Schema, we also generate another
wrapper data type that allows null (since EEnum-based feature never
return null) and the method for that looks like this
public BookCategory createBookCategoryObjectFromString(EDataType
eDataType, String initialValue)
{
return
createBookCategoryFromString(LibraryPackage.Literals.BOOK_CA TEGORY,
initialValue);
}
So a null value for EEum-based feature would always serialize an xsi:nil
and we'd make no attempt to convert a null string value to a literal of
that type, we'd just set the feature's value to null. So maybe this
deep copy method should guard against creating an instance from a null
string value...
Martin Taal wrote:
> Hi Jeff,
> Teneo tries to translate the PeriodObject to a string, to do this it
> also touches the underlying Period enum. Afaics you should change the
> JiemFactoryImpl.createPeriodFromString to handle null values to solve
> this.
>
> For my curiosity why does directly using the enum disallow null values?
>
> gr. Martin
>
> Jeff Bellegarde wrote:
>> I'm trying to save a model and receiving the following error.
>>
>>
>> java.lang.IllegalArgumentException: The value 'null' is not a valid
>> enumerator of 'Period'
>> at
>> org.search.jiem.model.impl.JiemFactoryImpl.createPeriodFromS tring(JiemFactoryImpl.java:565)
>>
>> at
>> org.search.jiem.model.impl.JiemFactoryImpl.createPeriodObjec tFromString(JiemFactoryImpl.java:527)
>>
>> at
>> org.search.jiem.model.impl.JiemFactoryImpl.createFromString( JiemFactoryImpl.java:141)
>>
>> at
>> org.eclipse.emf.teneo.hibernate.mapping.DefaultToStringUserT ype.deepCopy(DefaultToStringUserType.java:77)
>>
>> at org.hibernate.type.CustomType.deepCopy(CustomType.java:179)
>> at org.hibernate.type.TypeFactory.deepCopy(TypeFactory.java:354 )
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:274)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.per formSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
>>
>> at
>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl. java:507)
>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java :499)
>> at
>> org.hibernate.engine.CascadingAction$1.cascade(CascadingActi on.java:218)
>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :216)
>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
>> at
>> org.hibernate.engine.Cascade.cascadeCollectionElements(Casca de.java:296)
>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: 242)
>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :219)
>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.cascadeAft erSave(AbstractSaveEventListener.java:437)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:326)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.per formSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
>>
>> at
>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl. java:507)
>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java :499)
>> at
>> org.hibernate.engine.CascadingAction$1.cascade(CascadingActi on.java:218)
>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :216)
>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBef oreSave(AbstractSaveEventListener.java:412)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:261)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
>>
>> at
>> org.hibernate.event.def.DefaultSaveEventListener.saveWithGen eratedOrRequestedId(DefaultSaveEventListener.java:33)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
>>
>> at
>> org.hibernate.event.def.DefaultSaveEventListener.performSave OrUpdate(DefaultSaveEventListener.java:27)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
>>
>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535 )
>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
>> at
>> org.search.jiem.exporting.ExportSiteModel.storeInDatabase(Ex portSiteModel.java:35)
>>
>> at
>> org.search.jiem.exporting.ExportSiteModelTest.testSimple(Exp ortSiteModelTest.java:164)
>>
>>
>>
>> The important section of the model is:
>>
>> <eClassifiers xsi:type="ecore:EClass" name="Exchange">
>> <eStructuralFeatures xsi:type="ecore:EAttribute" name="period"
>> unique="false"
>> eType="#//PeriodObject" unsettable="true"/>
>> </eClassifiers>
>>
>> <eClassifiers xsi:type="ecore:EEnum" name="Period">
>> <eAnnotations
>> source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
>> <details key="name" value="Period"/>
>> </eAnnotations>
>> <eLiterals name="Hour"/>
>> <eLiterals name="Day" value="1"/>
>> <eLiterals name="Week" value="2"/>
>> <eLiterals name="Year" value="3"/>
>> <eLiterals name="Month" value="4"/>
>> </eClassifiers>
>>
>> <eClassifiers xsi:type="ecore:EDataType" name="PeriodObject"
>> instanceClassName="org.eclipse.emf.common.util.Enumerator">
>> <eAnnotations
>> source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
>> <details key="name" value="Period:Object"/>
>> <details key="baseType" value="Period"/>
>> </eAnnotations>
>> </eClassifiers>
>>
>> The indirection through PeriodObject is to allow Exchange.period to
>> be set to null. Pointing Exchange.period directly to Period saves
>> correctly, but disallows having a null period.
>>
>> It looks like Teneo is ignoring the PeriodObject and just dealing
>> with the Period enum which can not be null.
>>
>> Is there a way to get Teneo to save a null enum reference correctly?
>>
>>
>>
>>
>
>
--------------030906070809010207010804
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Martin,<br>
<br>
The generated code does this<br>
<blockquote><small> public BookCategory
createBookCategoryFromString(EDataType eDataType, String initialValue)</small><br>
<small> {</small><br>
<small> BookCategory result = BookCategory.get(initialValue);</small><br>
<small> if (result == null) throw new
IllegalArgumentException("The value '" + initialValue + "' is not a
valid enumerator of '" + eDataType.getName() + "'");</small><br>
<small> return result;</small><br>
<small> }</small><br>
</blockquote>
<br>
To support nillable elements in XML Schema, we also generate another
wrapper data type that allows null (since EEnum-based feature never
return null) and the method for that looks like this<br>
<blockquote><small> public BookCategory
createBookCategoryObjectFromString(EDataType eDataType, String
initialValue)<br>
{<br>
return
createBookCategoryFromString(LibraryPackage.Literals.BOOK_CA TEGORY,
initialValue);<br>
}</small><br>
</blockquote>
So a null value for EEum-based feature would always serialize an
xsi:nil and we'd make no attempt to convert a null string value to a
literal of that type, we'd just set the feature's value to null. So
maybe this deep copy method should guard against creating an instance
from a null string value...<br>
<br>
<br>
Martin Taal wrote:
<blockquote cite="mid:fafkto$ko4$1@build.eclipse.org" type="cite">Hi
Jeff,
<br>
Teneo tries to translate the PeriodObject to a string, to do this it
also touches the underlying Period enum. Afaics you should change the
JiemFactoryImpl.createPeriodFromString to handle null values to solve
this.
<br>
<br>
For my curiosity why does directly using the enum disallow null values?
<br>
<br>
gr. Martin
<br>
<br>
Jeff Bellegarde wrote:
<br>
<blockquote type="cite">I'm trying to save a model and receiving the
following error.
<br>
<br>
<br>
java.lang.IllegalArgumentException: The value 'null' is not a valid
enumerator of 'Period'
<br>
at
org.search.jiem.model.impl.JiemFactoryImpl.createPeriodFromS tring(JiemFactoryImpl.java:565)
<br>
at
org.search.jiem.model.impl.JiemFactoryImpl.createPeriodObjec tFromString(JiemFactoryImpl.java:527)
<br>
at
org.search.jiem.model.impl.JiemFactoryImpl.createFromString( JiemFactoryImpl.java:141)
<br>
at
org.eclipse.emf.teneo.hibernate.mapping.DefaultToStringUserT ype.deepCopy(DefaultToStringUserType.java:77)
<br>
at org.hibernate.type.CustomType.deepCopy(CustomType.java:179)
<br>
at org.hibernate.type.TypeFactory.deepCopy(TypeFactory.java:354 )
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:274)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.per formSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
<br>
at
org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl. java:507)
<br>
at
org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java :499)
<br>
at
org.hibernate.engine.CascadingAction$1.cascade(CascadingActi on.java:218)
<br>
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
<br>
at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :216)
<br>
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
<br>
at
org.hibernate.engine.Cascade.cascadeCollectionElements(Casca de.java:296)
<br>
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: 242)
<br>
at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :219)
<br>
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
<br>
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.cascadeAft erSave(AbstractSaveEventListener.java:437)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:326)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.per formSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
<br>
at
org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl. java:507)
<br>
at
org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java :499)
<br>
at
org.hibernate.engine.CascadingAction$1.cascade(CascadingActi on.java:218)
<br>
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
<br>
at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :216)
<br>
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
<br>
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.cascadeBef oreSave(AbstractSaveEventListener.java:412)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:261)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
<br>
at
org.hibernate.event.def.DefaultSaveEventListener.saveWithGen eratedOrRequestedId(DefaultSaveEventListener.java:33)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
<br>
at
org.hibernate.event.def.DefaultSaveEventListener.performSave OrUpdate(DefaultSaveEventListener.java:27)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
<br>
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535 )
<br>
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
<br>
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
<br>
at
org.search.jiem.exporting.ExportSiteModel.storeInDatabase(Ex portSiteModel.java:35)
<br>
at
org.search.jiem.exporting.ExportSiteModelTest.testSimple(Exp ortSiteModelTest.java:164)
<br>
<br>
<br>
The important section of the model is:
<br>
<br>
<eClassifiers xsi:type="ecore:EClass" name="Exchange">
<br>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="period"
unique="false"
<br>
eType="#//PeriodObject" unsettable="true"/>
<br>
</eClassifiers>
<br>
<br>
<eClassifiers xsi:type="ecore:EEnum" name="Period">
<br>
<eAnnotations
source=<a class="moz-txt-link-rfc2396E" href="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">"http:///org/eclipse/emf/ecore/util/ExtendedMetaData"</a>>
<br>
<details key="name" value="Period"/>
<br>
</eAnnotations>
<br>
<eLiterals name="Hour"/>
<br>
<eLiterals name="Day" value="1"/>
<br>
<eLiterals name="Week" value="2"/>
<br>
<eLiterals name="Year" value="3"/>
<br>
<eLiterals name="Month" value="4"/>
<br>
</eClassifiers>
<br>
<br>
<eClassifiers xsi:type="ecore:EDataType" name="PeriodObject"
instanceClassName="org.eclipse.emf.common.util.Enumerator">
<br>
<eAnnotations
source=<a class="moz-txt-link-rfc2396E" href="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">"http:///org/eclipse/emf/ecore/util/ExtendedMetaData"</a>>
<br>
<details key="name" value="Period:Object"/>
<br>
<details key="baseType" value="Period"/>
<br>
</eAnnotations>
<br>
</eClassifiers>
<br>
<br>
The indirection through PeriodObject is to allow Exchange.period to be
set to null. Pointing Exchange.period directly to Period saves
correctly, but disallows having a null period.
<br>
<br>
It looks like Teneo is ignoring the PeriodObject and just dealing with
the Period enum which can not be null.
<br>
<br>
Is there a way to get Teneo to save a null enum reference correctly?
<br>
<br>
<br>
<br>
<br>
</blockquote>
<br>
<br>
</blockquote>
<br>
</body>
</html>
--------------030906070809010207010804--
|
|
| | | | |
Re: [Teneo] Illegal Argument Exception saving null object enumeration [message #609499 is a reply to message #93818] |
Tue, 21 August 2007 21:50 |
Ed Merks Messages: 33217 Registered: July 2009 |
Senior Member |
|
|
This is a multi-part message in MIME format.
--------------030906070809010207010804
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Martin,
The generated code does this
public BookCategory createBookCategoryFromString(EDataType
eDataType, String initialValue)
{
BookCategory result = BookCategory.get(initialValue);
if (result == null) throw new IllegalArgumentException("The
value '" + initialValue + "' is not a valid enumerator of '" +
eDataType.getName() + "'");
return result;
}
To support nillable elements in XML Schema, we also generate another
wrapper data type that allows null (since EEnum-based feature never
return null) and the method for that looks like this
public BookCategory createBookCategoryObjectFromString(EDataType
eDataType, String initialValue)
{
return
createBookCategoryFromString(LibraryPackage.Literals.BOOK_CA TEGORY,
initialValue);
}
So a null value for EEum-based feature would always serialize an xsi:nil
and we'd make no attempt to convert a null string value to a literal of
that type, we'd just set the feature's value to null. So maybe this
deep copy method should guard against creating an instance from a null
string value...
Martin Taal wrote:
> Hi Jeff,
> Teneo tries to translate the PeriodObject to a string, to do this it
> also touches the underlying Period enum. Afaics you should change the
> JiemFactoryImpl.createPeriodFromString to handle null values to solve
> this.
>
> For my curiosity why does directly using the enum disallow null values?
>
> gr. Martin
>
> Jeff Bellegarde wrote:
>> I'm trying to save a model and receiving the following error.
>>
>>
>> java.lang.IllegalArgumentException: The value 'null' is not a valid
>> enumerator of 'Period'
>> at
>> org.search.jiem.model.impl.JiemFactoryImpl.createPeriodFromS tring(JiemFactoryImpl.java:565)
>>
>> at
>> org.search.jiem.model.impl.JiemFactoryImpl.createPeriodObjec tFromString(JiemFactoryImpl.java:527)
>>
>> at
>> org.search.jiem.model.impl.JiemFactoryImpl.createFromString( JiemFactoryImpl.java:141)
>>
>> at
>> org.eclipse.emf.teneo.hibernate.mapping.DefaultToStringUserT ype.deepCopy(DefaultToStringUserType.java:77)
>>
>> at org.hibernate.type.CustomType.deepCopy(CustomType.java:179)
>> at org.hibernate.type.TypeFactory.deepCopy(TypeFactory.java:354 )
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:274)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.per formSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
>>
>> at
>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl. java:507)
>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java :499)
>> at
>> org.hibernate.engine.CascadingAction$1.cascade(CascadingActi on.java:218)
>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :216)
>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
>> at
>> org.hibernate.engine.Cascade.cascadeCollectionElements(Casca de.java:296)
>> at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: 242)
>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :219)
>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.cascadeAft erSave(AbstractSaveEventListener.java:437)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:326)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.per formSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
>>
>> at
>> org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl. java:507)
>> at org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java :499)
>> at
>> org.hibernate.engine.CascadingAction$1.cascade(CascadingActi on.java:218)
>> at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
>> at org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :216)
>> at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
>> at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.cascadeBef oreSave(AbstractSaveEventListener.java:412)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:261)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
>>
>> at
>> org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
>>
>> at
>> org.hibernate.event.def.DefaultSaveEventListener.saveWithGen eratedOrRequestedId(DefaultSaveEventListener.java:33)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
>>
>> at
>> org.hibernate.event.def.DefaultSaveEventListener.performSave OrUpdate(DefaultSaveEventListener.java:27)
>>
>> at
>> org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
>>
>> at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535 )
>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
>> at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
>> at
>> org.search.jiem.exporting.ExportSiteModel.storeInDatabase(Ex portSiteModel.java:35)
>>
>> at
>> org.search.jiem.exporting.ExportSiteModelTest.testSimple(Exp ortSiteModelTest.java:164)
>>
>>
>>
>> The important section of the model is:
>>
>> <eClassifiers xsi:type="ecore:EClass" name="Exchange">
>> <eStructuralFeatures xsi:type="ecore:EAttribute" name="period"
>> unique="false"
>> eType="#//PeriodObject" unsettable="true"/>
>> </eClassifiers>
>>
>> <eClassifiers xsi:type="ecore:EEnum" name="Period">
>> <eAnnotations
>> source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
>> <details key="name" value="Period"/>
>> </eAnnotations>
>> <eLiterals name="Hour"/>
>> <eLiterals name="Day" value="1"/>
>> <eLiterals name="Week" value="2"/>
>> <eLiterals name="Year" value="3"/>
>> <eLiterals name="Month" value="4"/>
>> </eClassifiers>
>>
>> <eClassifiers xsi:type="ecore:EDataType" name="PeriodObject"
>> instanceClassName="org.eclipse.emf.common.util.Enumerator">
>> <eAnnotations
>> source="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">
>> <details key="name" value="Period:Object"/>
>> <details key="baseType" value="Period"/>
>> </eAnnotations>
>> </eClassifiers>
>>
>> The indirection through PeriodObject is to allow Exchange.period to
>> be set to null. Pointing Exchange.period directly to Period saves
>> correctly, but disallows having a null period.
>>
>> It looks like Teneo is ignoring the PeriodObject and just dealing
>> with the Period enum which can not be null.
>>
>> Is there a way to get Teneo to save a null enum reference correctly?
>>
>>
>>
>>
>
>
--------------030906070809010207010804
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: 7bit
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Martin,<br>
<br>
The generated code does this<br>
<blockquote><small> public BookCategory
createBookCategoryFromString(EDataType eDataType, String initialValue)</small><br>
<small> {</small><br>
<small> BookCategory result = BookCategory.get(initialValue);</small><br>
<small> if (result == null) throw new
IllegalArgumentException("The value '" + initialValue + "' is not a
valid enumerator of '" + eDataType.getName() + "'");</small><br>
<small> return result;</small><br>
<small> }</small><br>
</blockquote>
<br>
To support nillable elements in XML Schema, we also generate another
wrapper data type that allows null (since EEnum-based feature never
return null) and the method for that looks like this<br>
<blockquote><small> public BookCategory
createBookCategoryObjectFromString(EDataType eDataType, String
initialValue)<br>
{<br>
return
createBookCategoryFromString(LibraryPackage.Literals.BOOK_CA TEGORY,
initialValue);<br>
}</small><br>
</blockquote>
So a null value for EEum-based feature would always serialize an
xsi:nil and we'd make no attempt to convert a null string value to a
literal of that type, we'd just set the feature's value to null. So
maybe this deep copy method should guard against creating an instance
from a null string value...<br>
<br>
<br>
Martin Taal wrote:
<blockquote cite="mid:fafkto$ko4$1@build.eclipse.org" type="cite">Hi
Jeff,
<br>
Teneo tries to translate the PeriodObject to a string, to do this it
also touches the underlying Period enum. Afaics you should change the
JiemFactoryImpl.createPeriodFromString to handle null values to solve
this.
<br>
<br>
For my curiosity why does directly using the enum disallow null values?
<br>
<br>
gr. Martin
<br>
<br>
Jeff Bellegarde wrote:
<br>
<blockquote type="cite">I'm trying to save a model and receiving the
following error.
<br>
<br>
<br>
java.lang.IllegalArgumentException: The value 'null' is not a valid
enumerator of 'Period'
<br>
at
org.search.jiem.model.impl.JiemFactoryImpl.createPeriodFromS tring(JiemFactoryImpl.java:565)
<br>
at
org.search.jiem.model.impl.JiemFactoryImpl.createPeriodObjec tFromString(JiemFactoryImpl.java:527)
<br>
at
org.search.jiem.model.impl.JiemFactoryImpl.createFromString( JiemFactoryImpl.java:141)
<br>
at
org.eclipse.emf.teneo.hibernate.mapping.DefaultToStringUserT ype.deepCopy(DefaultToStringUserType.java:77)
<br>
at org.hibernate.type.CustomType.deepCopy(CustomType.java:179)
<br>
at org.hibernate.type.TypeFactory.deepCopy(TypeFactory.java:354 )
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:274)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.per formSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
<br>
at
org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl. java:507)
<br>
at
org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java :499)
<br>
at
org.hibernate.engine.CascadingAction$1.cascade(CascadingActi on.java:218)
<br>
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
<br>
at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :216)
<br>
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
<br>
at
org.hibernate.engine.Cascade.cascadeCollectionElements(Casca de.java:296)
<br>
at org.hibernate.engine.Cascade.cascadeCollection(Cascade.java: 242)
<br>
at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :219)
<br>
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
<br>
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.cascadeAft erSave(AbstractSaveEventListener.java:437)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:326)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.per formSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:98)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
<br>
at
org.hibernate.impl.SessionImpl.fireSaveOrUpdate(SessionImpl. java:507)
<br>
at
org.hibernate.impl.SessionImpl.saveOrUpdate(SessionImpl.java :499)
<br>
at
org.hibernate.engine.CascadingAction$1.cascade(CascadingActi on.java:218)
<br>
at org.hibernate.engine.Cascade.cascadeToOne(Cascade.java:268)
<br>
at
org.hibernate.engine.Cascade.cascadeAssociation(Cascade.java :216)
<br>
at org.hibernate.engine.Cascade.cascadeProperty(Cascade.java:16 9)
<br>
at org.hibernate.engine.Cascade.cascade(Cascade.java:130)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.cascadeBef oreSave(AbstractSaveEventListener.java:412)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav eOrReplicate(AbstractSaveEventListener.java:261)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.performSav e(AbstractSaveEventListener.java:180)
<br>
at
org.hibernate.event.def.AbstractSaveEventListener.saveWithGe neratedId(AbstractSaveEventListener.java:121)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.sav eWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener .java:186)
<br>
at
org.hibernate.event.def.DefaultSaveEventListener.saveWithGen eratedOrRequestedId(DefaultSaveEventListener.java:33)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.ent ityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
<br>
at
org.hibernate.event.def.DefaultSaveEventListener.performSave OrUpdate(DefaultSaveEventListener.java:27)
<br>
at
org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onS aveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
<br>
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535 )
<br>
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
<br>
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
<br>
at
org.search.jiem.exporting.ExportSiteModel.storeInDatabase(Ex portSiteModel.java:35)
<br>
at
org.search.jiem.exporting.ExportSiteModelTest.testSimple(Exp ortSiteModelTest.java:164)
<br>
<br>
<br>
The important section of the model is:
<br>
<br>
<eClassifiers xsi:type="ecore:EClass" name="Exchange">
<br>
<eStructuralFeatures xsi:type="ecore:EAttribute" name="period"
unique="false"
<br>
eType="#//PeriodObject" unsettable="true"/>
<br>
</eClassifiers>
<br>
<br>
<eClassifiers xsi:type="ecore:EEnum" name="Period">
<br>
<eAnnotations
source=<a class="moz-txt-link-rfc2396E" href="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">"http:///org/eclipse/emf/ecore/util/ExtendedMetaData"</a>>
<br>
<details key="name" value="Period"/>
<br>
</eAnnotations>
<br>
<eLiterals name="Hour"/>
<br>
<eLiterals name="Day" value="1"/>
<br>
<eLiterals name="Week" value="2"/>
<br>
<eLiterals name="Year" value="3"/>
<br>
<eLiterals name="Month" value="4"/>
<br>
</eClassifiers>
<br>
<br>
<eClassifiers xsi:type="ecore:EDataType" name="PeriodObject"
instanceClassName="org.eclipse.emf.common.util.Enumerator">
<br>
<eAnnotations
source=<a class="moz-txt-link-rfc2396E" href="http:///org/eclipse/emf/ecore/util/ExtendedMetaData">"http:///org/eclipse/emf/ecore/util/ExtendedMetaData"</a>>
<br>
<details key="name" value="Period:Object"/>
<br>
<details key="baseType" value="Period"/>
<br>
</eAnnotations>
<br>
</eClassifiers>
<br>
<br>
The indirection through PeriodObject is to allow Exchange.period to be
set to null. Pointing Exchange.period directly to Period saves
correctly, but disallows having a null period.
<br>
<br>
It looks like Teneo is ignoring the PeriodObject and just dealing with
the Period enum which can not be null.
<br>
<br>
Is there a way to get Teneo to save a null enum reference correctly?
<br>
<br>
<br>
<br>
<br>
</blockquote>
<br>
<br>
</blockquote>
<br>
</body>
</html>
--------------030906070809010207010804--
Ed Merks
Professional Support: https://www.macromodeling.com/
|
|
| | | |
Goto Forum:
Current Time: Mon Sep 23 23:47:31 GMT 2024
Powered by FUDForum. Page generated in 0.03560 seconds
|