BeanIO - как присвоить null пустому списку

Итак, я использую BeanIO, и мне нужно написать обработчик типов, который будет присваивать null списку, если общий список пуст. Например, я импортирую адреса из XML-файла.

При наличии полной информации об адресе xml выглядит так:

<Address>
<Street1>aaaaaa</Street1>
  <PostCode>00-000</PostCode>
  <City>bbbbb</City>
  <CountryCode>AA</CountryCode>
  <PhoneNo>+00 00 00000000</PhoneNo>
  <Email>[email protected]</Email>
</Address>

Если в xml-файле нет информации об адресе, это выглядит так:

<Address />

Отображение в классе java выглядит так — с аннотацией BeanIO @segment:

@Segment(xmlName = "Address", minOccurs = 0, maxOccurs = -1)
private List<Address> address;

По сути, тестовый класс ожидает, что если приведенный выше список пуст, обработчик типа должен присвоить ему значение null. Без какого-либо обработчика типов для списка назначаются пустые скобки:

address=[] 

И вот мой вопрос, кто-нибудь знает, как обработчик должен искать типы коллекций, в данном случае список? Ранее я написал несколько обработчиков для строк, целых чисел и т. д. — вещи с аннотацией @Field и все работает хорошо. Теперь я изо всех сил пытаюсь писать для вещей с аннотациями @Segment. Любые подсказки? От какого класса наследовать?


person Ensz    schedule 05.12.2017    source источник


Ответы (1)


Начиная с версии 2.1 вы можете использовать lazy="true" для коллекций. Из документации по переходу на 2.1

До версии 2.1 повторяющиеся сегменты, обозначенные как lazy="true", не сортировались как пустая коллекция. В дальнейшем коллекция больше не будет создаваться, если она обозначена как ленивая и все элементы имеют значение null или пустую строку.

Вместо того, чтобы пытаться написать TypeHandler, я бы сначала попробовал это:

@Segment(xmlName = "Address", minOccurs = 0, maxOccurs = -1, lazy="true")
private List<Address> address;

Я думаю, что «пустые скобки», как вы это назвали, - это просто способ, которым был реализован метод toString(), чтобы показать, что список пуст.

person nicoschl    schedule 05.12.2017
comment
Что ж, это оказалось проще, чем я думал. Бесконечно благодарен! - person Ensz; 05.12.2017