JAXB が Java クラスの生成時に @XmlRootElement アノテーションを省略するのはなぜですか?

Linda Hamilton
リリース: 2024-11-01 19:42:29
オリジナル
586 人が閲覧しました

Why Does JAXB Omit the @XmlRootElement Annotation When Generating Java Classes?

JAXB で @XmlRootElement アノテーションが省略される

問題

XML スキーマから Java クラスを生成する場合JAXB (Java Architecture for XML Binding) を使用すると、@XmlRootElement アノテーションを持つクラスがないというエラーが発生する場合があります。これにより、シリアル化中に例外が発生します。

解決策

JAXB アノテーション ルールを理解する

JAXB XJC は特定のルールを使用して決定します@XmlRootElement アノテーションを含めるタイミング。 [この記事](記事へのリンク) で説明されているように、これらのルールは複雑です。

@XmlRootElement の代替

@XmlRootElement は利便性を提供しますが、必須ではありません。代わりに [JAXBElement ラッパー オブジェクト](ドキュメントへのリンク) を使用できます。ただし、XML 要素名と名前空間の知識が必要なため、構築はあまり便利ではありません。

ObjectFactory を使用する

XJC は、生成されたクラス モデルと一緒に ObjectFactory クラスを生成します。このクラスには、オブジェクトの周囲に JAXBElement ラッパーを作成し、XML 名と名前空間を処理するファクトリ メソッドが含まれています。 ObjectFactory メソッドを調べて、ターゲット オブジェクトの JAXBElement を作成するメソッドを見つけます。

<code class="java">import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.Marshaller;

import org.fpml._2008.fpml_4_5.ObjectFactory;
import org.fpml._2008.fpml_4_5.PositionReport;

// ...

// Create the JAXB context
JAXBContext context = JAXBContext.newInstance(PositionReport.class);

// Create the ObjectFactory
ObjectFactory factory = new ObjectFactory();

// Create a PositionReport instance
PositionReport positionReport = factory.createPositionReport();

// Create the JAXBElement wrapper
JAXBElement<PositionReport> element = factory.createPositionReport(positionReport);

// Create the Marshaller
Marshaller marshaller = context.createMarshaller();

// Marshal the JAXBElement
marshaller.marshal(element, System.out);</code>
ログイン後にコピー

以上がJAXB が Java クラスの生成時に @XmlRootElement アノテーションを省略するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート