Smooks Library处理EDI消息报错:address_2设为可选仍提示N3段字段数不符
问题根因
- 段层级缺少
truncatable属性配置:Smooks EDI解析器的校验规则分为段层级和字段层级,你仅为address_2字段配置了非必填、可截断属性,没有给N3段本身开启可截断配置,此时解析器会强制校验段的字段总数必须和配置的字段数一致,哪怕后续字段标注为可选也会触发字段数不匹配报错。 - 配置未生效:如果之前加载过旧的映射配置,可能存在缓存未清理的情况,导致新修改的字段可选配置没有被解析器读取。
- 报文分隔符异常:如果N3段的字段分隔符存在转义、丢失的情况,也会导致解析器误判实际字段数量。
解决方案
- 调整N3段的配置,给段节点添加
truncatable="true"属性,修改后的配置如下:
<medi:segment segcode="N3" xmltag="address-information-stp" truncatable="true"> <medi:field xmltag="address_1" /> <medi:field xmltag="address_2" required="false" truncatable="true" /> </medi:segment>
该属性开启后,解析器允许段实际包含的字段数少于配置定义的字段总数,仅对存在的字段做格式校验,符合可选字段缺失的业务场景。
- 清理项目编译缓存、重启服务,确认最新的映射配置已经被正常加载。
- 校验第17个N3段的原始报文格式,确认字段分隔符、段终止符符合EDI规范,没有被转义或丢失。
内容的提问来源于stack exchange,提问作者Anand
相关产品推荐
相关产品推荐

