我有一个像下面的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;
}
}