我有一个现有的项目,我必须引入JAXB进行序列化。 我有一个Base类(GrandParent),其中所有必须序列化的类都被扩展。我希望在所有子类中都有一个元素,它将存储在marshal / unmarshal期间找到的任何未知的有效xml。这就是为什么我创建了一个新类(RandomBody),它将存储未知的xml并使其成为基类(GrandParent)的受保护成员变量,以便所有子类将按层次结构包含它。
到目前为止,没关系。当我在任何子类中包含任何@XmlValue
属性时,就会出现问题。作为If a class has @XmlElement property, it cannot have @XmlValue property.
我还需要在某些派生类中使用@XmlValue
。但是作为@XmlValue is not allowed on a class that derives another class.
,我创建了一些中间类并将它们标记为@XmlTransient
,然后将它们扩展到我的叶类。
请看下面的结构
public class GrandParent{
@XmlAnyElement
protected RandomBody randomXML;
.............
}
public class RandomBody{
private String anyUnknownText;
..............
}
@XmlTransient
public class Father extends GrandParent{
}
public class Boy extends Father{
@XmlValue
private String name;
//This has automatically included the ability to handle anyUnknownText from RandomBody
//And thus will marshal/Unmarshall any unknown node
}
public class Girl extends Father{
@XmlValue
private String name;
//This has automatically included the ability to handle anyUnknownText from RandomBody
//And thus will marshal/Unmarshall any unknown node
}
@XmlRootElement
public class Main{
@XmlElement
private Boy boy;
@XmlElement
private Girl girl;
@XmlElement
private String id;
}
所以,我的问题在这里很清楚。我在这段代码中有两个问题:
我无法在@XmlAnyElement
中使用GrandParent
,因为这会与我的Boy,Girl
发生冲突,导致@Xmlvalue
为If a class has @XmlElement property, it cannot have @XmlValue property.
我必须将GrandParent
声明为@XmlTransient
以避免与Boy,Girl
冲突@XmlValue is not allowed on a class that derives another class.
答案 0 :(得分:0)
我已通过将所有@XmlValue
替换为@XmlMixed
属性来解决我的问题。
我现在可以在@XmlAnyElement
RandomBody
中安全地定义GrandParent