Castor: создание файлов сопоставления для классов с абстрактными атрибутами - PullRequest
1 голос
/ 03 марта 2010

У меня есть этот класс:

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 - это абстрактный класс.

Во время преобразования из XML в Java Object я буду знать, какую конкретную реализацию моего абстрактного класса использовать (через имя компонента).

Однако я не совсем уверен, как написать файл сопоставления, чтобы сказать кастору, как сделать перевод.

Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 06 марта 2010
<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>

Часть auto-naming = "diverveByClass" означает, что если мы отправим ее, она свяжет имя узла для элемента, встроенного в задержку, с эквивалентным классом, который, как он надеется, расширяет distributionSampler.

Таким образом, он с удовольствием обработает следующий xml:

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

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

Будет использовать файлы сопоставления для Deterministic и Erlang для сопоставления его с экземплярами класса, которые расширяют DistributionSampler.

...