向JAXB生成的类添加行为

时间:2011-02-12 06:44:33

标签: java jaxb

我必须在我的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。

2 个答案:

答案 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)