Отказ от ответственности: Класс 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 Persistance Services - 2.7.1.v20171221-bd47e8f): org.eclipse.persistence.exceptions.JAXBException
Описание исключения: свойство или идентификатор поля $ 1 в классе nu.westlin.kotlin.jaxb.Status необходимо включить в элемент propOrder аннотации XmlType.]
в 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)
at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
at 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 в id2, это сработает, и когда я упорядочиваю объект, я получаю ожидаемый XML.
Как заставить JAXB / Moxy игнорировать поля в моем объекте сравнения с тем же именем, что и в классе?
Я пробовал @XmlTransient, но это не помогло.