我已将一个类注释为Panache实体。但是,我还包括了JAXB批注:
@Entity
@XmlRootElement(name = "Person")
@XmlAccessorType(XmlAccessType.NONE)
public class Person extends PanacheEntity {
@XmlAttribute(name = "Name")
public String name;
}
当我尝试从REST调用返回对象时,出现以下异常:
2019-12-08 08:30:01,917 ERROR [org.jbo.res.res.i18n] (vert.x-worker-thread-3) RESTEASY002005: Failed executing GET /person: org.jboss.resteasy.plugins.providers.jaxb.JAXBMarshalException: com.sun.xml.bind.v2.runtime.IllegalAnnotationsException: 1 counts of IllegalAnnotationExceptions
model.Person#name has mutually exclusive annotations @javax.xml.bind.annotation.XmlTransient and @javax.xml.bind.annotation.XmlAttribute
this problem is related to the following location:
at @javax.xml.bind.annotation.XmlTransient()
at model.Person
this problem is related to the following location:
at @javax.xml.bind.annotation.XmlAttribute(namespace="##default", name="Name", required=false)
at model.Person
at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.getMarshaller(AbstractJAXBProvider.java:187)
at org.jboss.resteasy.plugins.providers.jaxb.AbstractJAXBProvider.writeTo(AbstractJAXBProvider.java:149)
因此,似乎Quarkus Panache框架正在将@XmlTransient添加到我的公共属性中。
我可以通过将name属性的访问权限更改为private并包括getter / setter来解决此问题。但是,这种方法失去了Panache的优势之一,即您的代码更加紧凑和可读。
是否仍然要保留class属性的公共访问器,并且仍使其可与JAXB一起使用?
答案 0 :(得分:1)
有趣的用例。
我认为,在自动添加@XmlTransient
之前,我们需要检查属性是否没有任何冲突的JAXB注释。
我们做同样的事情,这可能也是JSON-B / Jackson的问题。
我看不到任何明显的解决方法:我们需要在Quarkus中对其进行修复。
您能用一个简单的复制器打开GitHub问题吗?谢谢!