java - 使用 BeanIO 在单个文件中解析多个对象

标签 java apache-camel fileparsing bean-io

我在一个文件中有以下两种类型的记录,我可以使用 BeanIO 解析该文件以获取记录类型 1 或 2 中的任何一种,但我无法在单个解析器中同时执行这两种操作。我不知道如何在单个记录中使用我的两个映射。请给我指导。谢谢。

1   Length(20)    5       5        5      5      5
    Columns     S.No    Name    Street  City    Zip

2   Columns     S.No    Age Position        
    Length(20)    5      2   18 

映射.xml

<record name="employee" class="com.Employee" collection="list" minOccurs="1" maxOccurs="unbounded">
<field name="S.No" length="5" />
<field name="Name" length="5" />
<field name="Street" length="5" />
<field name="City" length="5" />
<field name="Zip" length="5" />
</record>

<record name="employee" class="com.Employee" collection="list" minOccurs="1" maxOccurs="unbounded">
<field name="S.No" length="5" />
<field name="Age" length="2" />
<field name="Position" length="12" />
</record>

更新1:我们可以使用S.No来区分记录 记录没有顺序,记录之间也没有依赖关系。

    001  Jose Str1 City 56005
    001  Hene Str1 City 66005
    005  20 General Manager  
    001  King Str1 City 76005
    005  20 General Manager  
    001  Leo  Str1 City 86005
    005  90 COO                
    005  70 Deputy Manager

最佳答案

您需要一个包含 Employee 记录列表的类

public class EmployeeGroup {

  private List<Employee> employees;
  // getter + setter
}

然后您需要在 mapping.xml 中定义一个 group 来读取所有 Employee 记录

<stream name="example" format="fixedlength">
  <group name="employeeGroup" class="com.EmployeeGroup">
    <record name="employees" class="com.Employee" minOccurs="1" maxOccurs="unbounded" collection="list">
      <field name="S.No" length="5" rid="true" literal="001"/>
      <field name="Name" length="5"/>
      <field name="Street" length="5"/>
      <field name="City" length="5"/>
      <field name="Zip" length="5"/>
    </record>
    <record name="employees" class="com.Employee" minOccurs="1" maxOccurs="unbounded" collection="list">
      <field name="S.No" length="5" rid="true" literal="005"/>
      <field name="Age" length="2"/>
      <field name="Position" length="12"/>
    </record>
  </group>
</stream>

记下 literal 属性的值以标识不同的记录。

关于java - 使用 BeanIO 在单个文件中解析多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48267155/

相关文章:

java - CDI 和 servlet 应用程序中的 BeansValidation

java - 使用 JDBC 在 Oracle 数据库上创建 Java

java - 保存或检索以前的 Camel 交换体

java - 如何找到路线的所有端点(Apache Camel,Java)

perl - 用于类似 Makefile 的续行的最干净的 Perl 解析器

c# - 解析和更改数字的脚本

java - 检查android包短信限制?

java - java中的monitor什么时候释放

java - Camel可以用Reactor代替吗,如果可以,那么如何正确完成呢?

C 中 strtok 后无法正确计算 CSV 中的元素