1

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 の追加用のその他のセッターがあります。

Composite パターン (他のパターンの提案?) を適用しようとしています。これらのクラスはすべてノード (子ノードを持つ) であり、対応する独自の属性を持つためです。共通の基本クラスを考え出す

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 に答える