更新Apache POI 4.0后 – 无法识别属性“http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit”

在将Apache POI从3.17更新到4.0.0后,我正在上线:

OPCPackage pck = OPCPackage.open(this.getTemplate());

例外:

 java.lang.IllegalArgumentException: Property 'http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit' is not recognized. at org.apache.xerces.jaxp.DocumentBuilderFactoryImpl.setAttribute(DocumentBuilderFactoryImpl.java:144) at __redirected.__DocumentBuilderFactory.setAttribute(__DocumentBuilderFactory.java:125) at org.apache.poi.ooxml.util.DocumentHelper.trySetXercesSecurityManager(DocumentHelper.java:143) at org.apache.poi.ooxml.util.DocumentHelper.(DocumentHelper.java:108) at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:392) at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.(ContentTypeManager.java:104) at org.apache.poi.openxml4j.opc.internal.ZipContentTypeManager.(ZipContentTypeManager.java:54) at org.apache.poi.openxml4j.opc.ZipPackage.getPartsImpl(ZipPackage.java:258) at org.apache.poi.openxml4j.opc.OPCPackage.getParts(OPCPackage.java:725) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:275) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:181) 

他们说在如何禁用accessExternalDTD和entityExpansionLimit警告与logback我应该排除xerces,但我已经有这个:

   org.apache.poi poi 4.0.0   org.apache.poi poi-ooxml 4.0.0   xml-apis xml-apis   xerces xercesImpl    

我的设置:

  • JDK 8
  • WildFly 14

回到3.17修复了这个问题。

POI 4.0.0代码使用xerces的最新版本 – 代码甚至没有尝试设置实体扩展限制,因为它将首先设置xerces安全管理器并停在那里 – 你能够尝试在最新版本的xerces上添加显式依赖项? https://mvnrepository.com/artifact/xerces/xercesImpl/2.12.0