name logger example java groovy logback saxparser xerces2-j

java - logger - logback spring boot



Cómo deshabilitar las advertencias accessExternalDTD y entityExpansionLimit con logback (2)

Este es un error conocido en el JRE que informa esto como una advertencia. Ver informes de errores here y here

El problema ocurre solo cuando tiene un jar xerces en su classpath, la implementación de xerces no reconoce la propiedad y arroja una excepción en org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.setProperty() que da como resultado un registro de advertencia (al sistema .err) de com.sun.org.apache.xalan.internal.xsltc.compiler.Parser.parse()

La solución fácil (si es posible) es eliminar el jar xerces de su classpath.

Su filtro de registro no funciona ya que el error nunca se envía a slf4j. ¿Qué tipo de sugiere una forma enrevesada de solucionar el problema? Redirigir System.err a slf4j y luego utilizar un filtro de registro en él.

Código de muestra para reproducir el problema (basado en el informe de problema):

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>

Y la dependencia de maven:

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

Estoy usando logback con groovy y recibo muchas advertencias al analizar xml. Soy consciente del error en JDK1.7_u45 que está causando esto.

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.

¿Hay alguna forma de desactivar esta advertencia de registro para que no aparezca en DEPURAR? Intenté escribir un filtro usando Filter, pero no lo ayudé.


También tuve este error en un proyecto. Tal como lo entiendo, las versiones más nuevas de JRE tienen incorporada la implementación de Xerces. Más importante aún, la versión de JRE admite adecuadamente las propiedades accessExternalDTD y entityExpansionLimit .

Debido a que tenía una dependencia xercesImpl.jar que incluía xercesImpl.jar en mi archivo war, mi solución era simplemente arrastrarlo usando el código siguiente en mi build.gradle y dejar que la implementación JRE de xerces tomara el relevo en la ruta de la clase.

warApplication { from ''/WEB-INF/lib'' exclude ''xercesImpl*.jar'' }