同一类中的 JPA 和 JAXB 注解会导致 com.sun.xml.bind.v2.runtime.IllegalAn



我有2个类:Person和PersonAdapter。人员是从 wsdl 生成的,无法更改。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Person")
public class Person {
    @XmlAttribute(name = "name")
    protected String name;
    // getters and setters
}

PersonAdapter 是 Person 的对象适配器,具有一些附加属性。此类的对象提供给我的服务的客户端。我将所有 JPA 和 JAXB 注释添加到 PersonAdapter 类中,因为我无法更改 Person 类。

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Person")
@Entity
@Table(name = "T_PERSON")
public class PersonAdapter {
    private final Person person;
    @XmlAttribute(name = "description")
    private String description;
    @XmlAttribute(name = "name", required = true)
    @Column(name = "C_NAME")
    public String getName() {
        return person.getName();
    }
    @Column(name = "C_DESCRIPTION")
    public String getDescription() {
        return description;
    }
    // getters, setters, contructors
}

我无法注释名称属性,因为它在 Person 类中,所以我使用 JAXB 和 JPA 注释注释 getName 方法。但是,在同一方法/属性上使用这些注释会导致非法注释异常:

由以下原因引起:com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 14 个非法注释异常

有可能解决这个问题吗?

解决了!这个问题在 JPA 和 JAXB 注释之间并不冲突。问题出在 JAXB 上下文冲突中:@XmlAccessorType(XmlAccessType.FIELD) on PersonAdapterPerson 的公共获取者一起提供从其他上下文访问我的服务的 JAXB 上下文到 Person 对象的访问。对于我的上下文,人员类是未知的。我解决了这个问题,用XmlAccessType.NONE替换XmlAccessType.FIELD.也可以用 @XmlTransient .

最新更新