我有一个像下面的XML。

<price>
  <priceCalculator ie="carID" renderer = "com.a.carCalculator">
      <argument name="param1" value="paramValue"/>
      .....
  </priceCalculator>
  <priceCalculator id="TVS" renderer = "com.a.TwoWheelerCalculator">
     <argument name="param1" value="paramValue"/>
     .....
  </priceCalculator>
</price>


解析JAXB时,我希望将要创建的渲染器类对象与priceCalculator对象一起附加。例如,priceCalculator.getRenderrer()应基于属性值返回CarCalculator或TwoWheelerCalculator对象。我们可以假设计算器类具有默认构造函数。

我该如何实现?请帮忙。

最佳答案

诸如此类的棘手问题,我将使用Java-to-XML schema mapping mode,而JAXB类将只是“真实”类的构建器。然后,您可以精确控制如何将其解组:

class PriceCalculator {
    Calculator renderer;

    PriceCalculator(Builder builder) {
        Class<?> calculatorClass = Class.forName(builder.renderer);
        renderer = (Calculator)calculatorClass.newInstance();
    }

    @XmlType(name="PriceCalculator")
    static class Builder {
        @XmlAttribute
        String renderer;
    }
}

07-24 09:28