考虑使用JAXB构建此xml消息:
<msg>
<database id="111">
<table name="t1" pkCol="id">
<row op="update">
<col name="id" value="12345"/>
<col name="age" value="30"/>
<col name="name" value="John"/>
</row>
<row ...>
</row>
</table>
<table ...>
:
</table>
</database>
<database ...>
<table ...>
</table>
</database>
</msg>
我们现有的遗留实现是每个标记都有一个单独的类,即Msg,Database,Table,Row和Column。没有共同的基类。每个类都有一个List / ArrayList,一个无参数构造函数,以及其他用于@XmlAttribute和List添加的setter。
尝试应用Composite模式(其他模式建议?),因为所有这些类都是相当多的节点(带有子节点)并且具有自己的相应属性。提出一个共同的基类
class Node<X> extends ArrayList<X>
但不知道如何在子类中对基类应用@XmlElement(name =“depends_on_subclass”)。除非在子类中并在虚拟getSelf()方法上添加@XmlElement,例如在表中,
class Table extends Node<Row>
{
@XmlElement(name="row")
public Table getSelf()
{
return this;
}
:
:
还有其他更好的建议吗?提前谢谢。
答案 0 :(得分:0)
我假设你使用xjc,在这种情况下你可以使用jaxb插件
我使用了这个插件http://confluence.highsource.org/display/J2B/Inheritance+plugin
然后将这样的内容添加到您的xml中。就是这样。他们将扩展给定的基类。
<xsd:element name="attributesRequest">
<xsd:annotation>
<xsd:appinfo>
<inheritance:extends>com.work.autofill.common.Filter</inheritance:extends>
</xsd:appinfo>
</xsd:annotation>