在不更改架构的情况下更改类

时间:2013-03-21 18:16:11

标签: java xsd jaxb unmarshalling

我有一个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生成的对象。我想避免这种方式。

2 个答案:

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