2011-10-18 19 views
4

私はいくつかの複雑なJavaコードを維持しています。Castor(v1.2)の非整列化は、かなりの数の "欠落した" Javaオブジェクトのために非常に遅いです。 XMLには必要以上のフィールドが含まれていますが、CastorはJavaオブジェクトをインスタンス化してClassNotFoundエラーを引き起こします。Castorに特定のXMLフィールドを無視させるにはどうすればよいですか?

キャスターのマッピングファイル:

<mapping> 
    <class name="com.example.imaging.product.Product"> 
    <map-to xml="product"/> 
    <field name="productId" type="long"> 
     <bind-xml name="id" node="attribute"/> 
    </field> 
    </class> 

    <class name="com.example.imaging.product.RegionConfiguration"> 
    <map-to xml="mediaConfiguration"/> 
    <field name="name" type="string"> 
     <bind-xml name="name" node="attribute"/> 
    </field> 
    <field name="design" type="int"> 
     <bind-xml name="designId" node="attribute"/> 
    </field> 
    </class> 
</mapping> 

XMLソース:

<?xml version="1.0"?> 
<product id="1234"> 
    <productImage colorId="1"/> 
    <mediaConfiguration name="Front" designId="98765" /> 
    <color id="1" name="Red" default="true"/> 
</product> 

私の問題はcolorフィールドが同じJavaを持っていないと私はそれが非整列化したくないということです。私はcastor.propertiesファイルにorg.exolab.castor.xml.strictelements=falseを設定しようとしましたが、それはクラスロードパスを歩いてClassNotFoundエラーを投げ捨てることはありません。

キャスターが不要なXML要素をスキップする方法を教えてください。

+0

あなたはタスクを実行するために春を使用していますか? –

答えて

0

各要素を非整列化する動作をオーバーライドできないようですが、the Castor referenceを参照してください。実際のパフォーマンスへの影響を測定しましたか? Castorがより優れたオーバーライド動作を開発するまでは、これを無視するのが最もよいかもしれません。

クラスがマッピングファイルに記述されていない場合、ヒマシフォームgetXxxYyy()/ setXxxYyy(X)のいずれかの機能があるかどうかを決定するためにJavaリフレクションAPIを使用してクラスをinstrospectう。このアクセサは、XML要素/属性 'xxx-yyy'に関連付けられます。将来、このデフォルト動作を無効にする方法を提供します。

+0

回避策として、単純なクラスをインスタンス化するように、Colorクラスを作成する方が早いかもしれません。ここでも、Castorが改善されるまで、デフォルトの動作のパフォーマンスペナルティを生かすことは理にかなっています。 –

関連する問題