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