10

@XmlRootElementwithとして注釈が付けられたクラスがあり@XmlAccessorType(XmlAccessType.NONE)ます。私が抱えている問題は、スーパークラスのメソッドがバインドされたくないときにバインドされており、クラスを更新できないことです。これが起こらないようにルート要素クラスに付けることができる注釈があることを願っています。

例:

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

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

}

アノテーション@XmlElementが付けられたメソッドのみPersonがバインドおよびマーシャリングされると予想しますが、スーパークラスのメソッドもすべてバインドされます。結果として得られる XML には、情報が多すぎます。

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

4

6 に答える 6

6

この StackOverflow の投稿によると: スーパークラスを無視するにはどうすればよいですか?

JAX-B では、スーパークラスを変更せずにスーパークラスを無視することはできません。その投稿の関連部分を引用します。

Update2: java.net で同様の問題に関するスレッドを見つけました。そのスレッドは拡張要求をもたらし、別の問題の重複としてマークされ 、@XmlTransient アノテーションが付けられました。これらのバグ レポートに対するコメントから、現在の仕様ではこれは不可能であると私は確信しています。

于 2010-06-18T04:56:34.090 に答える
5

追加するだけ

@XmlAccessorType(XmlAccessType.NONE)

各スーパークラス宣言 (およびクラス自体) の前。

あなたの場合:

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

これは実際にはスーパークラスごとに行う必要があることに注意してください。巨大なクラスの依存関係ツリーを扱うときは、しばしば忘れられます。

もちろん、インターフェースには JAXB アノテーションは必要ありません。

于 2009-03-22T01:40:22.357 に答える
3

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

パッケージに を作成しpackage-info.javaて挿入する

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

明らかに、パッケージ内のすべてのクラスに XmlAccessType.NONE を設定します。私自身、ドメイン モデルのすべてのパッケージで使用しています。したがって、私はかなり安全です。ただし、クラスが「手の届かない」ものである場合は、JDK にあるため、[JAX-B] スーパークラスを無視するにはどうすればよいですか?で受け入れられている回答のソリューションを使用してください。.

私と同じようにこの質問に出くわした人の役に立てば幸いです。

于 2011-01-19T10:01:37.477 に答える
1

私はまったく同じ問題に直面しています。スーパークラスは JAXB アノテーションを処理しません (処理する必要はありません)。また、マーシャリング中にサブクラスにスーパークラス プロパティを含めないようにしたいと考えています。

スーパークラスを変更する方法がないため、スーパークラスに XmlAccesorType を追加しても解決できません。

他の解決策はありますか?

于 2009-04-02T16:50:31.420 に答える
0

JAX-B の実装をMOXyに置き換えると、やりたいことが何でもできます。通常の JAX-B を超える拡張機能が多数あり、そのうちの 1 つは、継承されたプロパティなどを無視できるようにします。また、JAX-B 注釈を XML マッピング ファイルに移動することもサポートしているため、複数のマッピング セットを保持できます。 .

于 2012-01-27T14:12:08.190 に答える