4

変更できない xsd スキーマがあります。生成された Java クラスを生成します。

クラスが次のようになっているとします。

       class Data {
          protected List<Value> value;
          ... 
       }
       class Value {
           ...
        }

ここで、理想的には Value から拡張するために、独自の MyValue を用意する必要があります。

class MyValue extends Value {

     Integer myOwnField1;
     Long anotherProperty;

}

また、xml ファイルを解析するときに Value の代わりに MyValue を使用する unmarshaller と言うことができます。

後で、MyValue にいくつかの有用な新しいフィールドを含めることができるという事実を使用して、それらを操作したり、変更したりできるようになります。したがって、スキーマにある機能を変更せずに拡張したいと考えています。

アンマーシャラーの Value を MyValue に置き換えることは何とか可能ですか?

マップを作成する明白な方法とは別に、アンマーシャラーによって生成されたオブジェクトを MyValue の独自のフィールドとプロパティにマップできます。この方法は避けたいと思います。

4

2 に答える 2

0

宣言された型によるアンマーシャリングに興味があるかもしれません: 実際、XSD をルート要素からオーバーライドする必要があるすべての子要素にオーバーライドする場合、unmarshalメソッドで 2 番目の引数を使用して、カスタム マッピングを指定できます。

<T> JAXBElement<T> unmarshal(Source source,
                             Class<T> declaredType)
                         throws JAXBException

[...] definedType - ソースの xml ルート要素を保持するための適切な JAXB マップ クラス

(詳細については、 Unmarshaller javadocを参照してください)

于 2013-04-02T12:24:06.903 に答える