使用beanio(beanio.org)编写平面文件。 pojo的有父母班

时间:2018-11-02 06:45:07

标签: bean-io

我需要使用年龄对学生,员工,患者等不同数据类型的pojo进行排序,并将其存储到数组中。然后使用beanio将其写入平面文件。

通过json,我正在发送可以包含学生,员工和患者数组的请求。我在java端有3个pojo,例如学生,员工,患者,可以存储来自json请求的数据。

我能够合并所有对象,例如学生,雇员,患者,然后将其分类为类的单个数组,该类是学生,雇员,患者(如人类)的基类。我必须进行人类班级学习,以便我可以按年龄区分使用Comparator的所有3个子班级。

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(); 
    } 
} 

到这里一切都很好。 我能够根据年龄对数据进行排序并将其存储到Human Array中。

问题是当我使用beanio将排序的数据写入平面文件时。

**当我将数据写入平面文件时,出现异常以下的异常

org.beanio.BeanWriterException:Bean识别失败:Bean类“ [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>

如何在bean IO中定义父类映射?

1 个答案:

答案 0 :(得分:0)

您看到的问题是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);
}