如何使用BeanIO将一个记录中的字段复制到另一个记录

时间:2015-07-13 16:00:37

标签: java bean-io

我试图访问" accountNumber" record2中的字段作为"属性"。文件格式是平面文件(格式="固定长度")。请帮帮我。

<beanio xmlns="http://www.beanio.org/2012/03">
    <stream name="Definitions" format="fixedlength">
        <record name="header" order="1" minOccurs="1" maxOccurs="1" class="map">
            <field name="recordType"  literal="HD" position="0" length="2" rid="true"/>
        </record>
        <group name="Sample" order="2" minOccurs="0" maxOccurs="unbounded" class="map">
                <record name="record1" order="1" minOccurs="1" maxOccurs="1"  class="map">
                    <field name="type" rid="true" literal="PP" position="0" length="2"/>
                    <field name="accountNumber" position="2" length="30"/>
                </record>
                <record name="record2" order="2" minOccurs="0" maxOccurs="unbounded" class="map" collection="list" >
                    <field name="type" rid="true" literal="FF" position="0" length="2"/>
            < ******------ I want to access the "accountNumber" here ------****** />
                </record>
        </group>
        <record name="trailer" order="3" >
            <field name="recordType" rid="true" literal="TT" position="0" length="2"/>
        </record>  
    </stream>
</beanio>

示例数据:

HD                                 
PPXXXXXXXXXXXXXXXXXXXXXXXXXXX   
FF                                    
FF                                    
PPYYYYYYYYYYYYYYYYYYYYYYYYYYY                  
FF                                    
FF                                    
TT

1 个答案:

答案 0 :(得分:0)

我认为在阅读完所有记录后你必须自己做这个组合。这是可能的,因为来自record1的信息将存在于Sample组的地图中。您必须迭代每个record2并设置record1的信息。

我还没有完全实现这一点,但我很快就会,这是我使用spring-batch的策略:

  • 我不对我的记录进行分组。
  • 为两条记录创建不同的类。
  • 使用bean-io ItemReader设置批处理作业。
  • 使用ClassifierCompositeItemProcessor向作业添加SubclassClassifier
    • 类型映射将两个记录的类映射到特定的ItemProcessors
    • record1 ItemProcessor会将该记录中的信息添加到步骤ExecutionContext并返回 null ,以避免调用ItemWriter
  • 在作业中添加ItemWriter,其中会读取ExecutionContext并将record1record2的{​​{1}}组合在一起。

我希望这会有所帮助。