【发布时间】:2017-09-07 22:03:23
【问题描述】:
我正在使用 BeanIO 来解析一个固定宽度的文本文件。例如,进入我的项目的文件看起来像以下固定宽度的文本:
CD DummyValue3
EF DummyValue4 DummyValue5 DummyValue6
AB DummyValue1 DummyValue2
...
在我的映射文件中,我为每个记录 ID(即 AB、CD、EF)声明了一个 record
<record name="dummyRecord" template="AB"
class="com.company.project.DummyRecordClass" minOccurs="0"
maxOccurs="1" />
然后每条记录都有一个template:
<template name="AB">
<field name="recordID" length="3" rid="true" literal="AB"
lenientPadding="true" minOccurs="0" />
<field name="value1" length="12" lenientPadding="true"
minOccurs="1" required="true"/>
<field name="value2" length="12" lenientPadding="true"
minOccurs="1" required="true"/>
</template>
因为value1 和value2 有一个minOccurs = 1 和一个required="true"(是的,我知道这是多余的,但它已经在代码中并且我们有数千个这样的字段)如果我有一个 AB 段。
如果我要将以下文件传递到我的程序中:
CD DummyValue3
EF DummyValue4 DummyValue5 DummyValue6
AB DummyValue1
我收到以下 InvalidRecordGroupException:
org.beanio.InvalidRecordGroupException: Invalid 'ediMessage' record group at line 1
但是,由于缺少的字段实际上位于第 3 行,当您有 500-600 行数据进入应用程序时,调试起来可能会非常痛苦。
有没有办法让 beanIO 输出正确的行号,或者在缺少必填字段时输出 template 和 field 值?
【问题讨论】: