JAXB IllegalAnnotationsException错误:@XmlValue与XmlElement冲突求助
解决org.glassfish.jaxb.runtime.v2.runtime.IllegalAnnotationsException异常
问题原因
JAXB的规则明确:如果类中有字段被@XmlValue标注,那么这个类不能同时存在其他被映射为XML元素(@XmlElement)的属性。你的Objectif类因为配置了@XmlAccessorType(XmlAccessType.FIELD),所有字段默认都会被JAXB处理成XML元素,其中id和cv24字段就成了隐含的@XmlElement,和被@XmlValue标注的value字段冲突,触发了异常。
解决方案
把不需要映射到XML的字段(id和cv24)用@XmlTransient标注,让JAXB忽略它们,只保留value的@XmlValue和statut的@XmlAttribute配置,就能生成你期望的XML格式。
修改后的Objectif类代码:
import jakarta.xml.bind.annotation.*; import jakarta.persistence.*; @Entity @XmlAccessorType(XmlAccessType.FIELD) public class Objectif { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @XmlTransient // 让JAXB忽略该字段 private Long id; @Column(name = "value") @XmlValue private String value; @XmlAttribute(name = "statut", required = true) @Column(name = "statut") private String statut; @ManyToOne @JoinColumn(name = "cv24_id") @XmlTransient // 让JAXB忽略该字段 private CV24 cv24; public String getValue() { return value; } public void setValue(String value) { this.value = value; } public String getStatut() { return statut; } public void setStatut(String statut) { this.statut = statut; } }
效果验证
修改后,JAXB会生成你期望的XML格式:
<objectif statut="Stage">Dev</objectif>
内容的提问来源于stack exchange,提问作者user23352261
相关产品推荐
相关产品推荐

