【发布时间】:2014-05-02 17:57:43
【问题描述】:
想象一棵Java对象树,即某个类的顶级对象,其中包含一些属性,而这些属性又是其他类的对象,依此类推,直到我们基本上达到整数或字符串等基本类型。例如:
class Car {
private Door _leftDoor;
private Door _rightDoor;
}
class Door {
private String _name;
}
通过序列化 Car 类的顶级对象,我希望看到一个 XML 文档,例如,像这样:
<object type="Car">
<property type="Door" identifier="_leftDoor">
<object type="Door">
<property type="String" identifier="_name">I am a left door!</property>
</object>
</property>
<property type="Door" identifier="_rightDoor">
<object type="Door">
<property type="String" identifier="_name">I am a right door!</property>
</object>
</property>
</object>
顺便说一下,请注意如何将这个片段插入到其他层次结构中,例如,如果 Car 对象是其他父对象的属性。
我的问题是:实现这个模式、结构、设计、架构的正确方法是什么>?我认为我的问题需要澄清一下。我想到的第一个也是最简单的实现方式类似于 Java 的传统 toString:
class Car {
...
public Element toElement(Element element) {
Document document = element.getOwnerDocument();
Attr attr;
Element objectElement = document.createElement("object");
element.appendChild(objectElement);
attr = document.createAttribute("type");
attr.setValue(class.getSimpleName());
objectElement.setAttributeNode(attr);
Element propertyElement;
propertyElement = document.createElement("property");
objectElement.appendChild(propertyElement);
attr = document.createAttribute("type");
attr.setValue(_leftDoor.getClass().getSimpleName());
propertyElement.setAttributeNode(attr);
attr = document.createAttribute("identifier");
attr.setValue("_leftDoor");
propertyElement.setAttributeNode(attr);
_leftDoor.toElement(propertyElement);
propertyElement = document.createElement("property");
objectElement.appendChild(propertyElement);
attr = document.createAttribute("type");
attr.setValue(_rightDoor.getClass().getSimpleName());
propertyElement.setAttributeNode(attr);
attr = document.createAttribute("identifier");
attr.setValue("_rightDoor");
propertyElement.setAttributeNode(attr);
_rightDoor.toElement(propertyElement);
return objectElement;
}
}
class Door {
...
public Element toElement(Element element) {
...
}
}
在将这种 XML 序列化直接添加为相应类的方法的意义上,这个想法有多好?我将它限制为将Element 作为参数是否很好(尽管由于Java XML API 的设计方式,我不得不这样做)?我回Element好吗?你有什么想法可以从这个实现的架构角度改进吗?欢迎任何建议。
我知道 java.beans.XMLEncoder 工具,但这是 Java 特定的 XML 序列化程序,在这种情况下对我来说是多余的。
【问题讨论】:
标签: java xml object dom serialization