4

我有一个不允许更改的 xsd 架构。它产生生成的java类。

假设类如下所示:

       class Data {
          protected List<Value> value;
          ... 
       }
       class Value {
           ...
        }

现在我需要拥有自己的 MyValue 以从 Value 扩展。

class MyValue extends Value {

     Integer myOwnField1;
     Long anotherProperty;

}

并且能够在解析 xml 文件时说 unmarshaller 使用 MyValue 而不是 Value。

稍后我将能够使用 MyValue 可以在其中包含一些有用的新字段的事实,对它们进行操作,更改它们等。所以我想扩展我在模式中拥有的功能而不更改它。

对于解组器,是否有可能用 MyValue 替换 Value ?

除了创建 Map 的明显方法外,我可以在其中映射由 unmarshaller 生成的对象,以及 MyValue 中我自己的字段和属性。我想避免这种方式。

4

2 回答 2

0

您可以使用 bean 属性加载列表吗?

public void setValue(List<Value> value) {
    this.value = ...convert to List<MyValue>...
}
于 2013-04-02T09:26:55.983 回答
0

您可能对按声明的类型进行解组感兴趣:实际上,如果您将 XSD 从根元素覆盖到需要覆盖的每个子元素,则可以在unmarshal方法中使用第二个参数来指定自定义映射。

<T> JAXBElement<T> unmarshal(Source source,
                             Class<T> declaredType)
                         throws JAXBException

[...] declaredType - 适当的 JAXB 映射类来保存源的 xml 根元素

(有关更多详细信息,请参阅Unmarshaller javadoc )

于 2013-04-02T12:24:06.903 回答