Comment désactiver les Avertissements accessExternalDTD et entityExpansionLimit avec logback

j'utilise logback avec groovy et j'obtiens beaucoup d'avertissements qui apparaissent lors de l'analyse xml. Je suis au courant du bogue dans JDK1.7_u45 qui cause ça.

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.

y a-t-il un moyen de désactiver ce log warnings pour qu'il n'apparaisse pas dans DEBUG? J'ai essayé d'écrire un filtre en utilisant le filtre, mais ça n'a pas aidé.

26
demandé sur Andreas 2014-08-22 22:02:19

2 réponses

c'est un bug connu dans la JRE qui signale ceci comme un avertissement. Voir les rapports de bogue ici et ici

le problème se produit seulement quand vous avez xerces jar dans votre classpath, l'implémentation de xerces ne reconnaît pas la propriété et jette une exception sur org.Apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.setProperty () qui donne un journal d'avertissement (au système.err) de la com.sun.org.apache.xalan.interne.xsltc.compilateur.Parser.parse ()

la solution facile (si possible) est de retirer xerces jar de votre classepath.

votre filtre de journalisation ne fonctionne pas puisque l'erreur n'est jamais envoyée à slf4j. Ce qui suggère une façon alambiquée de régler le problème - rediriger le système .euh pour slf4j et ensuite utiliser un enregistrement de filtre.

exemple de code à reproduire la question (la question du rapport):

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);
    }
}
"151930920 de construire".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>

et dépendance maven:

<dependency>
    <groupId>xerces</groupId>
    <artifactId>xercesImpl</artifactId>
    <version>2.11.0</version>
</dependency>
18
répondu 6ton 2017-05-23 12:25:33

j'ai aussi eu cette erreur dans un projet. Si j'ai bien compris, les nouvelles versions de la JRE intègrent L'implémentation Xerces. Plus important encore, la version JRE supporte correctement les propriétés accessExternalDTD et entityExpansionLimit .

parce que j'avais une dépendance en aval qui incluait xercesImpl.jar dans mon fichier de guerre, ma solution était juste de l'yank en utilisant le code ci-dessous dans mon build.gradle et laisser l'implémentation JRE de xerces prendre le relais dans le chemin de classe.

warApplication {
    from '/WEB-INF/lib'
        exclude 'xercesImpl*.jar'
}
1
répondu Dana Britzman 2017-10-25 02:27:55