Hi,

here I am again. I have a problem with references. Marshalling is OK, but
while unmarshalling, I get exception: ValidationException: unable to resolve
reference: 2.
I can't figure out what is the problem here.

This is my object model.

public abstract calss Entity{

   private Integer id;
   //other

   //getters and setters
}

public class ArithmeticTree{

   private ConnectorNode root;
   private Set<AbsractInputNode> inputNodes;
   //other

   //getters and setters
}

public abstract class AbstractTreeNode extends Entity{

   private AbstractTreeNode parent;
   private ArrayList<AbstractTreeNode> children;
   private AbstractInputNode inputNode;
   //other

   //getters and setters
}

public class ConnectorNode extends AbstractTreeNode{

   //some members

   //getters and setters
}

public class MemberNode extends AbstractTreeNode{

   //some members

   //getters and setters
}

public abstract class AbstractInputNode extends Entity{

   //some members

  //getters and setters
}

public class InputNode extends AbstractInputNode{

   //some members

   //getters and setters
}

Mapping file

<class name="java-package.ArithmeticTree">
       <field name="root" type="java_package.ConnectorNode"/>
       <field name="inNodes" type="java_package.AbstractInputNode"
collection="arraylist">
           <bind-xml name="in-node" node="element" reference="true"/>
       </field>
       <!-- other -->
</class>

<class name="java_package.AbstractTreeNode" identity="id">
       <field name="parent" type="java_package.AbstractTreeNode">
           <bind-xml name="parent" node="element" reference="true"/>
       </field>
       <field name="children" type="java_package.AbstractTreeNode"
collection="arraylist">
           <bind-xml name="child"/>
       </field>
       <field name="inputNode" type="java_package.AbstractInputNode">
           <bind-xml name="in-node" node="element" reference="true"/>
       </field>
       <field name="id" type="integer">
           <bind-xml name="id" node="attribute"/>
       </field>
       <!-- other -->
</class>

<class name="java_package.ConnectorNode" identity="id"
extends="java_package.AbstractTreeNode">
       <field name="id" type="integer">
           <bind-xml name="id" node="attribute"/>
       </field>
       <!-- other -->
</class>

<class name="java_package.MemberNode" identity="id"
extends="java_package.AbstractTreeNode">
   <field name="id" type="integer">
           <bind-xml name="id" node="attribute"/>
   </field>
   <!-- other -->
</class>

<class name="java_package.AbstractInputNode" identity="id">
       <field name="id" type="integer">
           <bind-xml name="id" node="attribute"/>
       </field>
       <!--other-->
</class>

<class name="java_package.InputNode" identity="id"
extends="java_package.AbstractInputNode">
       <field name="id" type="integer">
           <bind-xml name="id" node="attribute"/>
       </field>
       <!--other-->
</class>

Marshalling output

<rule-model>
   <input-node id="2">
       <!- ... -->
   </input-node>
   <arithmetic-tree id="5">
       <root id="6">
           <child xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
                     id="8" xsi:type="member-node">
                       <in-node xsi:type="input-node">2</in-node>
           </child>
       </root>
       <in-node xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
xsi:type="input-node">2</in-node>
   </arithmetic-tree>
</rule-model>

Exception

unable to resolve reference: 2{File: [not available]; line: 36; column: 14}
   at
org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(
Unmarshaller.java:775)
   at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:741)
   at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:621)
...

Caused by: ValidationException: unable to resolve reference: 2
   at org.exolab.castor.xml.UnmarshalHandler.endElement(
UnmarshalHandler.java:907)
   at org.exolab.castor.xml.UnmarshalHandler.endElement(
UnmarshalHandler.java:1119)
   at org.apache.xerces.parsers.SAXParser.endElement(SAXParser.java:1403)
   at org.apache.xerces.validators.common.XMLValidator.callEndElement(
XMLValidator.java:1436)
...

Thanks for any help,

Marija

Reply via email to