Котлин, сопутствующий объект и JAXB - PullRequest
0 голосов
/ 13 ноября 2018

Отказ от ответственности: Класс 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, но это не помогло.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...