Вопрос по xml, jaxb, java – Всегда ли JAXB игнорирует «лишние» элементы, не указанные в @ XmlType / propOrder?

16

Если у меня есть класс с пометкой

@XmlType(name = "someDTO", propOrder = { "firstField", "secondField", })

но XML (из ответа SOAP, скажем) выглядит так

<return><firstField>a</firstField><secondField>b</secondField><thirdField>c</thirdField></return>

Мой объект все равно будет заполнен firstField и secondField, а третийField будет игнорироваться.

Почему это? Это всегда будет так? Есть ли способ предотвратить создание объекта, если присутствуют дополнительные поля?

Ваш Ответ

1   ответ
18

JAXB (JSR-222) реализации будут жаловаться, если есть свойства, сопоставленные с элементами XML, которые не включены вpropOrder. propOder на@XmlType не используется для контроля, какие элементы включены / исключены.

Options for Excluding Properties

If you want to exclude less than half of the properties then I would suggest marking the ones you wish to exclude with @XmlTransient. If you wish to exclude more than half of the properties then I would suggest using @XmlAccessorType(XmlAccessType.NONE) and annotating the properties you wish to include.

For More Information

http://blog.bdoughan.com/2012/04/jaxb-and-unmapped-properties.html
Знаете ли вы, есть ли какие-либо реализации JAXB, которые будут жаловаться, если есть элементы XML, которые не сопоставлены с какими-либо свойствами? Derek
@Derek - Вы можете установитьValidationEventHandler наUnmarshaller, что следует сообщитьwarning когда не нанесенный на карту контент поражен.
Кроме того, аннотация XmlTransient должна быть добавлена в установщик поля так же, как аннотации XmlElement.
@BlaiseDoughan, а как насчет необходимости иметь более одного дела? например, один раз мне нужно определенное поле, а другой нет .. что я могу сделать для этого?

Похожие вопросы