免责声明:下面的类Status仅用于显示我在其他地方遇到的“真实”问题。 :)
假设我有以下Kotlin课:
@XmlRootElement(name = "Status")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = ["id", "status"])
class Status(val id: Int, val status: String) {
private constructor() : this(id = -1, status = "")
companion object {
private var id: Int? = null
}
}
如果我尝试通过实例化JAXB
JAXBContext.newInstance(Status::class.java)
我收到以下异常:
[Exception [EclipseLink-50013](Eclipse Persistence Services-2.7.1.v20171221-bd47e8f):org.eclipse.persistence.exceptions.JAXBException 异常描述:必需将类nu.westlin.kotlin.jaxb.Status上的属性或字段id $ 1包含在XmlType批注的propOrder元素中。 在org.eclipse.persistence.jaxb.JAXBContext $ TypeMappingInfoInput.createContextState(JAXBContext.java:1161) 在org.eclipse.persistence.jaxb.JAXBContext。(JAXBContext.java:196) 在org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:165) 在org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:152) 在org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:112) 在org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(JAXBContextFactory.java:102) 在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处 在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在java.lang.reflect.Method.invoke(Method.java:498) 在javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:247) 在javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:234) 在javax.xml.bind.ContextFinder.find(ContextFinder.java:441) 在javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:641) 在javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:584)
我使用org.eclipse.persistence:org.eclipse.persistence.moxy:2.7.1。
如果我将compainon对象中的字段id重命名为id2,则它可以工作,并且当我编组一个对象时,我会得到预期的XML。
如何让JAXB / Moxy忽略同对象中同名对象的字段?
我尝试了@XmlTransient,但没有成功。