我有一个xsd架构,我不允许更改。它生成生成的java类。
假设类看起来如下:
class Data {
protected List<Value> value;
...
}
class Value {
...
}
现在我需要将自己的MyValue理想地从Value扩展。
class MyValue extends Value {
Integer myOwnField1;
Long anotherProperty;
}
并且能够说unmarshaller在分析xml文件时使用MyValue而不是Value。
稍后我可以使用MyValue可以包含一些有用的新字段,对它们进行操作,更改它们等等这一事实。所以我想扩展我在架构中的功能而不改变它。
以某种方式可以通过MyValue替换Unmarshaller的值吗?
除了创建Map的明显方法之外,我可以使用我自己的字段和属性在MyValue中映射由unmarshaller生成的对象。我想避免这种方式。
答案 0 :(得分:0)
您可以使用bean属性加载列表吗?
public void setValue(List<Value> value) {
this.value = ...convert to List<MyValue>...
}
答案 1 :(得分:0)
您可能对unmarshalling by declared type感兴趣:实际上,如果您将XSD从根元素覆盖到您需要覆盖的每个子元素,您可以使用unmarshal
方法中的第二个参数来指定您的自定义映射。
<T> JAXBElement<T> unmarshal(Source source,
Class<T> declaredType)
throws JAXBException
[...] declaredType - 适当的JAXB映射类来保存 source的xml根元素
(有关详细信息,请参阅Unmarshaller javadoc)