当前位置: 首页 > 知识库问答 >
问题:

同一个类中的JPA和JAXB注释会导致com.sun.xml.bind.v2.runtime.IllegalAnnotationsException

诸葛彦
2023-03-14

我有两个类:Person和PersonAdapter。Person是从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
}
Caused by: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 14 counts of IllegalAnnotationExceptions

有没有可能解决这个问题?

共有1个答案

臧俊杰
2023-03-14

解决了!问题不在于JPA和JAXB注释之间的冲突。问题在于JAXB上下文冲突:PersonAdapter上的@XMLAccessorType(XmlAccessStype.field)Person的公共getter提供了从其他上下文对Person对象的我的服务的JAXB上下文的访问。而Person类对于我的上下文来说是未知的。我将XMLAccessType.Field替换为XMLAccessType.None解决了此问题。也可以使用@xmltransient来完成。

 类似资料:
  • 考虑到JAXB注释的对象,是否有办法确定类/字段/方法在封送过程中是否会导致xsi: type? 是XmlElement注释, 我唯一需要担心的情况? 我正在编写一个Lua解组器,在这里我们删除了很多常见的xml类型信息,我正在尝试找出如何将传入的Lua与JAXB匹配。 谢谢 --更新-- 下面是一个简单的示例,说明了问题: 当我收到一个动物对象时,我可以查询动物的注释来检测它应该是狗或猫而不是动

  • 是否可以声明性地在类的字段上指定验证约束,以便其中一些约束只适用于某些层(或者被某些层忽略)? 其中是JSR 303 anotation REST API层 此处不存在 null

  • 我正在尝试使用spring Boot运行一个web应用程序。 将密码映射为硬编码值。 我的问题是:当应用程序运行并且在主类上使用注释时,只要它命中URL就会发生以下异常: javax.servlet.ServletException:在org.springframework.web.servlet.dispatcherservlet.render(dispatcherservlet.java:13

  • 我有一个跨国类,我想让它启用web服务: 我试过: 但是我努力工作,我也尝试过: 当我运行它时,我得到: 线程“main”组织中出现异常。springframework。豆。工厂BeanCreationException:创建在类路径资源[remote application.xml]中定义了名为“cre remoting”的bean时出错:调用init方法失败;嵌套的例外是java。lang.I

  • 问题内容: 我必须设计一个数据模型(在Java EE 6应用程序中),该数据模型将通过JPA持久化,并且还需要通过JAXB进行序列化。上一次,我有一组带有JAXB批注的实体类,另一组带有JPA批注的实体类。这意味着我必须有很多样板代码才能在两者之间进行翻译。我正在考虑将它们组合在一起,以便每个类都具有两种类型的注释。我知道 可以 做到,但是我的问题是, 应该 吗?会引起什么问题吗? 问题答案: 这