Werner,
I am not sure if you see my post to this thread. The source generator is
broken when dealing with xsd:enumeration with the base type xsd:NMTOKEN
and xsd:inteter. There may be others but I only encountered these two. I
filed a bug on this (CASTOR-1267). Can you verify if this is the same
bug here?
thanks
Bill
Werner Guttmann wrote:
Stefan,
Can you please create a new issue at
http://jira.codehaus.org/browse/CASTOR, and attach all relevant files to
replay your problem. Iow, at least the mapping file (relevant portions
only) and the Java class as generated. If you could follow the bug
submission guidelines available at
http://www.castor.org/how-to-submit-a-bug.html
that would really help us
FYI, I think I know what the problem is, but I need a test case to play
with, and I'd appreciate your help here (hence me asking you to file a
new bug report).
Thanks
Werner
-----Original Message-----
From: Stefan Lober [mailto:[EMAIL PROTECTED]
Sent: Mittwoch, 23. November 2005 12:51
To: [email protected]
Subject: RE: [castor-user] [XML/JDO] Problems using
ClassDescriptors and a mapping file
Werner,
I have attached the stack trace.
Regards,
Stefan
--- Werner Guttmann <[EMAIL PROTECTED]>
schrieb:
Stefan,
Based upon Keith's comment, can you please post the complete stack
trace ?
Werner
-----Original Message-----
From: Keith Visco [mailto:[EMAIL PROTECTED]
Sent: Mittwoch, 23. November 2005 06:19
To: [email protected]
Subject: Re: [castor-user] [XML/JDO] Problems
using
ClassDescriptors and a mapping file
Stefan,
Type-safe enum style classes are generated without
a default
constructor. Castor XML handles these types of
classes, I
believe some work recently went into Castor JDO
for
supporting them as well, but I don't know the
extent of their support.
http://castor.codehaus.org/xml-mapping.html#7.5-Type-safe-enum
eration-mapping
You can use descriptors with a mapping, but the
mapping will
take precedence, so I recommend you remove any
items from the
mapping file that you don't want to customize and
then let
the descriptors handle the rest.
If you want to override just one field and let the
generated
descriptor do the rest, you can do the following:
<class name="Foo" auto-complete="true">
<field name="bar" handler="BarHandler"/>
</class>
Castor will load the FooDescriptor and then
override the
associated bar FieldDescriptor with the above
mapping.
You can also specify a GeneralizedFieldHandler
without a
mapping file if you use a binding-file during
source generation.
--Keith
Stefan Lober wrote:
Hello,
I have built my project around Castor using an
XML Schema
as starting
point for my development.
The development process is planned to be as
follows:
XSD => Java source (via SourceGenerator) Java
source =>
Java classes
(Java compiler) Java classes => mapping file for
XML&JDO
(MappingTool)
I have modified the MappingTool class, so that
it also
integrates JDO
mapping information in my mapping file.
The intention is to unmarshal an XML document
(described by
the XSD)
and persist it in the database.
Unfortunately, a construct in the XSD causes
some problems. This is
it:
<element name="state">
<complexType mixed="true">
<attribute name="id" type="int" use="optional"
/>
<attribute name="state-moment" use="required">
<simpleType>
<restriction base="NMTOKEN">
<enumeration value="Unknown" />
<enumeration value="StateEnd" />
<enumeration value="StateBegin" />
</restriction>
</simpleType>
</attribute>
<attribute name="stamptime" type="string"
use="required" />
</complexType>
</element>
This element is referenced from a another
element in the schema.
First, I had let the SourceGenerator generate
ONLY the
classes and NO
class descriptors (with -gen-mapping and
-nodesc).
I get this mapping back from MappingTool:
<class cst:name="log.State"
cst:depends="log.Systemstates" cst:identity="id"
cst:key-generator="MAX">
<description>Default mapping for class
log.State</description>
<map-to cst:table="State" cst:xml="state" />
<field
cst:name="valid"
cst:type="boolean">
<sql name="valid" dirty="check" />
<bind-xml name="valid" node="attribute" />
</field>
<field cst:name="id" cst:type="integer">
<sql name="id" type="integer" dirty="check" />
<bind-xml name="id" node="attribute" />
</field>
<field cst:name="content" cst:type="string">
<sql name="content" type="char" dirty="check"
/>
<bind-xml name="content" node="element" />
</field>
<field cst:name="stamptime" cst:type="string">
<sql name="stamptime" type="char"
dirty="check" />
<bind-xml name="stamptime" node="element" />
</field>
</class>
This gives me the following error when the
unmarshal method
is called:
Illegal Text data found as child of: state
value: "INIT"{file: [not available]; line: 5;
column: 85}
at
org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:671)
The according XML line ist this:
<state state-moment="StateBegin"
stamptime="2005-10-25T11:46:09" >INIT</state>
---------------------------------
So I tried using the class descriptors.
Unmarshalling the
XML document
works now. But as soon as I try to persist the
data in the
DB, I have
to use the generated mapping (form MappingTool).
The call of
JDOManager.loadConfiguration results in the
following
exception:
org.exolab.castor.mapping.MappingException: The
Java class
log.types.StateStateMomentType is not
constructable -- it does not
contain a default public constructor
at
org.exolab.castor.mapping.loader.ClassDescriptorImpl.<init>(ClassDescr
iptorImpl.java:161)
Is my approach of using class descriptors AND a
mapping file the
reason for this problem?
Is it possible to solve this?
Another question: Is it possible to use a
GerealizedFieldHandler
WITHOUT a mapping file?
Any hint would be appreciated.
Stefan
=== message truncated ===
___________________________________________________________
Gesendet von Yahoo! Mail - Jetzt mit 1GB Speicher kostenlos -
Hier anmelden: http://mail.yahoo.de
-------------------------------------------------
If you wish to unsubscribe from this list, please
send an empty message to the following address:
[EMAIL PROTECTED]
-------------------------------------------------
-------------------------------------------------
If you wish to unsubscribe from this list, please
send an empty message to the following address:
[EMAIL PROTECTED]
-------------------------------------------------