2

重複の可能性:
xjc とカスタマイズされたバインディングを使用して XMLElementWrapper アノテーションを生成する方法

この形式のXMLをJAXBで処理できるようにしたいのですが...

<configuration>
  <!-- more content here -->
  <things>
    <thing>
      <name>xx1</name>
      <value>yy1</value>
    </thing>
    <thing>
      <name>xx2</name>
      <value>yy2</value>
    </thing>
  </things>
  <!-- more content here -->
</configuration>

上記の XML をこれらの Java クラスにマーシャリングしたいと思います (簡単にするために、getter/setter だけでなく などの修飾子も残しました) publicprotected

class Configuration {
  List<Thing> things;
}

class Thing {
  String name;
  String value;
}

現在の XSD 構造の関連部分は、おおよそ次のようになります。

<complexType name="Configuration">
  <sequence>
    <!-- ... -->
    <element name="things" type="ns:Things" minOccurs="0" maxOccurs="unbounded"/>
    <!-- ... -->
  </sequence>
</complexType>

<complexType name="Things">
  <sequence>
    <element name="thing" type="ns:Thing" minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
</complexType>

残念ながら、XJCThingsは、処理の Java 部分で本当に不要な場合でもクラスを生成します。だから私の出力はこれです:

class Configuration {
  Things things;
}

class Things {
  List<Thing> thing;
}

class Thing {
  String name;
  String value;
}

この不要なクラスを生成しないように XJC に指示する方法はありますか? または、その世代を回避するために XSD を言い換えることができる方法はありますか? どちらのオプションも私には問題ありません。

@XmlElementWrapper実際、ここに記載されているように、注釈を生成する必要があると思います。

4

2 に答える 2

1

考えられる解決策は、この質問に記載されています。

xjc とカスタマイズされたバインディングを使用して XMLElementWrapper アノテーションを生成する方法

このXJC プラグインを使用すると、次の Java コードを生成でき、必要なことを正確に実行できます (無関係な注釈は省略されています)。

class Configuration {

  @XmlElementWrapper(name = "things")
  @XmlElement(name = "thing")
  List<Thing> things;
}

class Thing {
  String name;
  String value;
}
于 2012-02-12T11:29:58.923 に答える
0

複合型は大まかにクラスに変換されることを考慮する必要があります。したがって、XSD スキーマの "Things" 複合型は必要ありません。XSD は次のようになります。

    <complexType name="Configuration">
    <sequence>
        <element name="things">
        <complexType>
            <sequence>
                <element name="thing" type="ns:Thing" minOccurs="0"
                    maxOccurs="unbounded" />
            </sequence>
            </complexType>F
        </element>
    </sequence>
    <!-- ... -->

</complexType>

<complexType name="Thing">
    <sequence>
        <element name="name" type="string" />
        <element name="value" type="string" />
    </sequence>
</complexType>
于 2012-02-11T14:55:57.383 に答える