1

注釈付きのクラスを使用して JAXB で解析したいさまざまな XML リターンがあります。XML ファイルの多くは、同様のトップ構造を共有しており、内側のタグの内容は異なる場合があります。ContextInstance をインスタンスではなくクラスとして送信したため、クラスを追加できません。

このような 2 つのファイルの例を考えると、最上位の xml を毎回繰り返さない一連の JAXB 注釈を作成するにはどうすればよいでしょうか。

<?xml version='1.0' encoding='UTF-8'?>
<eveapi version="2">
  <currentTime>2008-11-24 20:14:29</currentTime>
  <result>
    <serverOpen>True</serverOpen>
    <onlinePlayers>38102</onlinePlayers>
  </result>
  <cachedUntil>2008-11-24 20:17:29</cachedUntil>
</eveapi>

そして、次のような別のファイル:

<?xml version='1.0' encoding='UTF-8'?>
<eveapi version="2">
  <currentTime>2012-02-12 14:39:12</currentTime>
  <result>
    <rowset name="characters" key="characterID"     columns="name,characterID,corporationName,corporationID">
      <row name="Alexis Prey" characterID="1365215823" corporationName="Puppies To the     Rescue" corporationID="238510404"/>
    </rowset>
  </result>
  <cachedUntil>2012-02-12 15:27:00</cachedUntil>
</eveapi>

一般的なトップレベルクラスは次のようになります

@XmlRootElement(name="eveapi")
public class EveApiConfig {
    @XmlElement(required = true)
    protected Date currentTime;

    @XmlElement(required = true)
    protected String cachedUntil;

    @XmlAttribute(name = "version", required = true)
    protected int version;

    @XmlElement(required = true)
    protected ResultsConfig result;
}

しかし、ResultsConfig は他にもたくさんあります。逆のXmlSeeAlsoが必要なようです

これを行う方法について何か考えはありますか?

4

1 に答える 1

1

これは、いくつかのオブジェクト ファクトリで実現できると思います。解決策をスケッチします。

  • を作成resultし、次の@XmlElementRefように入力しますJAXBElement<AbstractResultConfig>
  • ケースごとに、ObjectFactory
  • の異なるサブクラスのインスタンスでを作成する異なるファクトリ メソッドをObjectFactory実装するクラスはどれですか。何かのようなもの:@XmlElementDeclJAXBElementAbstractResultConfig

    @XmlElementDecl(name = "Result")
    public JAXBElement<ResultConfigImpl> createResultConfigImpl(ResultConfigImpl value) {
        return new JAXBElement<ResultConfigImpl>(..., ResultConfigImpl.class, null, value);
    }
    

ith をcreateResultConfig()メソッドなどと組み合わせる必要があると思います。

于 2013-02-02T20:19:37.757 に答える