这是 JRE 中的一个已知 bug,它将此报告为警告。在此处和此处查看错误报告
仅当类路径中有 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重定向到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>