2013-03-21 116 views
4

我有一个xsd模式,我不允许更改它。它产生生成的Java类。在不更改模式的情况下更改班级

假设类如下所示:

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

现在我需要有自己的理想myvalue的从价值进行扩展。

class MyValue extends Value { 

    Integer myOwnField1; 
    Long anotherProperty; 

} 

而且可以说解组使用myvalue的,而不是价值,当它解析XML文件。

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

是否有可能取代价值由MyValue unmarshaller?

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

回答

0

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

public void setValue(List<Value> value) { 
    this.value = ...convert to List<MyValue>... 
} 
+0

'产生Data'类来自XSD。她的观点是使用这个班的孩子而不修改它。 – blint 2013-04-02 09:37:16

0

您可能会感兴趣的unmarshalling by declared type:的确,如果你覆盖从根元素,你需要重写所有的子元素的XSD,您可以使用第二个参数中unmarshal方法sepecify您的自定义映射。

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

[...]的declaredType - 适当JAXB映射类保持 源的XML根元素

(参见Unmarshaller javadoc更详细的信息)

相关问题