java - 如何使用 logback 禁用 accessExternalDTD 和 entityExpansionLimit 警告

标签 java groovy logback saxparser xerces2-j

我将 logback 与 groovy 一起使用,并在解析 xml 时出现大量警告。我知道导致此问题的 JDK1.7_u45 中的错误。

Warning:  org.apache.xerces.parsers.SAXParser: Property 'http://javax.xml.XMLConstants/property/accessExternalDTD' is not recognized.
Warning:  org.apache.xerces.parsers.SAXParser: Property 'http://www.oracle.com/xml/jaxp/properties/entityExpansionLimit' is not recognized.

有什么方法可以关闭此日志警告在 DEBUG 中的显示?我尝试使用过滤器编写过滤器,但没有帮助。

最佳答案

这是 JRE 中的一个已知错误,将其报告为警告。请参阅错误报告 herehere

只有在类路径中有 xerces jar 时才会出现此问题,xerces 实现无法识别该属性并在 org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.setProperty() 上引发异常这会导致来自 com.sun.org.apache.xalan.internal.xsltc.compiler.Parser.parse() 的警告日志(到 System.err)

简单(如果可能)的解决方案是从类路径中删除 xerces jar。

您的日志过滤器不起作用,因为错误从未发送到 slf4j。哪一种暗示了解决问题的复杂方法 - 重定向 System.err to slf4j然后在其上使用日志过滤器。

重现问题的示例代码(基于问题报告):

import java.io.IOException;
import java.net.URL;

import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamSource;

public class XercesTest {
    public static void main(String[] args) throws IOException, TransformerConfigurationException {
        TransformerFactory tf = TransformerFactory.newInstance();
        URL xsl = MainClass.class.getResource("build.xsl");
        StreamSource stylesheetSource = new StreamSource(
            xsl.openStream(), xsl.toExternalForm());
        tf.newTransformer(stylesheetSource);
    }
}

build.xsl

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <!-- TODO: Auto-generated template -->
    </xsl:template>
</xsl:stylesheet>

和maven依赖:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.11.0</version>
</dependency>

关于java - 如何使用 logback 禁用 accessExternalDTD 和 entityExpansionLimit 警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25453042/

相关文章:

java - 关于logback的AsyncAppender

scala - 每 x 天滚动一次的 logback filenamepattern

java - "No such core"使用 EmbeddedSolrServer 的异常

java - 防止 Volley 同时发送相同的请求

java - 在java中组合比较器

java - Tomcat 错误 : java. io.IOException:服务器为 URL 返回 HTTP 响应代码:405:

groovy - 如何在 Groovy 中拦截此构造函数调用?

jenkins - 脚本化 Jenkins 管道 : continue on fail

java - 从 URL 读取图像

java - Logback的压缩滚动文件的处理