我已经看到了一些与此相关的讨论,但无法在下面的场景中应用此内容。我正试图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对它们进行注释。
您不需要@XmlMixedbegin属性上的end注释。
我注意到您正在注释字段(实例变量)。执行此操作时,应在类@xmlaccessortype(xmlaccesstype.field)上指定以下内容`

10-04 12:01