0

2 つの異なる XML スキーマを受け取る従来の Web サービス プロジェクトがありますが、属性名は同じです (ルート要素を含む)。マーシャリング/アンマーシャリングにSpring、OXM、およびJAXB2を使用しています。

別の質問で以前の問題を解決したので、SAXパーサーを使用して、使用するアンマーシャラーを決定します。XML が解析されるとき、値をチェックしてから、アンマーシャラーまたは他のアンマーシャラーを使用できます。

私の問題は、Spring OXM でマーシャラー/アンマーシャラーを定義しようとしたときに発生します。2 つのパッケージでクラスパスを設定すると、アンマーシャラーが同じ XMLRootElement を持つ 2 つのクラスを検出するため失敗します。バインドするクラスのリストを設定すると、アンマーシャラーが常にクラス リストの最後の項目にアンマーシャリングするため、失敗します (同じ XMLRootElement、アンマーシャラーはアンマーシャリングするクラスを認識していません)。

しかし、JaxbContext を使用すると正しく動作します。

JAXBContext jc = JAXBContext.newInstance(MyClass1.class);
myClass1Object = (MyClass1) jc.createUnmarshaller().unmarshal(new StreamSource(new StringReader(xml)));

JAXBContext jc = JAXBContext.newInstance(MyClass2.class);
myClass2Object = (MyClass2) jc.createUnmarshaller().unmarshal(new StreamSource(new StringReader(xml)));

これをよりSpring(OXM)のアプローチに変換するにはどうすればよいですか?

4

1 に答える 1

0

最初は、アプリケーション コンテキスト ファイルで JAXBContext インスタンスを宣言しようとしましたが、最終的に 1 つの XML スキーマの名前空間を変更することになりました。現在、Spring OXM を使用して、2 つの XML スキーマを問題なくマーシャリング/アンマーシャリングしています。

于 2013-01-08T11:02:09.360 に答える