目录

JAXB报错:有两个名为XX的属性,类的两个属性具有相同名称XX

报错

如上图

自行测试

使用lombok注解测试Xml和实体类互相转化得出结论

./1.jpg

./2.jpg

知识储备

Spring 注解加载的流程 注解管理器APT

JAXB源码

原因分析

JavaBean 属性名称与字段名称之间的名称冲突。Jaxb框架将getter或setter在java容器中注册为同名对象,导致同时使用getter和setter时出现冲突

解决

如果不使用Get和Set

  • 选择性创建一个即可,注解加到属性上或者Get和Set上都可以

若必须同时存在Get和Set

  • 需要使用@XmlTransient禁止绑定或者使用
  • 或者是设置对应类 @XmlAccessorType(XmlAccessType.FIELD)
  • (特殊注意)在解析XML时,可以将注解加到Get和Set上,不能加到属性上,构造XML时不行

TODO从源码角度解决

思路

自定义Getter或者Setter注解(在生成的get或set代码中加上注解)

找到Jaxb框架中绑定部分或者使用绑定创建get或set注入的位置

找到Jaxb框架中设置绑定默认属性的位置

动态代理

知识

lombok源码讲解

注解处理器