我正在使用 BeanIO 来解析一个固定宽度的文本文件。例如,进入我的项目的文件看起来像以下固定宽度的文本:
CD DummyValue3
EF DummyValue4 DummyValue5 DummyValue6
AB DummyValue1 DummyValue2
...
在我的映射文件中,我record
为每个 recordID 声明了一个(即 AB、CD、EF)
<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
andvalue2
有 aminOccurs = 1
和 a 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