Ebean增强功能正在搞乱JAXB序列化

时间:2015-10-16 13:42:15

标签: java jaxb playframework-2.0 ebean

在我们的Play应用程序中,我们使用Ebean ORM。我们有用于从Play Model类继承的模型类。从Play 2.4开始,我们的模型类必须继承自Avaje Ebean Model类。这些模型类得到了增强,即我们的模型类中注入了几种方法。由于此更改,我们收到JAXB错误消息,例如:

Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
com.avaje.ebean.bean.PersistenceContext is an interface, and JAXB can't handle interfaces.
    this problem is related to the following location:
        at com.avaje.ebean.bean.PersistenceContext
        at public com.avaje.ebean.bean.PersistenceContext com.avaje.ebean.bean.EntityBeanIntercept.getPersistenceContext()
        at com.avaje.ebean.bean.EntityBeanIntercept
        at protected com.avaje.ebean.bean.EntityBeanIntercept models.Phase._ebean_intercept
        at models.Phase

我尝试通过将其添加到Phase模型类来解决此问题:

@XmlTransient
public EntityBeanIntercept _ebean_intercept() {
    throw new NotImplementedException();
};

不幸的是,这个技巧不起作用并导致错误消息"在类文件模型/阶段"中重复方法名称和签名。有没有另一种方法告诉JAXB忽略这个类的增强成员?

1 个答案:

答案 0 :(得分:0)

虽然这篇文章How do I prevent JAXB from binding superclass methods of the @XmlRootElement when marshalling?上接受的答案是说这是不可能的,但在某些情况下还有第二个答案提供了解决方法。

我猜这个新的超类并不和你的模特课住在同一个包中,所以你可能会失败: - (