解决JAXB注解 bug:Class has two properties of the same name


记录一个bug
Class has two properties of the same name "iflight"
    this problem is related to the following location:
        at public java.lang.String com.tg.dc.pojo.Lstdetail.getIflight()
        at com.tg.dc.pojo.Lstdetail
        at public java.util.List com.tg.dc.pojo.IBEPassengerStatResponseDetail.businessreportLstdetail
        at com.tg.dc.pojo.IBEPassengerStatResponseDetail
        at public com.tg.dc.pojo.IBEPassengerStatResponseDetail com.tg.dc.pojo.PerBasicMainObject.getIBEPassengerStatResponseDetail()
        at com.tg.dc.pojo.PerBasicMainObject
    this problem is related to the following location:
        at public java.lang.String com.tg.dc.pojo.Lstdetail.iflight
        at com.tg.dc.pojo.Lstdetail
        at public java.util.List com.tg.dc.pojo.IBEPassengerStatResponseDetail.businessreportLstdetail
        at com.tg.dc.pojo.IBEPassengerStatResponseDetail
        at public com.tg.dc.pojo.IBEPassengerStatResponseDetail com.tg.dc.pojo.PerBasicMainObject.getIBEPassengerStatResponseDetail()
        at com.tg.dc.pojo.PerBasicMainObject
        
代码如下:
@Setter
@Getter
@XmlRootElement(name = "DATA")
public class PerBasicMainObject implements Serializable{

    private IBEPassengerStatResponseDetail iBEPassengerStatResponseDetail;//
    private List<PerInvestmentFr> investmentfr;
    
    @XmlElementWrapper(name="RYPOSFR")
    @XmlElement(name="ITEM")
    public void setInvestmentfr(List<PerInvestmentFr> investmentfr) {
        this.investmentfr = investmentfr;
    }
}
iflight 是    IBEPassengerStatResponseDetail 类的 Lstdetail 类属性的属性,
IBEPassengerStatResponseDetail类中有的属性需要转为xml如:investmentfr,有的则不需要转,如:IBEPassengerStatResponseDetail;
网上查找了下,@XmlRootElement(name = "DATA")标注在PerBasicMainObject类上,类中的field都会变成了子Element,
默认情况下,如果类中不存在 @XmlAccessorType,并且没有任何超类是使用 @XmlAccessorType 注释的,则假定在类中使用以下默认注释:
@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER)
XmlAccessType可能值:
FIELD:    JAXB 绑定类中的每个非静态、非瞬态字段将会自动绑定到 XML,除非由 XmlTransient 注释。
NONE:     所有字段或属性都不能绑定到 XML,除非使用一些 JAXB 注释专门对它们进行注释。
PROPERTY: JAXB 绑定类中的每个获取方法/设置方法对将会自动绑定到 XML,除非由 XmlTransient 注释。
PUBLIC_MEMBER:每个公共获取方法/设置方法对和每个公共字段将会自动绑定到 XML,除非由 XmlTransient 注释。
所以最后在PerBasicMainObject类上标注@XmlAccessorType(XmlAccessType.NONE) 问题解决。

以下是关于JAXB注解的链接
http://blog.csdn.net/hongtaq/article/details/8212578
http://zhgw01.blog.163.com/blog/static/104148122010117112047695/


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM