XML 解析器检测到错误代码 302

问题描述 投票:0回答:4

我正在使用 XML-INTO 操作码来解析 Web 服务请求。我时不时地在日志中收到错误

(RNX0351 - "The XML parser detected error code 302").

302 的帮助是

302 The parser does not support the requested CCSID value or 
the first character of the XML document was not '<'

据我所知,第一个字符是“<" and the request is generated from a previous web service call so I would be very suprised if the CCSID has changed.

对于特定查询,该错误是可重复的,因此几乎可以肯定与数据相关,我只是不确定如何识别有问题的项目。

对于如何确定问题,或者更好的是,如何克服它有什么想法吗?

干杯

rpgle rpg
4个回答
2
投票

CCSID 是 AS400/iSeries/Power System 的属性,它适用于整个 IFS。
它就像文件内部内容的声明,或者换句话说,其内部编码“应该是”。

假设文件中的数据内容编码与文件一(信封)匹配,并且盒子使用此属性来显示和处理相应的字符。

听起来好像您在一种编码下收到数据,但 CCSID 文件不匹配。

尝试更改文件上的 CCSID(仅信封)。例如:37 (american)、500 (latin-1)、819 (utf-8)、850 (dos)、1252 (win) 并在之后显示文件。

您可以先在 QSH 或 QP2TERM 中使用 ls -Sla yourfile 检查,或 EDTF 也是如此。 CHGATTR 允许您更改 CCSID,以及 QSH 中的 setccsid(再次)。

这种方式帮助我找到了相关问题。请记住,虽然这四百个数据可能是可见的,但通过 Win 中的共享文件夹可能看不到它们。这意味着CCSID文件、内容编码不匹配。

希望有帮助。


1
投票

您好,我在使用 FTP 和 CCSID 819 (ISO 8859-1 ASCII) 上传到 AS400/iSeries/IBM i 的 XML 数据时看到了此错误,并且在文件的前几个位置有一些二进制垃圾。使用 FTP“quote type c 1208”将编码更改为 CCSID 1208(带有 IBM PUA 的 UTF-8),问题得到解决,XML-INTO 成功。

因此,关于使用 XML-INTO 时收到的 XML 解析器错误 302 的建议是查看文件(wrklnk ...),如果第一个字符不是“<" but instead some binary garbage then try CCSID 1208 for utf-8.

根据 IBM 文档,此答案中关于 819 是什么以及 ccsid 代表 utf-8 的陈述与之前的答案不一致,但是正确的: https://www-01.ibm.com/software/globalization/ccsid/ccsid819.html https://www-01.ibm.com/software/globalization/ccsid/ccsid1208.html


0
投票

我花了几个小时来解决这个问题,

对我来说,解决方案是在使用数据结构或变量存储 xml 时使用选项 ccsid=UCS2。

类似的东西:

XML-INTO 客户 %XML( xmlSource : 'ccsid=UCS2');

我的程序在 ccsid = 870 上运行,每次 xmlSource 字段上的 ccsid 转换都不起作用, 奇怪的是,当我使用 ccsid = 850 的文件时,一切正常

我提到这一点是因为这是您查看此问题时的第一页。
也许这对某人有帮助。


0
投票

我遇到了这个问题,但仅限于编译回 V7R2(从 V7R3 和 V7R4)。我尝试了 %xml(xmlSource:'ccsid=UCS2');,但这对于反向编译不起作用。 Barbara Morris 在 IBM RPG 论坛上为我解答。 %xml(%usc2(xmlSource):'选项=值') 芭芭拉·莫里斯的回答

© www.soinside.com 2019 - 2024. All rights reserved.