2010-03-03 12 views
1
Résumé

J'ai cette classe:Castor: Création de fichiers de mappage pour les classes qui ont des attributs

public class Source extends Node { 
    protected DistributionSampler delay ; 
    protected DistributionSampler batchsize ; 


/** 
* @param name The name of the source node 
* @param d The {@link DistributionSampler} used to generate the 
*   inter-arrival times 
*/ 
    public Source(String name, DistributionSampler d) { 
    super(name) ; 
    delay = d ; 
    batchsize = new Deterministic(1) ; 
    Sim.schedule(new Arrival(Sim.now() + delay.next())) ; 
    } 

/** 
* @param name The name of the source node 
* @param d The {@link DistributionSampler} used to generate the 
*   inter-arrival times 
* @param b The {@link DistributionSampler} used to generate the 
      batch sizes 
*/ 
    public Source(String name, DistributionSampler d, DistributionSampler b) { 
    super(name) ; 
    delay = d ; 
    batchsize = b ; 
    Sim.schedule(new Arrival(Sim.now() + delay.next())) ; 
    } 

    .... 
} 

DistributionSampler est un AbstractClass.

Au moment de la conversion de XML en objet Java, je saurai quelle implémentation concrète de ma classe abstraite utiliser (via le nom du bean).

Cependant, je ne suis pas entièrement sûr de savoir comment écrire le fichier de mapping pour dire à castor comment faire la traduction.

Toute aide serait grandement appréciée.

Répondre

1
<class name="network.Source"> 
     <description xmlns=""> 
      Default mapping for class network.Source 
     </description> 

     <map-to xml="Source"/> 

     <field name="name" type="java.lang.String" required="true"> 
      <bind-xml node="element" /> 
     </field> 

     <field name="delay" type="tools.DistributionSampler" required="true" set-method="initialiseDelay" get-method="getDelay"> 
      <bind-xml auto-naming="deriveByClass" node="element" location="delay"/> 
     </field> 

     <field name="batchSize" type="tools.DistributionSampler"> 
      <bind-xml auto-naming="deriveByClass" node="element" location="batchSize"/> 
     </field> 
    </class> 

L'auto-désignation = partie « deriveByClass » signifie que si nous l'envoyons se lier nom de noeud pour l'élément incorporé à l'intérieur de retard à une classe équivalente qu'elle espère étend distributionSampler.

donc passer son plaisir de traiter le code XML suivant:

<Source name="asd"> 
    <delay> 
     <Deterministic time="234" /> 
    </delay> 

    <batchSize> 
     <Erlang K="234" Theta="234" /> 
    </batchSize> 
</Source> 

utilisera les fichiers de mappage pour déterministes et Erlang pour mapper les instances de classe whihc se prolongent DistributionSampler.