Java 向JAXB生成的类添加行为

Java 向JAXB生成的类添加行为,java,jaxb,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> 我为这些

我必须在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进行解组的过程中(也就是说,每当对汽车、摩托车或卡车的setter进行envoke时,它还应该设置车辆类型,我不想将其作为属性添加到XML中)

或者在解组后(我可以通过任何方式知道子元素的QName)。 我已经尝试过了,但从未调用重写的setter。

您可以创建一个。但对我来说,这听起来像是一种开销——只要解组JAXB对象,就可以简单地调用初始值设定项。比如:

public class Initializer {
    public static void initialize(Vehicle vehicle) {
       vehicle.setType(..); // your logic here
    }
}
并调用
Initializer.initialize(unmarshalledObject)
JAXB有一个“后期构造”功能(请参阅)。只需在注释类中添加如下内容:

void afterUnmarshal(Unmarshaller, Object parent) {
    vehicle.setType(..); // your logic here    
}

要调用什么类型的初始值设定项,JAXB支持它吗?我是说,外部初始值设定项。你能提供一个示例代码吗,实际上我对这一切都不熟悉。提前感谢Bozho,我如何从unmarshalledObject中知道我在vehicle对象中拥有哪种车辆类型。事实上,问题可以表述为如何知道解组车辆对象中存在哪些子类型(汽车、卡车或摩托车)。现在,在解组XML后,我收到了一个车辆对象,在其中我有一辆汽车,摩托车或卡车类型的对象。如何知道其中有哪些?我也想到了,但没有添加,因为他说“JAXB生成的类”,所以我假设他的类是在每个构建上生成的。但它可能“生成一次”