1

シナリオ:

与えられた2つのスキーマのいずれかに準拠していると想定されるxmlファイルを選択するようにユーザーに求めるコードをリファクタリングしようとしています。現在、コードはを使用してマーシャリングを解除しようとしていSchema A Unmarshallerます。それが失敗した場合は、を使用してマーシャリングを解除しようとしていSchema B Unmarshallerます。両方が失敗した場合、ユーザーに適切なメッセージを表示してファイルを拒否します。

問題:

Exceptionここで、プログラムフローはによってスローされることに依存しunmarshal()ます。

質問:

ファイルの解析を試みる方法を知る方法はありますunmarshallerか?それで、すぐに正しいアンマーシャラーを探しますか?さらに、これは、どちらのスキーマにも準拠していない、無関係なXMLファイルをすべて拒否するのにも役立ちます。

4

2 に答える 2

1

おそらく、SAXパーサーの使用を検討し、1つのハンドラーで2つの構造を手動で処理する必要があります。もう1つの可能性は、2つのオプションを許可する新しいスキーマを作成することです。

スキーマを完全に制御できる場合は、2番目のオプションを検討します。応答スキーマが単純であるか、同様の構造を共有している場合は、SAXの使用を検討します。

于 2011-04-14T05:31:38.803 に答える
1

いくつかの異なるオプションがあります。

オプション#1-複数のドメインモデルでJAXBContextを作成する

2つのスキーマのモデルに互換性がある場合(完全に独立しているか、同じ方法で注釈が付けられたタイプを共有している場合)、スキーマごとに1つではなく、すべてのドメインオブジェクトにJAXBContextを作成します。

オプション#2-StAX入力

異なるXMLスキーマを持つことは、異なるルート要素を持つことを意味する場合、ルート要素を調べて使用するマーシャラーを選択するStAXXMLStreamReaderを作成します。次に、そのXMLStreamReaderをアンマーシャリングします。

オプション#3-最初にXMLドキュメントを検証する

javax.xml.validation APIを使用して、最初にドキュメントを検証してから、結果に基づいてアンマーシャラーを選択できます。

于 2011-04-14T09:39:18.280 に答える