users@jaxb.java.net

[Dealing with id/idref and circularity]

From: Francois Le Fevre <flefevre_at_genoscope.cns.fr>
Date: Wed, 25 Jan 2006 12:04:16 +0100

Dear all,

I have a problem with jaxb 1.x and id/idref and circularity.

for example, i would like to describe a family which is composed from
parent and children.
Parents have an idref to their children.
Child have an idref to their parents.

I have no problem to unmarshall, but i can't marshall.
Because it seems that jaxb is lost with the fact that a parent contains
a ref to a child, which contains a ref to it parent....

How can I solve my problem?
Do I have to add some customization to schema?

I am working on a more complicated schema dealing with protein, gene
object...

Thanks a lot.

Francois, from Paris, France

=========
xsd
==========
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2005 sp1 U (http://www.xmlspy.com) by GENOSCOPE
(GENOSCOPE) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:element name="test">
        <xs:annotation>
            <xs:documentation>Comment describing your root
element</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="parents" type="Parent" minOccurs="0"
maxOccurs="unbounded"/>
                <xs:element name="children" type="Child" minOccurs="0"
maxOccurs="unbounded"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:complexType name="Parent">
        <xs:sequence>
            <xs:element name="childrens" type="xs:IDREF" minOccurs="0"
maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID"/>
        <xs:attribute name="name" type="xs:string"/>
    </xs:complexType>
    <xs:complexType name="Child">
        <xs:sequence>
            <xs:element name="parents" type="xs:IDREF" minOccurs="0"
maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute name="id" type="xs:ID"/>
        <xs:attribute name="name" type="xs:string"/>
    </xs:complexType>
</xs:schema>

============
xml
===========
<?xml version="1.0" encoding="UTF-8"?>
<?jaxfront version=1.60;time=2006-01-25 11:37:32.765;xsd=test.xsd?>
<test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="test.xsd">
     <parents id="p1" name="papa">
          <childrens>c1</childrens>
          <childrens>c2</childrens>
     </parents>
     <parents id="p2" name="maman">
          <childrens>c2</childrens>
     </parents>
     <children id="c1" name="paul">
          <parents>p1</parents>
     </children>
     <children id="c2" name="chloe">
          <parents>p1</parents>
          <parents>p2</parents>
     </children>
</test>



Error message
===========
Exception in thread "main" java.lang.StackOverflowError
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ChildImpl.hashCode(ChildImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)
    at com.sun.xml.bind.util.ProxyListImpl.hashCode(ProxyListImpl.java:224)
    at generated.impl.ParentImpl.hashCode(ParentImpl.java:230)
    at java.util.AbstractList.hashCode(AbstractList.java:630)