【问题标题】:JAXB works with JPA, throw IllegalAnnotationsExceptionJAXB 与 JPA 一起使用,抛出 IllegalAnnotationsException
【发布时间】:2011-03-21 18:11:17
【问题描述】:

我已经在这个地方堆了几天了。任何帮助将不胜感激。

这是我的故事: 我有一个 JPA 实体类(ExtOffer),现在我用 JAXB 注释对其进行注释,以便通过 JAXB 进行编组/解组。我还创建了一个包装类(ExtOffers),它基本上是 ExtOffer 的集合。 当我调用 JAXBContext.newInstance(ExtOffers.class) 时,我得到一个 IllegalAnnotationsException:JAXB 注释被放置在一个不是 JAXB 属性的方法上。

我在谷歌上搜索,一些帖子说这是由于在错误的地方注释 @XmlElement。 但是我的类有@XmlAccessorType(XmlAccessType.NONE) 注释,只有getter 方法用@Xmlelement 注释。

下面是我的 ExtOffer 类和 ExtOffers 类:

//ExtOffer:

@Entity
@Table (name = "extoffer")
@XmlType(name = "ExtOfferType")
@XmlAccessorType(XmlAccessType.NONE)
public class ExtOffer {
    public ExtOffer() {
    }
        @Id
    @Column(name = "OfferID", nullable = false, unique = true, length = 32)
    protected String offerId;

    @Column(name = "HasMoreScreenShot", nullable = false, unique = false, length = 1)
    private String hasMoreScreenShot;

        public void setOfferId(String offerId) {
        this.offerId = offerId;
    }

    @XmlElement(name="OfferID", required = true)
    public String getOfferId() {
        return offerId;
    }

        public void setHasMoreScreenShot(String hasMoreScreenShot) {
        this.hasMoreScreenShot= hasMoreScreenShot;
    }

    @XmlElement(name = "HasMoreScreenShot")
    public String GetHasMoreScreenShot() {
        return hasMoreScreenShot;
    }
}

//ExtOffers 包装器

@XmlRootElement(name="extoffers")
@XmlAccessorType(XmlAccessType.NONE)
public class ExtOfferWrapper {


    private List<ExtOffer> extoffers;

    public ExtOfferWrapper() {

    }

    @XmlElement(name="extoffer")
    public List<ExtOffer> getExtoffers() {
        return extoffers;
    }

    public void setExtoffers(List<ExtOffer> extoffers) {
        this.extoffers = extoffers;
    }
}

JAXB annotation is placed on a method that is not a JAXB property
    this problem is related to the following location:
        at @javax.xml.bind.annotation.XmlElement(nillable=false, name=HasMoreScreenShot, required=false, defaultValue=, type=class javax.xml.bind.annotation.XmlElement$DEFAULT, namespace=##default)
        at com.symbio.fuhu.appstore.jpa.entity.ExtOffer
        at public java.util.List com.symbio.fuhu.appstore.jaxb.mapping.wrapper.ExtOfferWrapper.getExtoffers()
        at com.symbio.fuhu.appstore.jaxb.mapping.wrapper.ExtOfferWrapper

【问题讨论】:

    标签: jpa annotations jaxb


    【解决方案1】:

    你有一个大写的'G'

    @XmlElement(name = "HasMoreScreenShot")
    public String GetHasMoreScreenShot() {
        return hasMoreScreenShot;
    }
    

    【讨论】:

    • 天啊。感谢您的帮助,并对输入错误感到抱歉....\r\n 和 Blaise,我真的很喜欢您的 jaxb 博客。它对我有很大帮助。再次感谢
    • @yzandrew - 没问题,如果您想在我的博客上看到任何 JAXB 主题,请通过我的联系页面告诉我:bdoughan.blogspot.com/p/contact_01.html。此外,由于您是 Stack Overflow 的新手,因此惯例是将正确答案标记为“已接受”。这让其他用户知道您已经找到了您需要的答案。
    猜你喜欢
    • 2015-12-18
    • 2015-04-10
    • 2011-07-24
    • 2011-06-19
    • 2017-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多