1

考虑使用 JAXB 构建这个 xml msg:

<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 添加的其他设置器。

尝试应用复合模式(其他模式建议?),因为所有这些类几乎都是节点(带有子节点),但具有自己的相应属性。提出一个通用的基类

class Node<X> extends ArrayList<X>

但不知道如何从子类中将 @XmlElement(name ="depends_on_subclass") 应用于基类。除非在子类中并在虚拟 getSelf() 方法上添加 @XmlElement,例如在 Table 中,

class Table extends Node<Row>
{

    @XmlElement(name="row")
    public Table getSelf()
    {
        return this;
    }
:
:

还有其他或更好的建议吗?提前致谢。

4

1 回答 1

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>
于 2012-07-18T01:02:13.700 回答