Написание плоского файла с использованием beanio (beanio.org). у Пойо есть родительский класс - PullRequest
0 голосов
/ 02 ноября 2018

Мне нужно отсортировать pojo разных типов данных, таких как учащимся, сотрудникам, пациентам по возрасту и сохранить их в массиве. Затем запишите его в плоский файл, используя beanio.

По json я отправляю запрос, который может иметь массив из студента, сотрудника и пациента. У меня есть 3 pojo на стороне java, например, студент, работник, пациент, для хранения данных из запроса json.

Я могу объединить и затем отсортировать весь массив объектов, таких как студент, работник, пациент, в единый массив класса, который является базовым классом студента, сотрудника, пациента, такого как человек. Человеческий класс, который я должен сделать, чтобы я мог отсортировать все 3 дочерних класса, используя Comparator, по возрасту свойства.

class SortbyAge implements Comparator<Human>
{ 
    // Used for sorting in ascending order of 
    // age
    public int compare(Human a, Human b) 
    { 
        return a.getAge() - b.getAge(); 
    } 
} 

Здесь все в порядке. Я могу сортировать данные в зависимости от возраста и сохранять их в массиве людей.

Проблема в том, что я записываю отсортированные данные в плоский файл, используя beanio.

** когда я записываю данные в плоский файл, я получаю исключение ниже исключения

org.beanio.BeanWriterException: сбой идентификации компонента: нет записи или сопоставления группы для класса компонента 'класс [Lcom.amex.ibm.model.Human;' в текущей позиции **

Я записал все 4 тега в XML-файл, как показано ниже.

<record name="student" class="com.amex.ibm.model.Student"  occurs="0+" maxLength="unbounded">
          <field name="name" length="3"/>
          <field name="age" length="8"/>      
          <field name="address" length="15"/>
</record>
<record name="employee" class="com.amex.ibm.model.Employee"  occurs="0+" maxLength="unbounded">
          <field name="name" length="3"/>
          <field name="age" length="8"/>
          <field name="address" length="15"/>
</record>
<record name="patient" class="com.amex.ibm.model.Patient"  occurs="0+" maxLength="unbounded">
          <field name="name" length="3"/>
          <field name="age" length="8"/>
          <field name="address" length="15"/>
</record>
<record name="human" class="com.amex.ibm.model.Human"  occurs="0+" maxLength="unbounded">
          <field name="age" length="3"/>
    </record>

Как определить отображение родительского класса в бине IO ??

1 Ответ

0 голосов
/ 04 ноября 2018

Проблема, с которой вы сталкиваетесь, заключается в том, что BeanIO не знает, как отобразить массив типа Human. Вам нужно передать каждый из отдельных объектов в BeanIO, чтобы записать его в ваш файл. Попробуйте это, перебирая массив и передавая каждый из объектов в BeanIO.

Изменение

b.write(listFinalArray);

до

for (int i = 0; i < listFinalArray.length; i++) {
  b.write(listFinalArray[i]);
}

или меньше, набрав:

for (final Human human : listFinalArray) {
  b.write(human);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...