Apache Camel Flatpack文件解析与字段校验实现方案咨询
Flatpack字段校验实现方案
可以同时完成文件解析与你需要的各类校验,但无法仅通过修改XML映射配置实现,需要结合Flatpack的API做少量自定义逻辑扩展,具体说明如下:
原生XML配置的局限性
Flatpack官方提供的flatpack.dtd约束中,<COLUMN>标签仅支持配置解析所需的基础属性(如名称、长度、默认值、起止位置等),没有预留格式校验、范围校验、正则校验相关的配置项,因此无法只调整XML配置就满足你的校验需求。
具体实现步骤
你现有的定宽文件解析XML配置无需修改,直接在解析逻辑层增加自定义校验即可:
<!-- 现有可直接复用的XML映射配置 --> <?xml version='1.0'?> <!DOCTYPE PZMAP SYSTEM "flatpack.dtd" > <PZMAP> <RECORD id="header" startPosition="1" endPosition="2" indicator="HD"> <COLUMN name="RecordType" length="2" /> <COLUMN name="SubmitCode" length="2" /> <COLUMN name="RebateVRNumber" length="5" /> </RECORD> <RECORD id="util" startPosition="1" endPosition="2" indicator="UD"> <COLUMN name="RecordType" length="2" /> <COLUMN name="ItemCode" length="6" /> <COLUMN name="ItemName" length="70" /> <COLUMN name="TotalQuantity" length="5" /> <COLUMN name="OrderDate" length="8" /> <COLUMN name="DiscountPercentage" length="6" /> <COLUMN name="ContactNumber" length="12" /> </RECORD> <RECORD id="trailer" startPosition="1" endPosition="2" indicator="TR"> <COLUMN name="RecordType" length="2" /> <COLUMN name="SubmitCode" length="2" /> </RECORD> </PZMAP>
- 先用上述配置完成定宽文件的基础解析,解析后每条记录会被封装为
DataRow对象,可直接通过字段名提取对应的值。 - 编写自定义校验逻辑,覆盖你列出的4项校验规则:
- OrderDate校验:将提取的字符串值尝试用
yyyy-MM-dd格式的日期工具类解析,解析失败即为格式错误 - DiscountPercentage校验:先转
BigDecimal类型,先校验小数位是否为2位,再判断数值是否处于0~100的闭区间内 - ContactNumber校验:用正则表达式
^\\d{3}-\\d{3}-\\d{4}$做匹配,匹配失败即为格式错误 - TotalQuantity校验:尝试转为整数类型,或用正则
^\\d+$匹配,失败即为非纯数值类型
- 遍历解析后的记录时,每读取到
id=util的记录就调用上述校验逻辑,可收集所有校验错误后统一处理。
如果需要复用校验逻辑,也可以封装为Flatpack的RecordListener监听器,在recordProcessed回调方法中自动触发校验,无需在业务遍历代码中重复调用。
内容的提问来源于stack exchange,提问作者Data_Geek
相关产品推荐
相关产品推荐

