[解決済み】JAXBで@XmlRootElementが生成されない
質問
FpML(Finanial Products Markup Language)バージョン4.5からJavaクラスを生成しようとしています。大量のコードが生成されますが、それを使うことができません。簡単な文書をシリアライズしようとすると、このようになります。
javax.xml.bind.MarshalException
- with linked exception: [com.sun.istack.SAXException2: unable
to marshal type
"org.fpml._2008.fpml_4_5.PositionReport"
as an element because it is missing an
@XmlRootElement annotation]
実際に いいえ クラスは @XmlRootElement アノテーションを持っています。xjc (JAXB 2.1) に fpml-main-4-5.xsd を指定していますが、これにはすべての型が含まれています。
解決方法は?
他の人がすでに述べた、あるいは示唆したことをまとめると、JAXB XJC が
@XmlRootElement
アノテーションを生成されたクラスに付けることは、些細なことではありません (
この記事を見る
).
@XmlRootElement
が存在するのは、JAXBランタイムが与えられたオブジェクトをマーシャル/アンマーシャルするために特定の情報、特にXML要素名と名前空間を必要とするからです。マーシャラーにどんな古いオブジェクトでも渡すことはできません。
@XmlRootElement
はこの情報を提供する。
しかし、このアノテーションは単なる便宜的なもので、JAXBはこれを必要としません。代替案としては
JAXBElement
と同じ情報を提供するラッパーオブジェクトです。
@XmlRootElement
しかし、アノテーションではなく、オブジェクトの形をしています。
しかし
JAXBElement
なぜなら、XML要素名と名前空間を知る必要があり、ビジネスロジックは通常これを知らないからです。
ありがたいことに、XJCがクラスモデルを生成するとき、そのクラスには
ObjectFactory
. これはJAXB v1との後方互換性のためでもありますが、XJCが生成したファクトリーメソッドを置くための場所でもあります。
JAXBElement
ラッパーを作成します。XMLの名前と名前空間を処理するので、それについて心配する必要はありません。あなたはただ
ObjectFactory
メソッド(大規模なスキーマでは数百のメソッドがあります)を使って、必要なメソッドを探します。
関連
-
[解決済み] maven. -source 1.5ではラムダ式がサポートされていません。
-
[解決済み] XX:MaxDirectMemorySizeの既定値
-
[解決済み] double 型を Int 型に変換、切り捨て
-
[解決済み] javac ソースファイルが見つかりません
-
[解決済み] 親から継承したメソッドの可視性を下げることができない [重複]。
-
[解決済み] ファイルを作成せずに、ファイルが存在するかどうかをチェックする
-
[解決済み] HTTP ステータス 500 - サーブレットクラス pkg.coreServlet のインスタンス化に失敗しました。
-
[解決済み] Mavenです。JARは空になります - 含有するためにマークされたコンテンツがありません
-
[解決済み] init-paramとcontext-param
-
[解決済み] Javaでdoubleをfloatに変換する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] パラメータ[変数]の不正な修飾子;finalのみが許可される[closed]。
-
[解決済み] コレクションへの共有参照が見つかりました org.hibernate.HibernateException
-
[解決済み] Oracle DB : java.sql.SQLException: 閉じた接続
-
[解決済み] javac ソースファイルが見つかりません
-
[解決済み] java.lang.ClassNotFoundException: クラス com.ibm.db2.jcc.DB2Driver が Worklight プラットフォームまたはプロジェクトに見つかりませんでした。
-
[解決済み] JavaにおけるMouseListenerとMouseAdapterの違いについて
-
[解決済み] JDBC タイプの方言マッピングがありません。1111
-
[解決済み] javaでメソッドを呼び出すプログラムのエラー修正
-
[解決済み] java.io.IOException。DER長の短い読み取り
-
[解決済み] x--やx++はここで何をするのですか?