2009-11-30 16 views
5

JAXBコンパイラによって生成された.javaファイルの属性の順序を制御したいと思います。JAXBコンパイラと属性の順序

XMLの検証では、属性の順序は重要ではないことがわかりました。回帰テスト環境で整列されたxmlのテキストによる比較には、この順序が重要です。ファイル内の属性の順序は、マーシャリングされたxmlタグの属性の順序に直接影響します。

JAXBコンパイラが実行されるたびに、属性グループはスキーマを変更しなくても異なる順序で表示されます。この動作を防止するために、コンパイラで使用できる明白なオプションはありません。

生成された.javaファイルの属性をアルファベット順に並べ替えるために、コンパイル後のスクリプトを実行しないようにしたいのですが、これは属性グループを分割するためです。

ご意見をいただければ幸いです。

おかげで、 デイブ

答えて

0

このスレッドは、私の問題に大きな解決策を提供します。回答の

Using XSL to sort attributes

一つのxslだけの属性を並べ替えること変換が含まれています。ちょっと遅くても完璧に動作します。

1

は私ではなく、テキストの比較を行うための出力を検証するためにXMLパーサーを使用してお勧めします。とにかくそれを並べ替えるためにxmlを解析するつもりならば、XMLツールを使って比較するだけでもいいかもしれません。

編集: Javaソースコードの順序を操作して生成されたXMLを制御しようとすると、やり方が壊れやすいようです。確かに、これはテストのためのものなので、何かが壊れても、コードは正しく動作するかもしれません。人々はソースコードの順序を常に偶然に変更します。特定の順序に頼らざるを得なければ、厄介な問題や微妙な問題の原因になります。

XMLツールを使用してXMLデータを比較する方法については、個人的にこれを大規模に行ったことはありませんが、this link mentions a few free toolsです。私の場合、XML関連のアサーションを提供するJUnitの拡張が、私の既存のテストとうまく統合できるようになりました。さもなければ、あなたは主に正確な等価性を探しているので、2つのXMLファイルを解析して、 'expected'ファイルのノードを繰り返し処理し、それらのノードが 'actual'ファイルに存在するかどうかを確認します。次に、あなたが見たくない他のノードがないかどうかを確認してください。

+0

を使用することができます比較は、大きなbashスクリプトドリブン回帰テストの一部であり、我々は現在、XML応答のいずれかを解析されていません。私はXML差分ツールを使用することができましたが、私はそれらの経験がありません。私はSolaris環境で作業しています。この目的のためにコマンドラインから呼び出せるxml diffツールを提案できますか? また、特定の既知の違いが定数値で置き換えられているため、比較対象のファイルがスキーマに対して検証されないことがあります。 – daveg

+0

さらに、xmlレスポンスではなく、.javaファイルの属性の並べ替えを検討していました。 .javaファイルの順序が整列されたレスポンスの属性の順序を直接制御するように見えるので、マーシャルがリフレクションを使用すると思います。 – daveg

+0

私はあなたの2つのポイントに対処するために私の答えを編集しました。 –

1

XML文書のテキスト比較を実行する必要がある場合は、属性の順序付けを区別しないXMLフレームワークの出力を制御するよりも、より良い方法があります。

たとえば、XMLUnitがあります。これは特にXMLアサーション用のjunit拡張であり、空白と順序を非常にうまく処理します。

もっと一般的な解決策は、属性の順序付けと空白が予測可能なようにXML DOMを出力するです。とても便利な。

JAXB(または何でも)がXMLを適切に生成するようにしてから、XMLUnitまたはXOMで出力を実行して比較します。これには、JAXBに依存しないという利点があります。生成されたXMLで動作します。

4

はどうやら、JAXB 2.0で使用すると、注釈@XmlAccessorOrderまたは@XmlType(propOrder =)

関連する問題