XmlMapper解析XML报JsonParseException:意外字符\,求解决办法
使用Jackson XmlMapper解析XML的问题排查与解决
问题场景
尝试用Jackson的XmlMapper的readTree()方法解析字符串变量message中的XML文档,核心代码如下:
XmlMapper xmlMapper = new XmlMapper(); JsonNode node = null; try { node = xmlMapper.readTree(message.getBytes()); } catch (Exception e) { parseLogger.error("------+++++ parse(): - **EXCEPTION** - e=[" + e + "]"); }
错误排查过程
- 初始运行时无任何错误输出,推测问题出在XML开头的序言部分:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
- 自行添加代码转义序言中的双引号:
message = message.replace("\"", "\\\"");
(注:除XML序言外,消息中无其他双引号)
修改后的序言变为:
<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?>
- 修改后代码执行到
xmlMapper.readTree(message.getBytes())时报错:
JsonParseException: Unexpected character '\' (code 92); expected a quote character enclosing value for 'version' at [row,col,system-id]: [1,15,"N/A"]]
此时困惑于转义后的序言为何仍提示存在意外字符\,同时不理解错误信息中N/A的含义。
附XML消息示例
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <record> <rule> <customer>1234</customer> <schemaName>schema_name</schemaName> <schemaVersion>1.0</schemaVersion> </rule> <identifier> <XXX_USR_PN_IDXXX>12345</XXX_USR_PN_IDXXX> </identifier> <aRecord> <XXX_USR_PN_ID>12345</XXX_USR_PN_ID> <UserName> <ENTPR_USER_NM_TX>Epple.12345</ENTPR_USER_NM_TX> </UserName> <person> <ADM_ORG_CD>urn</ADM_ORG_CD> <XXX_ASSOC_CD>urn:V01</XXX_ASSOC_CD> <XXX_OCC_CD>123</XXX_OCC_CD> <JB_XXX_OCC_CD>456</JB_XXX_OCC_CD> <EMA>johna@mail.com</EMA> <ORG_CD>11</ORG_CD> <PERSONA_TYP_CD>JUNK122:GOOD321</PERSONA_TYP_CD> <PG_CD>07</PG_CD> <XYZEC_TYP_CD>12</XYZEC_TYP_CD> <XYZ_CAT_CD>G</XYZ_CAT_CD> </person> <location> <CTRY_CD>Yes</CTRY_CD> </location> </aRecord> </record>
最终解决方案
经同事排查,问题根源为OUD产品已依赖Jackson 2.9.9版本,项目需在pom.xml中显式声明该版本的Jackson依赖,同时调整Jenkins配置,重新构建项目后问题解决。
内容的提问来源于stack exchange,提问作者jstack100
相关产品推荐
相关产品推荐

