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)のアプローチに変換するにはどうすればよいですか?