我正在使用groovy的logback,解析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中?我尝试使用过滤器编写过滤器,但没有帮助。
如果无法从类路径中删除Xerce,可以更明确地说明要使用哪个工厂,从而避免拉入Xerce。以下是解决特定工厂问题的两种方法:
public static SchemaFactory getSchemaFactory() {
return schemaFactory =
SchemaFactory.newInstance(
"http://www.w3.org/2001/XMLSchema",
"com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory",
null);
}
public static TransformerFactory getTransformerFactory() {
try {
final Class<?> transformerFactoryImplClass =
TransformerFactory.class
.getClassLoader().loadClass("com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");
final Method factoryGetter =
transformerFactoryImplClass.getDeclaredMethod("newTransformerFactoryNoServiceLoader");
return (TransformerFactory) factoryGetter.invoke(null);
} catch (ClassNotFoundException
| NoSuchMethodException
| IllegalAccessException
| InvocationTargetException e) {
// fallback in case com.sun.* is not available
return TransformerFactory.newInstance();
}
}
我在一个项目中也犯了这个错误。据我所知,较新版本的JRE内置了Xerces实现。更重要的是,JRE版本正确地支持accessExternalDTD
和entityExpansionLimit
属性。
因为我有一个下游依赖项,它包括我的war文件中的xercesImpl.jar
,所以我的解决方案是使用build.gradle
中的代码将其拉出,并让xerces的JRE实现在类路径中接管。
warApplication {
from '/WEB-INF/lib'
exclude 'xercesImpl*.jar'
}
这是JRE中的一个已知错误,它将此报告为警告。查看此处和此处的错误报告
只有当类路径中有xerces jar时,问题才会发生,xerces实现无法识别该属性,并在org上引发异常。阿帕奇。薛西斯。jaxp。saxpasserimpl$JAXPSAXParser。setProperty(),它会从com生成警告日志(到System.err)。太阳组织。阿帕奇。泽兰。内部的xsltc。编译器。解析器。解析()
简单(如果可能的话)的解决方案是从类路径中删除xerces jar。
日志过滤器不工作,因为错误从未发送到slf4j。这意味着一种复杂的解决问题的方法——重定向系统。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);
}
}
建筑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>
问题内容: 我将groovy与logback结合使用,并且在解析xml时会收到很多警告。我知道导致此的JDK1.7_u45中的错误。 有什么办法可以关闭此日志警告,使其不再显示在DEBUG中?我尝试使用过滤器编写过滤器,但没有帮助。 问题答案: 这是JRE中的一个已知错误,将其报告为警告。在此处 和此处 查看错误报告 仅当您在类路径中有xerces jar时,该问题才会发生,xerces实现无法识
问题内容: 我正在使用的代码会使用该warnings库引发很多(目前对我而言)无用的警告。阅读(/扫描)文档后,我只找到了一种禁用单个功能警告的方法。但是我不想更改太多代码。 可能有像这样的标志吗? 你会推荐什么? 问题答案: 有-W选项。 python -W ignore foo.py
问题内容: 我正在尝试在Pylint 0.21.1中禁用警告C0321(“在一行上有多个语句” –我经常将带有短单行结果的语句放在同一行上)(如果重要:astng 0.20)。 1,常见的0.50.3,Python 2.6.6(r266:84292,2010年9月15日,16:22:56))。 我尝试添加Pylint配置文件,但是Pylint坚持要报告它。该行的变体(如或)被标记为错误,因此Pyl
请查找我的应用程序登录FileAppender配置。 我没有为警报文件追加器配置任何rollingpolicy,但仍在进行滚动。我需要一个单一的文件,我的所有错误通过一天,一年等,请帮助。 谢谢Satyajit
我试图禁用MAMP中已弃用的警告。我的MAMP php版本是5.5.18。php.ini文件 /Applications/MAMP/bin/php/php5.5.18/conf/如我在phpinfo()中看到的。我的问题是无论我在php.ini.做什么都不会改变 我试过了 甚至: 另一方面 但是警告仍然显示在我的页面上。 我错过了什么? 谢啦
我正在使用Spring Boot构建一个命令行应用程序。在这样的应用程序中,日志反馈控制台日志记录是不合适的。我怎样才能完全禁用控制台附加器,但仍然让文件附加器在默认的Spring Boot支持下工作呢? 我在这里创建了一个特性请求,以便更简单地支持该特性: https://github.com/spring-projects/spring-boot/issues/1612