1

JAXB の引数なしコンストラクタの代わりにファクトリ メソッドを使用しようとしています。

基本クラスから継承する複数のクラスがあり、どれがインスタンス化されるかを示す唯一の指標はtype、xml 要素の属性です。

<tag-name type="boolean"/>

BooleanType をインスタンス化しますが、

<tag-name type="integer"/>

IntegerType をインスタンス化します。

ファクトリ メソッド内からアンマーシャリングされている要素の要素名/属性値にアクセスする方法はありますか?

(これは、おそらく、引数なしのコンストラクタよりもファクトリ メソッドを使用することの利点ですか?他にはありますか?)

(私はMOXyを使用していません)

4

1 に答える 1

3

基本クラスから継承する複数のクラスがあり、どれがインスタンス化されるかを示す唯一の指標は、xml 要素の属性タイプです。

任意のJAXB (JSR-222)実装を使用すると、 を使用しXmlAdapterて、任意の XML 属性が継承インジケーターである継承関係をマップできます。

ただし、任意の XML 属性を使用する代わりに、このxsi:type属性を使用して、コンテンツが XML スキーマによって適切に検証されるようにします。

それでも任意の XML 属性を使用する必要があり、JAXB プロバイダーであるEclipseLink MOXyを使用していた場合は、 @XmlDescriminatorNode/@XmlDescriminatorValue拡張子を利用できます。


ファクトリ メソッド内からアンマーシャリングされている要素の要素名/属性値にアクセスする方法はありますか?

JAXB 実装では、@XmlTypeアノテーションを介してファクトリ クラスとメソッドを指定できますが、これがこのユース ケースで探しているものだとは思いません。

XmlAdapterXML コンテンツを利用してインスタンス化する適切なサブクラスを決定するには、このアプローチを使用する必要があります。

于 2013-01-22T16:44:29.717 に答える