繁体   English   中英

logback-spring.xml 级别配置中的“java.lang.IllegalStateException:无法从类路径初始化 Logback 日志记录:logback-spring.xml”

[英]"java.lang.IllegalStateException: Could not initialize Logback logging from classpath:logback-spring.xml" in logback-spring.xml level configuration

我已经将 logback-spring.xml 添加到 class 路径中,它工作正常,直到我添加了一些 ISO 消息转换的依赖项。(深红色依赖项在 JPOS 库中被硬编码,因此无法删除)

<project>
<modelVersion>4.0.0</modelVersion>
<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.7.7</version>
    <relativePath/>
</parent>
<groupId>com.test</groupId>
<artifactId>iso-test</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>iso-test</name>
<description>test</description>
<properties>
    <java.version>11</java.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.modelmapper</groupId>
        <artifactId>modelmapper</artifactId>
        <version>2.4.4</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.jpos</groupId>
        <artifactId>jpos</artifactId>
        <version>2.1.0</version>
    </dependency>
    <dependency>
        <groupId>crimson</groupId>
        <artifactId>crimson</artifactId>
        <version>1.1.3</version>
        <optional>true</optional>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
</project>

然后 logback-spring.xml 读取有一个问题,但有以下异常。

java.lang.IllegalStateException:无法从类路径初始化 Logback 日志记录:logback-spring.xml'

引起:org.xml.sax.SAXNotSupportedException:特征: http://xml.org/sax/features/external-general-entities

下面是 JPOS 打包器(GenericValidatingPackager.class)使用 crimson 库的地方。

public void readFile(String filename) throws ISOException {
    XMLReader reader=XMLReaderFactory.createXMLReader(System.getProperty("sax.parser", "org.apache.crimson.parser.XMLReaderImpl"));
...
}

crimson 依赖项硬编码在 JPOS 库中,因此无法删除

这个不对,参考JPOS packager(GenericValidatingPackager.class)

XMLReader reader = XMLReaderFactory.createXMLReader(System.getProperty("sax.parser", "org.apache.crimson.parser.XMLReaderImpl"));

这一行只是告诉我们,如果我们不设置属性“sax.parser”,我们将使用org.apache.crimson.parser.XMLReaderImpl作为回退。

那么我们需要的是:

  1. 去除crimson依赖
  2. 设置属性“sax.parser”,例如
System.setProperty("sax.parser", "com.sun.org.apache.xerces.internal.parsers.SAXParser");

如果您使用现代 JVM(1.8 及更高版本),jPOS 不需要 Crimson。

它在过去被用作后备,如果 JVM 没有提供 XMLReader,并且org.xml.sax.driver没有配置。

此外,我建议使用最新版本(请参阅 ChangeLog) ,因为自 2017 年的 2.1.0 以来已经有了很多改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM