BeanIO - Коллекция абстрактного класса или интерфейса реализации класса - PullRequest
0 голосов
/ 12 июля 2020

Возможно ли, используя аннотации BeanIO, определить поле как коллекцию абстрактного класса или коллекцию классов, реализующих интерфейс?

Я хочу следующее:

@Record(minOccurs = 1, maxOccurs = -1, collection = List.class)
List<SomeInterface> records;

Затем я добавляю в коллекцию список различных конкретных классов, которые содержат все аннотации для определения действительной записи.

Однако я просто получаю сообщение об ошибке:

Repeating segments without any child field component must have minOccurs=maxOccurs

... какой вид поражает цель.

Некоторые вещи, которые я пробовал:

  • Установка потока только на запись
  • Использование абстрактного класса вместо interface

EDIT: Это моя конфигурация:

  StreamFactory factory = StreamFactory.newInstance();
  StreamBuilder builder = new StreamBuilder("MyStreamName")
                .writeOnly()
                .format("delimited")
                .parser(new DelimitedParserBuilder(','))
                .addGroup(Parent.class);
  factory.define(builder);

... тогда как Parent.class содержит список записей;

Логически, должно быть что-то, связывающее SomeInterface с конкретными реализациями интерфейса, чтобы BeanIO мог понять, что делать, но я не могу понять, как установить это соединение.

1 Ответ

0 голосов
/ 15 июля 2020

У меня работает следующее:

import org.beanio.annotation.Record;

@Record(name = "parentRecord", maxOccurs = 1, minOccurs = 1, collection = List.class)
public class Parent {

  @Record(minOccurs = 1, collection = List.class, name = "recordList")
  private List<A> records;

  // getter + setter
}

Класс Parent теперь @Record, который требует изменения StreamBuilder на

final StreamFactory factory = StreamFactory.newInstance();
final StreamBuilder builder = new StreamBuilder("MyStreamName")
  .writeOnly()
  .format("delimited")
  .parser(new DelimitedParserBuilder(','))
  .addRecord(Parent.class);
factory.define(builder);

Это работает у меня без исключений

...