我已经看到了一些与此相关的讨论,但无法在下面的场景中应用此内容。我正试图unmarshall an xml using jaxb
。
下面是我所有类的层次结构。
@XmlRootElement(name="entry")
class Entry extedns Base{
@XmlElement
private String id;
@XmlElement
private String name;
@XmlElementRef
@XmlMixed
private Begin begin;
@XmlElementRef
@XmlMixed
private End end;
@XmlElementRef
private List<Link> links;
//Getter setters
}
@XmlRootElement(name="begin",namespace = "something")
public class Begin extends AnotherBase{
@XmlValue
private Float mFloat;
//Getter Setters
}
@XmlRootElement(name="end",namespace = "something")
public class End extends AnotherBase{
@XmlValue
private Float mFloat;
//Getter Setters
}
@XmlRootElement(name="link",namespace = "something")
public class Link extends Base{
private String attname;
private String attValue;
//Getter Setters
}
我想要一个如下所示的XML:
<entry>
<id>...</id>
<name>...</name>
<begin>1.23344</begin>
<end>5.0</end>
<link>
<link>......</link>
<link>......</link>
</link>
</entry>
尽你所能,
entry类既有2
@XmlElement
注释变量,也有2@XmlElementRef
注释变量(begin,end)。begin和end类都有注释变量。
开始类和结束类都派生自其他类
链接类可能具有属性和元素类型的变量。
我未能使用
@Xmlvalue
,如您所见,我将@XmlMixed
放在entry类中变量声明的顶部。这次编组的结果是
@XmlValue is not allowed on a class that derives another class.
this problem is related to the following location:
at private java.lang.Float Begin.mFloat
at Begin
at private Begin Entry.begin
If a class has @XmlElement property, it cannot have @XmlValue property.
this problem is related to the following location:
at private java.lang.Float Begin.mFloat
at Begin
最佳答案
您可以用AnotherBase
注释@XmlTransient
,将其作为映射的超级类移除。如果AnotherBase
上有任何未映射到@XmlAttribute
的get/set方法对,则需要用@XmlTransient
对它们进行注释。
您不需要@XmlMixed
和begin
属性上的end
注释。
我注意到您正在注释字段(实例变量)。执行此操作时,应在类@xmlaccessortype(xmlaccesstype.field)上指定以下内容`