私はXMLメッセージを受け取ったアプリケーションを持っており、それを解析して処理を行います。これをアプリケーションで使用するには、XML文字列を受け取った後、JAXB marshallerをjava POJOにマーシャリングし、処理はここから処理を引き継ぎます。 これは、私がXMLの1つのバージョンを持っている時までうまく動作します。Java:複数のバージョンのXMLスキーマを扱う
問題 ただし、同じXSDの複数のバージョンがある場合に問題が発生します。私のアプリケーションは両方のバージョンのメッセージに対処しなければなりません。私のアプリケーションのクライアントは、古いバージョンのXMLを送信するか、最新のバージョンのXMLを送信することがあります。
JAXBの場合、JAX XJCツールを使用してXSDをJava pojosに変換する必要があります。問題は、以前のバージョンと同じクラス名を持つXSDの最新バージョンを変換するときに発生します。クラスは異なります。これは、バージョンごとに異なるジャーにXJC出力を置いても問題を引き起こします。
期待ソリューション バージョンの変化は、6ヶ月毎に発生することが予想されると私は古いバージョンを伴って含むまた、新しいバージョンのXMLSを読み、私のシステムができるようにする必要があります。 JAXBやその他のフレームワークを使用して、このXML処理をJAVAで管理する方法を知りたいです。
私はSAXパーサーを使用しますか?私はそれがJAXBに比べて効率的ではないことを読んだ。そして、ここ数日間SAXパーサを使って作業をした結果、各要素を探し出して値を取得し、それを私たちのJava構造に組み込むことでエラーが発生する可能性があることがわかりました。 JAXBと比較して
* 質問
は、JAXBのような類似したいずれかの簡単な解決策はありますか?私は良い解決策のように満足していないこれで一時的な解決策を、使用している
*
一時的な解決策が使用されます。私がやったことは、XJCツールを使って各XSDバージョンごとに別々の瓶を作りました。そして、各容器に異なるパッケージを作りました。バージョン1.2の 1のPOJOは、バージョン2.0のベースパッケージcom.cgs.v_12 2のPOJOとジャーにあるiは両方達人として加えたベースパッケージcom.cgs.v_20
と異なるジャーています私のシステムに依存して、異なるバージョンを処理するためにそれらを使用します。
入力xmlのバージョンをどのように知っていますか?バージョンを取得するためにファイルを解析する必要がありますか、または2つの異なるチャネルから受信した入力ファイルですか? – Mahesh
任意のバージョン形式のxmlを(例えばxsltなどで)変更しない内部形式に変換して、この内部形式で処理することができます。 –