I've tried the following code, save using current version -> load using current version seems to work as expected:
void testCustomClassesXmlSerialization() throws Exception
{
String tempFile = "temp_custom_classes_reproduction.xml";
try
{
// Register custom classes with Diagram
Diagram.registerItemClass(Custom1Node.class, "Custom1Node", 1);
Diagram.registerItemClass(StyledTextComponent.class, "StyledTextComponent", 1);
Diagram.registerItemClass(TitleNode.class, "TitleNode", 1);
Diagram diagram1 = new Diagram();
// TitleNode (inherits from ShapeNode)
TitleNode titleNode = new TitleNode(diagram1);
titleNode.setBounds(10, 10, 40, 30);
titleNode.setText("Custom Title Node");
diagram1.add(titleNode);
// Custom1Node (inherits from CompositeNode)
Custom1Node customNode = new Custom1Node(diagram1);
customNode.setBounds(60, 10, 40, 30);
// Add StyledTextComponent to Custom1Node
StyledTextComponent styledTextComp = new StyledTextComponent();
styledTextComp.setText("Custom Styled Text Component");
customNode.getComponents().add(styledTextComp);
diagram1.add(customNode);
// Save to XML
diagram1.saveToXml(tempFile);
// Load from XML into a new Diagram instance
Diagram diagram2 = new Diagram();
diagram2.loadFromXml(tempFile);
// Verification
assert_equal(diagram1.getNodes().size(), diagram2.getNodes().size());
assert_equal(2, diagram2.getNodes().size());
DiagramNode loadedNode1 = diagram2.getNodes().get(0);
DiagramNode loadedNode2 = diagram2.getNodes().get(1);
// Assert types are correctly preserved upon loading
assert_equal(TitleNode.class, loadedNode1.getClass());
assert_equal(Custom1Node.class, loadedNode2.getClass());
// Assert content is preserved
TitleNode loadedTitle = (TitleNode)loadedNode1;
assert_equal("Custom Title Node", loadedTitle.getText());
Custom1Node loadedCustom = (Custom1Node)loadedNode2;
assert_equal(1, loadedCustom.getComponents().size());
assert_equal(StyledTextComponent.class, loadedCustom.getComponents().get(0).getClass());
StyledTextComponent loadedComp = (StyledTextComponent)loadedCustom.getComponents().get(0);
assert_equal("Custom Styled Text Component", loadedComp.getText());
System.out.println("testCustomClassesXmlSerialization ok");
}
finally
{
new File(tempFile).delete();
}
}
but using empty classes without XML method overrides -
public class Custom1Node extends CompositeNode
{
public Custom1Node()
{
super();
}
public Custom1Node(Diagram diagram)
{
super(diagram);
}
public Custom1Node(CompositeNode prototype)
{
super(prototype);
}
}
public class TitleNode extends ShapeNode
{
public TitleNode()
{
super();
}
public TitleNode(Diagram diagram)
{
super(diagram);
}
public TitleNode(ShapeNode prototype)
{
super(prototype);
}
}
public class StyledTextComponent extends TextComponent
{
public StyledTextComponent()
{
super();
}
}
Please also post the saveToXml and loadFromXml override of your subclasses.
Regards,
Slavcho
Mindfusion