Sping Boot 2.6.1支持logback 1.2.7
我在project中添加了以下依赖项
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
但构建失败,但有以下例外:
Caused by: javax.xml.parsers.ParserConfigurationException: SAX feature 'http://xml.org/sax/features/external-general-entities' not supported.
at oracle.xml.jaxp.JXSAXParserFactory.setFeature(JXSAXParserFactory.java:272)
at ch.qos.logback.core.joran.event.SaxEventRecorder.buildSaxParser(SaxEventRecorder.java:82)
... 44 more
在SaxEventRecorder.class中,它在构建SAX解析器时失败
private SAXParser buildSaxParser() throws JoranException {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setValidating(false);
//spf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
spf.setFeature("http://xml.org/sax/features/external-general-entities", false);
spf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
spf.setNamespaceAware(true);
return spf.newSAXParser();
} catch (Exception pce) {
String errMsg = "Parser configuration error occurred";
addError(errMsg, pce);
throw new JoranException(errMsg, pce);
}
}
是否有方法覆盖实现?
Thanks:)
3条答案
按热度按时间svdrlsy41#
在升级时遇到了同样的问题。这不是Spring的问题,您也不想自己重写实现。
SAXParserFactory
是一个抽象类-它可以有多个实现。newInstance
方法选择类路径上的最后一个/最上面的实现。我发现我的类路径上有一个“额外”的实现,这是因为依赖项有自己的
SAXParserFactory
实现,而不是Logback期望的“典型”实现。这个“额外的”SAXParserFactory
不支持Logback试图启用的功能。我必须在我的依赖项中显式地声明一个xerces实现,以便“真实的的”实现优先于类路径上的其他“额外的”实现。
所以我的建议是,你看看你有这个抽象类的实现(我可以很容易地看到这使用IntelliJ IDE),然后管理/重新安排你的依赖关系,以便支持该功能的适当实现在你的类路径上具有更高的优先级。
vfh0ocws2#
对我来说,我们使用了一种古老的依赖
更新到
ojdbc 8解决了我的问题!
pu82cl6c3#
也许这并不是你想要的,但是对于我的项目,我们决定排除这个解析器:
但如果你真的需要它,我建议你看看@matzeihnsein的答案,并升级你的版本。这样做也帮助了我。