在 Spring Boot 應用程式(2.3.3)上,我依賴于我公司開發的模塊。從服務中,我正在呼叫此依賴項中的方法,該方法需要從資源(src/main/resources/META-INF/spring-main-cfg.xml)加載檔案,因此我已將此檔案復制并粘貼到我的Spring Boot 應用程式資源。
這是在該依賴項中執行的代碼:
InputStream in = RSAEncrypter.class.getClassLoader().getResourceAsStream(keyFileName);
// StreamCorruptedException here
ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));
堆:
java.io.StreamCorruptedException:無效的流標頭:EFBFBDEF at java.io.ObjectInputStream.readStreamHeader(ObjectInputStream.java:936) ~[na:1.8.0_281] at java.io.ObjectInputStream.(ObjectInputStream.java:394) ~[無:1.8.0_281]
問題是,我創建了一個新的虛擬 Maven 專案,它只有這個依賴項和一個執行該代碼的主程式,它可以作業。
我不明白我從 Spring Boot 應用程式執行此例外的原因可能是什么。我有相同的Java版本,讀取的檔案是相同的。
有任何想法嗎?
uj5u.com熱心網友回復:
我終于找到了問題,因為我有一個全域檔案,所以它是它自己的檔案:
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
</resource>
</resources>
Maven 檔案對此說:
警告:不要過濾帶有二進制內容的檔案,如影像!這很可能會導致輸出損壞。
https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html
所以我只是為我的檔案添加了一個例外:
<resources>
<!-- Only properties files have to be filtered.
META-INF/spring-main-cfg.xml must not be or StreamCorruptedException occure by reading it -->
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.properties</include>
</includes>
</resource>
</resources>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/527020.html
