我必须在我的jaxb生成的类中添加一些业务逻辑。例如,我有以下XML:
<vehicle>
<car id="20" make="ABC"/>
</vehicle>
<vehicle>
<motorcycle id="05" make="XYZ"/>
<vehicle>
<vehicle>
<truck id="34" make="UVW"/>
</vehicle>
我为这些生成了XSD。
现在我必须要解决的是在解开这些类型的任何XML时(也就是说,无论何时设置汽车,摩托车或卡车的设置者,它都应该设置我不想添加的车辆类型作为属性在XML中。
或解组后(我可以通过任何方式知道子元素的QName)。 我尝试了How can I extend Java code generated by JAXP-cxf or Hibernate tools?,但是从未调用过覆盖的setter。
答案 0 :(得分:1)
JAXB有一个“post construct”工具(见javadoc)。只需将这样的内容添加到带注释的类中:
void afterUnmarshal(Unmarshaller, Object parent) {
vehicle.setType(..); // your logic here
}
答案 1 :(得分:0)
您可以创建JAXB extension。但这听起来像是一个开销 - 你可以在解组JAXB对象时简单地调用初始化程序。类似的东西:
public class Initializer {
public static void initialize(Vehicle vehicle) {
vehicle.setType(..); // your logic here
}
}
并致电Initializer.initialize(unmarshalledObject)