No worries. Werner
Fabien Thouny wrote: > Oh, excuse me, I didn't want to seem impatient ... > > It's just that I received some mails from the mailing list > but not related to my topic. So I just wonder if you have taken my mail into > account. > > Now I know that you well received the mail, > so take your time and sorry again for the misunderstanding. > > Thanks again, > > Fabien > > > -------- Message d'origine-------- > De: Werner Guttmann [mailto:[email protected]] > Date: mer. 01/07/2009 11:15 > À: [email protected] > Objet : Re: [castor-user] Problems with use of identity and reference fields > > Sure, but it might take us (sometimes) a few days to find the (private) > time to look into things in detail. So please have some patience. > > Werner > > Fabien Thouny wrote: >> Hello, >> >> >> >> Nobody to help me, please ? >> >> >> >> Fabien >> >> >> >> De : Fabien Thouny [mailto:[email protected]] >> Envoyé : vendredi 26 juin 2009 15:36 >> À : [email protected] >> Objet : [castor-user] Problems with use of identity and reference fields >> >> >> >> Hello, >> >> >> >> I have some problems to use the "reference" field in the class element. >> >> >> >> Some more details on a simple project to test and show the problem : >> >> I have a simple class named "ClassA" which has only one attribute "id" like >> this : >> >> >> >> public class ClassA { >> >> private int id; >> >> public final int getId () { return id; } >> >> public final void setId (final int id) { this.id = id; } >> >> public String toString() { return ("A : " + getId()); } >> >> } >> >> >> >> Two others class are referencing the same object ClassA : >> >> public class Test { >> >> private ClassA classA; >> >> public void setClassA(ClassA classA) { this.classA = classA; } >> >> public ClassA getClassA() { return classA; } >> >> public String toString () { return ((classA == null)? null >> : classA.toString());} >> >> } >> >> >> >> public class TestReference { >> >> private ClassA classA; >> >> public void setClassA(ClassA classA) { this.classA = classA; } >> >> public ClassA getClassA() { return classA; } >> >> public String toString () { return ((classA == null)? null >> : classA.toString()); } >> >> } >> >> You can notice that these two classes have exactly the same code. >> >> >> >> Finally there is the main object named "TestConteneur" which references an >> instance of each two previous classes. >> >> public class TestConteneur { >> >> private Test test; >> >> private TestReference testRef; >> >> public void setTest(Test test) { this.test = test; } >> >> public Test getTest() { return test; } >> >> public void setTestRef(TestReference testRef) { this.testRef = testRef; } >> >> public TestReference getTestRef() { return testRef; } >> >> public String toString() { return (test + "\nref : " + testRef); } >> >> } >> >> >> >> Now the mapping file : >> >> <?xml version="1.0" encoding="UTF-8"?> >> >> <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" >> >> "http://castor.exolab.org/mapping.dtd"> >> >> <mapping> >> >> <description>Test mapping</description> >> >> >> >> <class name="test.ClassA" identity="id"> >> >> <field name="id" type="integer"> >> >> <bind-xml name="id" node="attribute"/> >> >> </field> >> >> </class> >> >> <class name="test.TestReference"> >> >> <field name="classA" >> >> type="test.ClassA"> >> >> <bind-xml name="ARef" reference="true"/> >> >> </field> >> >> </class> >> >> <class name="test.Test"> >> >> <field name="classA" >> >> type="test.ClassA"> >> >> <bind-xml name="A"/> >> >> </field> >> >> </class> >> >> <class name="test.TestConteneur"> >> >> <map-to xml="Conteneur"/> >> >> <field name="test" >> >> type="test.Test"> >> >> <bind-xml name="Test"/> >> >> </field> >> >> <field name="testRef" >> >> type="test.TestReference"> >> >> <bind-xml name="TestRef"/> >> >> </field> >> >> </class> >> >> </mapping> >> >> >> >> You can notice that I want a reference on the object classA in the class >> TestReference. >> >> >> >> So when I marshal a TestConteneur object, I got this : >> >> <?xml version="1.0" encoding="UTF-8"?> >> >> <Conteneur> >> >> <Test> >> >> <A id="1"/> >> >> </Test> >> >> <TestRef> >> >> <ARef>1</ARef> >> >> </TestRef> >> >> </Conteneur> >> >> >> >> Fine ! >> >> >> >> But when I want to unmarshall, (with the same mapping file, I use XMLContext >> to create my marshallers and unmarshallers ;-)) >> >> >> >> I have an error : >> >> org.exolab.castor.xml.MarshalException: The following exception occured >> while validating field: testRef of class: test.TestConteneur: The object >> associated with IDREF "A : 1" of type class test.ClassA has no ID!{File: >> [not available]; line: 9; column: 13} >> >> at >> org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(Unmarshaller.java:794) >> >> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:760) >> >> at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:626) >> >> at test.TestMain.main(TestMain.java:77) >> >> >> >> I don't know why, but it seems that the id of the ClassA object is not >> correctly treated. >> >> >> >> What did I forget ? Can you help me, please? >> >> >> >> Thanks, >> >> >> >> Fabien >> >> >> >> P.S : my version of Castor is the 1.3. >> >> P.P.S. : sorry for my poor and bad English. >> >> > > --------------------------------------------------------------------- > To unsubscribe from this list, please visit: > > http://xircles.codehaus.org/manage_email > > > > > > > > ------------------------------------------------------------------------ > > --------------------------------------------------------------------- > To unsubscribe from this list, please visit: > > http://xircles.codehaus.org/manage_email --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email

