2009-03-18 18 views
10

私は、@XmlRootElementとして注釈を付けられたクラスを@XmlAccessorType(XmlAccessType.NONE)としています。私が抱えている問題は、スーパークラスのメソッドがバインドされていて、クラスを更新できないときにスーパークラスのメソッドがバインドされていることです。私は、これが起こらないようにルート要素クラスに置くことができる注釈があることを望んでいます。マーシャリング時にJAXBが@XmlRootElementのスーパークラスメソッドをバインドするのを防ぐにはどうすればよいですか?

例:

@XmlRootElement 
@XmlAccessorType(XmlAccessType.NONE) 
public class Person extends NamedObject { 

    @XmlElement 
    public String getId() { ... } 

} 

私はPerson@XmlElement注釈付きメソッドのみを結合し、整列化が、スーパークラスのメソッドはすべて同様に、拘束されていることであろうと予想されます。結果として得られるXMLは、あまりにも多くの情報を持っています。

スーパークラス自体にアノテーションを付けなくても、スーパークラスのメソッドがバインドされないようにするにはどうすればよいですか?

答えて

6

How can I ignore a superclass?

それはスーパークラスを変更することなく、スーパークラスを無視するようにJAX-Bでは不可能です。

アップデート2: は、そのポストの関連部分を引用し、私は同様の問題のためにa thread on java.net を見つけました。そのスレッド は another issueという複製としてマークされた @ XmlTransient注釈の結果、enhancement requestになりました。これらのバグレポートの コメントは、 の現在の仕様では不可能だと私に連絡します。

+0

java.net上のそのスレッドへのリンクを提供できますか? – Matt

+0

参照されたSO問題の引用部分からのリンクを追加しました。 – benvolioT

5

だけEACHスーパークラスの宣言(およびクラス自体)の前に

@XmlAccessorType(XmlAccessType.NONE) 

を追加します。あなたのケースでは

@XmlAccessorType(XmlAccessType.NONE) 
class NamedObject{ 
    [ ... ] 
} 

これは、各スーパークラスのために実際に行わなければならないことを忘れないでください、それはしばしば巨大なクラスの依存関係ツリーを扱うときに忘れ です。

インターフェイスには、もちろん、JAXB注釈は必要ありません。

+0

スーパークラスに入ることを避けたいと思っていましたが、この結論に至りました。答えをありがとう。 – Matt

1

私は全く同じ問題に直面しています。 私のスーパークラスはJAXBアノテーションを処理しません(これは必須ではありません)。マーシャリング中にスーパークラスのプロパティを含めないようにしたいと思います。

私はスーパークラスを変更する方法がないので、スーパークラスにXmlAccesorTypeを追加することはできません。

他に解決策はありますか?このStackOverflowのポストによれば

+1

これについて何かを見つけましたか? – Matt

+0

プロパティをオーバーライドし、 '@ XMLTransient'アノテーションを追加します。 – HDave

3

私はこの質問がかなり古いことは知っていますが、あなたのスーパークラスがその子と同じパッケージに入っている場合には、一種の解決法があります。

があなたのパッケージにpackage-info.javaを作成し、明らかに

@XmlAccessorType(XmlAccessType.NONE) 
package my.package.with.classes; 

を挿入し、それがパッケージ内のすべてのクラスに応じXmlAccessType.NONEを設定します。私自身、ドメインモデルのすべてのパッケージで使用しています。したがって、私はかなり安全です。しかし、あなたのクラスが「手の届かないところにいる」場合、f.e.それはJDKにあり、[JAX-B] How can I ignore a superclass?で受け入れられた答えの解決法を使用します。

私が行ったようにこの質問につまずく誰のためにも役立つことを願っています。

0

JAX-B実装をMOXyに置き換えて、必要な操作を行うことができます。通常のJAX-Bを上回る拡張機能を備えており、継承されたプロパティなどを無視することができます。また、JAX-BアノテーションをXMLマッピングファイルに移動して、複数のマッピングセットを保持することもできます。

関連する問題