问题记录:
使用SAP系统标准类/UI2/CL_JSON将JSON数据转为ABAP数据时,发生STRING_OFFSET_TOO_LARGE异常;
问题原因:
通过ST22查看异常明细,调试后与阅读源码后发现,发现是/UI2/CL_JSON存在bug,解析特殊数据时错误地处理了字符串,使用了超出字符串长度的偏移量。系统试图访问长度1024的字符串变量json,使用的offset为1024,导致访问偏移量为1025,触发STRING_OFFSET_TOO_LARGE异常。
解决方案:
在自开发时,可以通过Try Catch捕获异常CX_SY_RANGE_OUT_OF_BOUNDS避免程序直接Dump,再处理异常数据。
本文异常是SAP标准类/UI2/CL_JSON导致,通过查询Github的SAP项目——abap-to-json,在文档history.md中查看项目更新历史记录,可以发现SAP在后续更新中修复了该问题。根据系统版本选择最新的SNOTE实施。
作为参考,SAP_BASIS 753可更新至PL16版本,对应NOTE为3038042。注意该NOTE实施为增量更新,需要同时下载并实施历史版本NOTE。