当前位置: 首页 > 面试题库 >

更新后的Apache POI4.0-无法识别属性'http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit'

步骏
2023-03-14
问题内容

将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.<clinit>(DocumentHelper.java:108)
     at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.parseContentTypesFile(ContentTypeManager.java:392)
     at org.apache.poi.openxml4j.opc.internal.ContentTypeManager.<init>(ContentTypeManager.java:104)
     at org.apache.poi.openxml4j.opc.internal.ZipContentTypeManager.<init>(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)

他们在如何通过logback禁用accessExternalDTD和entityExpansionLimit警告中说,我应该排除xerces,但是我已经这样做了:

  <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi</artifactId>
     <version>4.0.0</version>
  </dependency>
  <dependency>
     <groupId>org.apache.poi</groupId>
     <artifactId>poi-ooxml</artifactId>
     <version>4.0.0</version>
     <exclusions>
        <exclusion>
           <groupId>xml-apis</groupId>
           <artifactId>xml-apis</artifactId>
        </exclusion>
        <exclusion>
           <groupId>xerces</groupId>
           <artifactId>xercesImpl</artifactId>
        </exclusion>
     </exclusions>
  </dependency>

我的设置:

  • JDK 8
  • WildFly 14

回到3.17可解决此问题。


问题答案:

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



 类似资料:
  • 我正在尝试使用Jackson将一些JSON转换为包含一些简单字符串和另一个类的类的实例,我正在使用@JsonCreator。似乎Jackson无法创建其他类的实例。 问题是,当我作为测试的一部分运行此代码时: 我得到以下例外: 我试图在简单测试中解析的JSON如下所示: 我有一个看起来有点像这样的类“播放器” 另一个类“字符”看起来像这样 对于像这样的小数据集,会有更好的方法来构建整个事情,但我认

  • 我有一个带有javamail的spring启动应用程序,我配置了spring。属性,但似乎不需要属性来发送电子邮件。 下面是发送电子邮件的java代码 pom.xml 这里我们看到了这个错误 组织。springframework。邮政MailSendException:邮件服务器连接失败;嵌套的异常是com。太阳邮政util。MailConnectException:无法连接到主机,端口:loca

  • 问题内容: 在数据加载中,似乎某些XML属性映射不正确,我现在正尝试纠正此问题,但在MySQL对XML列的处理方面遇到了麻烦。 我想为带有子字段(属性为’code =“ 3”’)的字段(属性为’tag =“ 520”’)的所有出现的字段纠正XML属性(非值)。下面的查询返回受影响的0行,找到1行。关于如何实现这一目标的任何线索。 为了清晰起见,包含了XML片段: 原始片段 结果是我想要的: 无法解

  • 我有一个类似的枚举: json文件本身有private字段,所以我需要private(它是java键盘)来进行序列化和映射,但是如果我使用private和所有小写,这将是一个运行时错误。我使用了上面代码中的@JSONProperty,但仍然不起作用。 进程已完成,退出代码为0

  • 问题内容: 在属性方面,我是一个新手,我读到XML是存储这些属性的首选方法。但是我注意到,以 也可以。这意味着更少的打字(也许更容易阅读,也更有效)。那么使用XML文件有什么好处? 问题答案: 在XML中,您可以存储比属性文件中更复杂的数据(例如,层次结构)。因此,这取决于您的用例。如果您只想存储少量直接属性,则更容易处理属性文件(尽管Java属性类也可以读取基于XML的属性)。 无论如何,保持配

  • 在 PHP 中,类的成员变量也被称为属性。它们是类定义的一部分, 用来表现一个实例的状态(也就是区分类的不同实例)。 在具体实践中,常常会想用一个稍微特殊些的方法实现属性的读写。 例如,如果有需求每次都要对 label 属性执行 trim 操作, 就可以用以下代码实现: $object->label = trim($label); 上述代码的缺点是只要修改 label 属性就必须再次调用 tri