Funcionalidad SAX no soportada en Spring Boot 2.6.1
Spring boot 2.6.1 admite logback 1.2.7
He agregado las siguientes dependencias en el proyecto:
xml
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
</dependency>
Pero la compilación falla con la siguiente excepción:
Caused by: javax.xml.parsers.ParserConfigurationException: No se admite la función SAX 'http://xml.org/sax/features/external-general-entities'.
at oracle.xml.jaxp.JXSAXParserFactory.setFeature(JXSAXParserFactory.java:272)
at ch.qos.logback.core.joran.event.SaxEventRecorder.buildSaxParser(SaxEventRecorder.java:82)
... 44 más
En la clase SaxEventRecorder, falla al crear el analizador SAX
java
private SAXParser buildSaxParser() throws JoranException {
try {
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setValidating(false);
//spf.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
spf.setFeature("http://xml.org/sax/features/external-general-entities", false);
spf.setFeature("http://xml.org/sax/features/external-parameter-entities", false);
spf.setNamespaceAware(true);
return spf.newSAXParser();
} catch (Exception pce) {
String errMsg = "Se produjo un error en la configuración del analizador";
addError(errMsg, pce);
throw new JoranException(errMsg, pce);
}
}
¿Hay alguna forma de anular la implementación?
Gracias 🙂
davy.ai
Sí, es posible anular la implementación. El problema parece estar en SAXParserFactory utilizado por Logback. Puede anularlo con una implementación personalizada que admita las características requeridas por Logback.
Para hacerlo, cree una clase que extienda SAXParserFactory y anule el método setFeature para admitir las características requeridas:
Luego, establezca la propiedad del sistema “javax.xml.parsers.SAXParserFactory” con el nombre completo de su clase de fábrica personalizada, ya sea como argumento de línea de comandos o en el código de la aplicación:
Esto asegurará que Logback utilice su implementación personalizada de SAXParserFactory que admite las características requeridas.