eec icon indicating copy to clipboard operation
eec copied to clipboard

可否考虑兼容旧版的dom4j?

Open chenwei0930 opened this issue 7 months ago • 6 comments

目前开发的系统里,内置了旧版的dom4j,猜测是1.X版本的。运行时报错:

报错:java: The method createDefault() is undefined for the type org.dom4j.io.SAXReader

老版本的dom4j没有这个方法,可以替代为new SAXReader(); 我在本地修改源码后测试,除了以上构造方法修改外,需要修改:

org/ttzero/excel/reader/XMLDrawings.java:220、 org/ttzero/excel/reader/XMLDrawings.java:296

    for (Object obj : root.elements()) {
        Element e = (Element) obj;

简单测试目前ecc对dom4j的依赖不深,兼容性较好。是否可以考虑修改代码,兼容早期版本的dom4j?

chenwei0930 avatar Jul 29 '25 13:07 chenwei0930

贴一下你正在使用的pom或者gradle配置

wangguanquan avatar Jul 29 '25 13:07 wangguanquan

低版本的dom4j有XXXE漏洞,能够在服务器远程执行命令,高版本createDefault添加了以下三个feature,线上服务的话最好还是使用高版本dom4j

reader.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false);
reader.setFeature("http://xml.org/sax/features/external-general-entities", false);
reader.setFeature("http://xml.org/sax/features/external-parameter-entities", false);

wangguanquan avatar Jul 29 '25 13:07 wangguanquan

是一个内网使用的老美的商业系统里,官方提供的jar包里包含了dom4j的class,不是使用maven、gradle构建的。不知道是哪个版本的。 老的确实有缺陷,但是商业系统也没办法。新系统都是用的新版的。但是希望在团队内部都使用同样的工具,所以希望您这边能考虑兼容一下。

chenwei0930 avatar Aug 01 '25 03:08 chenwei0930

可以考虑,但也需要有一个适配的基准版本,太古老的版本确实没有办法支持,你这边可以先在本地做一下适配,除了上面提到的两点兼容性外是否还有其它兼容点

wangguanquan avatar Aug 01 '25 05:08 wangguanquan

拉取 fix#448 分支本地打包来测试一下是否做好兼容,这个分支兼容dom4j 1.6.x 及以上的版本

wangguanquan avatar Aug 30 '25 09:08 wangguanquan

v0.5.25已兼容dom4j 1.6.x

wangguanquan avatar Sep 25 '25 01:09 wangguanquan