使用OpenEHR ADLParser与AdlDeserializer解析ADMIN-ENTRY文件报错求助
解决ADL文件反序列化的两个解析器报错问题
我们来逐个分析你遇到的两个解析器错误,并给出针对性的修复方案:
一、se.acode.openehr.parser.ADLParser 解析错误处理
错误原因
这个ParseException提示在第109行112列遇到了<V_LOCAL_CODE> "at0108",但解析器预期的是},核心问题是ADL文件的语法结构不规范或版本不兼容:
- 该行附近的复杂对象(
C_COMPLEX_OBJECT)属性块可能未用}正确闭合; at0108这个本地代码的写法不符合该解析器要求的ADL版本规范;- 解析器与ADL文件的版本不匹配(比如该解析器仅支持ADL 1.4,但你的文件是ADL 2.0格式)。
修复步骤
- 定位检查语法结构:
打开ADL文件跳转到第109行附近,查看at0108所在的代码块,确认是否存在{未闭合、属性值格式错误的情况。 - 验证版本兼容性:
确认se.acode.openehr.parser.ADLParser所属库支持的ADL版本(该解析器多属于旧版OpenEHR Java库,通常仅支持ADL 1.4),若文件是更高版本,要么升级解析器,要么将ADL文件调整为兼容版本。 - 规范本地代码格式:
对照OpenEHR官方ADL规范,检查本地代码的写法(比如ADL 1.4中本地代码通常以[at0108]形式呈现,而非直接写字符串)。
二、org.openehr.adl.parser.AdlDeserializer 解析错误处理
错误原因
这个错误有两个明确的触发点:
- 开头的
''是UTF-8 BOM(字节顺序标记),很多解析器无法识别带BOM的UTF-8文件,会把BOM字符判定为无效输入; 335:0 mismatched input 'ontology' expecting <EOF>说明文件结尾存在多余内容,比如重复的ontology块、无效字符,破坏了ADL文件的标准结构(正常ADL文件中ontology块仅出现一次,且位于文件末尾前)。
修复步骤
- 移除UTF-8 BOM:
用支持编码设置的编辑器(如VS Code、Notepad++)打开ADL文件,将编码切换为UTF-8 无BOM后重新保存。VS Code可通过右下角编码选项切换,Notepad++在「编码」菜单中选择对应选项即可。 - 清理文件结尾无效内容:
跳转到第335行,检查该行及之后的内容,删除多余的ontology块或无关字符,确保文件结构符合ADL规范(标准结构:archetype定义 →ontology块 → 文件结束)。
额外建议
如果手动检查语法有困难,可以使用OpenEHR官方的Archetype Editor打开ADL文件,这个工具会提供可视化的语法错误提示,能更高效地定位和修复问题。
内容的提问来源于stack exchange,提问作者Flavio Barbosa
相关产品推荐
相关产品推荐

