gpt4 book ai didi

java - OpenSAML XML 解析器配置的随机错误

转载 作者:行者123 更新时间:2023-11-28 22:19:15 31 4
gpt4 key购买 nike

我在 Tomcat 8 中运行一个使用 OpenSAML 的网络应用程序。我已经在 Tomcat 中认可了 Xerces,我检查了认可的目录路径是否设置正确,看起来一切正常:

[ajp-apr-8009-exec-22] DEBUG org.opensaml.xml.Configuration - 使用 JAXP 解析器 org.apache.xerces.jaxp.DocumentBuilderFactoryImpl 的 VM

我收到几个工作正常的请求,一切看起来都很好,我可以毫无错误地运行那部分代码,然后突然之间,我开始收到此错误:

OpenSAML 需要一个支持 JAXP 1.3 和 DOM3 的 xml 解析器。JVM 当前配置为使用已知的 Sun XML 解析器有问题,不能与 OpenSAML 一起使用。请认可功能JAXP 库,例如 Xerces 和 Xalan。有关如何背书的说明一个新的解析器见 http://java.sun.com/j2se/1.5.0/docs/guide/standards/index.html

    at org.opensaml.xml.Configuration.validateNonSunJAXP(Configuration.java:278)
at org.opensaml.xml.parse.BasicParserPool.<init>(BasicParserPool.java:126)

一旦我开始收到错误,我每次都会收到错误,但我无法隔离触发问题所需的条件。 (编辑:看起来这可能在某种程度上与 docx4j 的使用有关,错误在使用 docx4j 生成文件作为 word 文档的请求之后开始。由于 docx4j 非常依赖 XML,这可能是有道理的。)

基本上,validateNonSunJAXP() 的作用非常简单。它所做的只是检查 DocumentBuilderFactory 的类名,如果它以“com.sun”开头,则会抛出错误。

有什么想法会导致 VM 停止使用认可的库吗?

最佳答案

docx4j 操作:

  • javax.xml.parsers.SAXParserFactory
  • javax.xml.parsers.DocumentBuilderFactory
  • javax.xml.transform.TransformerFactory

您可以在 https://github.com/plutext/docx4j/blob/master/src/main/java/org/docx4j/XmlUtils.java 查看它的作用

javax.xml.parsers.SAXParserFactory

总而言之,您可以通过 docx4j 属性设置防止 docx4j 触及该值。

我们发现 Crimson 无法解析 docx4j XSLT 文件,这就是 docx4j 默认尝试使用 Xerces 的原因,它包含在 JDK 中。 (在最近的 JDK 中情况可能会更好)

如果你不想这样,你可以通过 docx4j.properties 指定不同的行为:

  • docx4j.javax.xml.parsers.SAXParserFactory.donotset=true 阻止 docx4j 更改设置,或者
  • javax.xml.parsers.SAXParserFactory 允许您指定您想要的内容

请注意,我们不会将该值恢复为其原始设置,因为我们希望避免在应用程序的整个生命周期中使用 Crimson。

javax.xml.parsers.DocumentBuilderFactory

这与 SAXParserFactory 的工作方式类似

相关的docx4j属性如下:

  • docx4j.javax.xml.parsers.DocumentBuilderFactory.donotset
  • javax.xml.parsers.DocumentBuilderFactory

我们不会将该值恢复到其原始设置(尽管也许我们可以;需要检查 docx4j 是否始终使用 XmlUtils.getNewDocumentBuilder() )

关于java - OpenSAML XML 解析器配置的随机错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29085590/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com