You need to enable JavaScript to run this app. Apache Camel Flatpack文件解析与字段校验实现方案咨询
优惠活动
大模型
产品
解决方案
定价
更多

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> 
  1. 先用上述配置完成定宽文件的基础解析,解析后每条记录会被封装为DataRow对象,可直接通过字段名提取对应的值。
  2. 编写自定义校验逻辑,覆盖你列出的4项校验规则:
  • OrderDate校验:将提取的字符串值尝试用yyyy-MM-dd格式的日期工具类解析,解析失败即为格式错误
  • DiscountPercentage校验:先转BigDecimal类型,先校验小数位是否为2位,再判断数值是否处于0~100的闭区间内
  • ContactNumber校验:用正则表达式^\\d{3}-\\d{3}-\\d{4}$做匹配,匹配失败即为格式错误
  • TotalQuantity校验:尝试转为整数类型,或用正则^\\d+$匹配,失败即为非纯数值类型
  1. 遍历解析后的记录时,每读取到id=util的记录就调用上述校验逻辑,可收集所有校验错误后统一处理。

如果需要复用校验逻辑,也可以封装为Flatpack的RecordListener监听器,在recordProcessed回调方法中自动触发校验,无需在业务遍历代码中重复调用。

内容的提问来源于stack exchange,提问作者Data_Geek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 19:06:07