复杂Bean IO记录,多段(0-n次)管道分隔



我有一个将用户信息映射到对象映射(map或List)的场景。

我说用户信息如下CommonHeader(CX)块后面跟0个或多个ID块后面跟着0个或更多地址块

以下是用户记录的有效格式

CX|19981222|19981222|ID|DriversLicence|111111111|ID|Passport|ABC12345|AD|123 Main Street|Atlanta|GA|30316|AD|100 PeachTree RD|Atlanta|Ga|3007|
CX|19981222|19981222|ID|DriversLicence|111111111|ID|Passport|ABC12345|
CX|19981222|19981222|AD|123 Main Street|Atlanta|GA|30316|AD|100 PeachTree RD|Atlanta|Ga|3007|

是否可以使用beanio映射此类场景

处理这些案件的最佳解决方案是什么

我正在使用Beanio-2.1

我的beanio映射文件如下

<stream name="userrRecord" format="delimited">
        <parser>
            <property name="delimiter" value="|"/>
        </parser>
        <record name="urecord" class="map" minOccurs="0" maxOccurs="unbounded" >
            <segment name="CX" class="map">
                <field name="CX"/>
                <field name="DateFirstReported" type="date" format="yyyyMMdd"/>
                <field name="DateLastReported" type="date" format="yyyyMMdd"/>
           </segment>     
            <segment name="ID" class="map"  minOccurs="0" maxOccurs="unbounded" collection="list">
                <field name="ID"/>
                <field name="IDType"/>
                <field name="DocumentID"/>
            </segment>
            < segment name="AD" class="map" minOccurs="0" maxOccurs="unbounded" collection="list">
                <field name="AD"/>
                <field name="Street"/>
                <field name="City"/>
                <field name="State"/>
                <field name="Zipcode"/>                
            </segment>
        </record>
    </stream>

当我尝试对一个有2个ID segmenst和0个AD段的记录进行解组时,会出现InvalidRecord异常。

非常感谢您的帮助。

我认为这是不可能的,正如BeanIO参考指南:中所述

Flat file formats (CSV, delimited and fixed length) may only contain one
field or segment of indeterminate length (i.e. where maxOccurs is greater
than minOccurs). The position of components that follow are assumed to be
relative to the end of the record.

您应该将每个分段更改为一个单独的记录,并将其包装在一个组中。然后您的样本输入将如下所示:

CX|19981222|19981222|
ID|DriversLicence|111111111|
ID|Passport|ABC12345|
AD|123 Main Street|Atlanta|GA|30316|
AD|100 PeachTree RD|Atlanta|Ga|3007|
CX|19981222|19981222|
ID|DriversLicence|111111111|
ID|Passport|ABC12345|
CX|19981222|19981222|
AD|123 Main Street|Atlanta|GA|30316|
AD|100 PeachTree RD|Atlanta|Ga|3007|

你的地图是这样的:

<stream name="userrRecord" format="delimited">
    <parser>
        <property name="delimiter" value="|"/>
    </parser>
    <group name="urecord" class="map" minOccurs="0" maxOccurs="unbounded">
        <record name="CX" class="map">
            <field name="CX"/>
            <field name="DateFirstReported" type="date" format="yyyyMMdd"/>
            <field name="DateLastReported" type="date" format="yyyyMMdd"/>
        </record>
        <record name="ID" class="map" minOccurs="0" maxOccurs="unbounded" collection="list">
            <field name="ID"/>
            <field name="IDType"/>
            <field name="DocumentID"/>
        </record>
        <record name="AD" class="map" minOccurs="0" maxOccurs="unbounded" collection="list">
            <field name="AD"/>
            <field name="Street"/>
            <field name="City"/>
            <field name="State"/>
            <field name="Zipcode"/>
        </record>
    </group>
</stream>

相关内容

  • 没有找到相关文章

最新更新