【发布时间】:2020-09-09 03:15:14
【问题描述】:
我正在反序列化一个大型 XML 文件(不是我的),它包含定义为的自定义实体:
<!ENTITY math "mathematics">
和这样使用的元素:
<field>&math;</field>
当我尝试反序列化时:
XmlMapper xmlMapper = new XmlMapper();
ClassLoader classloader = Thread.currentThread().getContextClassLoader();
return xmlMapper.readValue(classloader.getResourceAsStream("file.xml"), MyClass.class);
我收到此错误: com.fasterxml.jackson.databind.JsonMappingException:未声明的通用实体“数学”
我认为这可能是防止 Xml 外部实体注入的安全措施。
- 有没有办法将这些自定义实体标记为有效?比如为他们创建一个 Enum 之类的?
- 如果没有,是否有一个标志可以将它们解析为字符串?
更新: 我基本上可以通过对文本文件进行查找替换来解决这个问题。这是一个非常丑陋的解决方案,如果有人有更好的主意,我会全力以赴。 :)
【问题讨论】: