2011-10-18 2 views
4

Je maintiens un code Java complexe et le démoulage de Castor (v1.2) est très lent à cause de quelques objets Java "manquants". Vous voyez, le XML contient plus de champs que ce dont j'ai besoin, mais Castor essaie à plusieurs reprises d'instancier les objets Java, ce qui provoque de nombreuses erreurs ClassNotFound.Comment obtenir que Castor ignore certains champs XML?

Castor Mapping fichier:

<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 Source:

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

Mon problème est que le champ ne color pas d'équivalent Java et je ne veux pas démarshalées. J'ai essayé de définir org.exolab.castor.xml.strictelements=false dans le fichier castor.properties mais cela ne l'empêche pas de parcourir le chemin de classe et de lancer des erreurs ClassNotFound.

Comment faire en sorte que Castor ignore les éléments XML inutiles?

+0

utilisez-vous le ressort pour faire le travail? –

Répondre

0

Il semble que vous ne pouvez pas remplacer le comportement consistant à essayer de masquer chaque élément, voir the Castor reference. Avez-vous mesuré quel est l'impact réel sur les performances? Il vaudrait peut-être mieux ignorer cela jusqu'à ce que Castor développe un meilleur comportement prioritaire.

Si la classe n'est pas décrite dans le fichier de mappage, Castor s'instrospect la classe en utilisant l'API Java de réflexion pour déterminer s'il y a une fonction de la forme getXxxYyy()/setXxxYyy (x). Cet accesseur sera associé à l'élément/attribut XML nommé 'xxx-yyy'. À l'avenir, nous fournirons un moyen de contourner ce comportement par défaut.

+0

Pour contourner le problème, il peut être plus rapide de créer une classe Color (peut-être sans aucune propriété) afin d'instancier une classe simple. Encore une fois, il est probablement logique de vivre avec la pénalité de performance du comportement par défaut jusqu'à ce que Castor s'améliore. –