簡體   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