Anonymous | Login | Signup for a new account | 11-17-2024 02:49 PST |
Main | My View | View Issues | Change Log | Docs |
Viewing Issue Advanced Details [ Jump to Notes ] | [ View Simple ] [ Issue History ] [ Print ] | ||||||||
ID | Category | Severity | Reproducibility | Date Submitted | Last Update | ||||
0006227 | [Resin] | minor | always | 04-13-19 19:21 | 04-23-19 14:29 | ||||
Reporter | nam | View Status | public | ||||||
Assigned To | ferg | ||||||||
Priority | normal | Resolution | fixed | Platform | |||||
Status | closed | OS | |||||||
Projection | none | OS Version | |||||||
ETA | none | Fixed in Version | 4.0.62 | Product Version | 4.0.61 | ||||
Product Build | |||||||||
Summary | 0006227: resin.rnc FileNotFoundException when running embedded with spring-boot | ||||||||
Description |
Resin is unable to find resin.rnc when running embedded within Spring Boot. The issue is that the resin.jar is nested within the executable jar. 1. EXECUTABLE JAR 2. EXCEPTION =============== 1. EXECUTABLE JAR =============== $ jar tf spring-boot-resin-test-1.0-SNAPSHOT.jar META-INF/ META-INF/MANIFEST.MF org/ org/springframework/ org/springframework/boot/ org/springframework/boot/loader/ org/springframework/boot/loader/archive/ org/springframework/boot/loader/archive/ExplodedArchive$1.class org/springframework/boot/loader/archive/ExplodedArchive.class org/springframework/boot/loader/jar/ org/springframework/boot/loader/jar/CentralDirectoryFileHeader.class org/springframework/boot/loader/jar/CentralDirectoryEndRecord.class org/springframework/boot/loader/PropertiesLauncher$1.class org/springframework/boot/loader/archive/Archive.class org/springframework/boot/loader/archive/ExplodedArchive$FileEntryIterator$EntryComparator.class org/springframework/boot/loader/jar/ZipInflaterInputStream.class org/springframework/boot/loader/jar/Handler.class org/springframework/boot/loader/LaunchedURLClassLoader.class org/springframework/boot/loader/Launcher.class org/springframework/boot/loader/archive/ExplodedArchive$FileEntry.class org/springframework/boot/loader/archive/JarFileArchive$EntryIterator.class org/springframework/boot/loader/jar/CentralDirectoryParser.class org/springframework/boot/loader/jar/JarFile.class org/springframework/boot/loader/jar/JarEntry.class org/springframework/boot/loader/jar/Bytes.class org/springframework/boot/loader/ExecutableArchiveLauncher.class org/springframework/boot/loader/data/ org/springframework/boot/loader/data/RandomAccessDataFile$FileAccess.class org/springframework/boot/loader/archive/Archive$Entry.class org/springframework/boot/loader/util/ org/springframework/boot/loader/util/SystemPropertyUtils.class org/springframework/boot/loader/jar/CentralDirectoryVisitor.class org/springframework/boot/loader/jar/StringSequence.class org/springframework/boot/loader/jar/JarFileEntries$EntryIterator.class org/springframework/boot/loader/MainMethodRunner.class org/springframework/boot/loader/LaunchedURLClassLoader$UseFastConnectionExceptionsEnumeration.class org/springframework/boot/loader/data/RandomAccessData.class org/springframework/boot/loader/archive/Archive$EntryFilter.class org/springframework/boot/loader/jar/JarFileEntries.class org/springframework/boot/loader/jar/JarFile$JarFileType.class org/springframework/boot/loader/jar/JarFile$2.class org/springframework/boot/loader/JarLauncher.class org/springframework/boot/loader/data/RandomAccessDataFile.class org/springframework/boot/loader/archive/ExplodedArchive$FileEntryIterator.class org/springframework/boot/loader/jar/JarFileEntries$1.class org/springframework/boot/loader/jar/FileHeader.class org/springframework/boot/loader/jar/JarEntryFilter.class org/springframework/boot/loader/jar/JarURLConnection.class org/springframework/boot/loader/WarLauncher.class org/springframework/boot/loader/data/RandomAccessDataFile$1.class org/springframework/boot/loader/archive/JarFileArchive$JarFileEntry.class org/springframework/boot/loader/jar/JarURLConnection$1.class org/springframework/boot/loader/jar/JarURLConnection$JarEntryName.class org/springframework/boot/loader/data/RandomAccessDataFile$DataInputStream.class org/springframework/boot/loader/PropertiesLauncher.class org/springframework/boot/loader/archive/JarFileArchive.class org/springframework/boot/loader/jar/AsciiBytes.class org/springframework/boot/loader/jar/JarFile$1.class org/springframework/boot/loader/PropertiesLauncher$PrefixMatchingArchiveFilter.class org/springframework/boot/loader/PropertiesLauncher$ArchiveEntryFilter.class BOOT-INF/ BOOT-INF/classes/ BOOT-INF/classes/com/ BOOT-INF/classes/com/caucho/ BOOT-INF/classes/com/caucho/spring/ META-INF/maven/ META-INF/maven/com.caucho/ META-INF/maven/com.caucho/spring-boot-resin-test/ BOOT-INF/classes/com/caucho/spring/MyApplication.class BOOT-INF/classes/com/caucho/spring/MyController.class META-INF/maven/com.caucho/spring-boot-resin-test/pom.xml META-INF/maven/com.caucho/spring-boot-resin-test/pom.properties BOOT-INF/lib/ BOOT-INF/lib/spring-boot-starter-web-2.1.4.RELEASE.jar BOOT-INF/lib/spring-boot-starter-2.1.4.RELEASE.jar BOOT-INF/lib/spring-boot-2.1.4.RELEASE.jar BOOT-INF/lib/spring-boot-autoconfigure-2.1.4.RELEASE.jar BOOT-INF/lib/spring-boot-starter-logging-2.1.4.RELEASE.jar BOOT-INF/lib/logback-classic-1.2.3.jar BOOT-INF/lib/logback-core-1.2.3.jar BOOT-INF/lib/slf4j-api-1.7.26.jar BOOT-INF/lib/log4j-to-slf4j-2.11.2.jar BOOT-INF/lib/log4j-api-2.11.2.jar BOOT-INF/lib/jul-to-slf4j-1.7.26.jar BOOT-INF/lib/javax.annotation-api-1.3.2.jar BOOT-INF/lib/spring-core-5.1.6.RELEASE.jar BOOT-INF/lib/spring-jcl-5.1.6.RELEASE.jar BOOT-INF/lib/snakeyaml-1.23.jar BOOT-INF/lib/spring-boot-starter-json-2.1.4.RELEASE.jar BOOT-INF/lib/jackson-databind-2.9.8.jar BOOT-INF/lib/jackson-annotations-2.9.0.jar BOOT-INF/lib/jackson-core-2.9.8.jar BOOT-INF/lib/jackson-datatype-jdk8-2.9.8.jar BOOT-INF/lib/jackson-datatype-jsr310-2.9.8.jar BOOT-INF/lib/jackson-module-parameter-names-2.9.8.jar BOOT-INF/lib/hibernate-validator-6.0.16.Final.jar BOOT-INF/lib/validation-api-2.0.1.Final.jar BOOT-INF/lib/jboss-logging-3.3.2.Final.jar BOOT-INF/lib/classmate-1.4.0.jar BOOT-INF/lib/spring-web-5.1.6.RELEASE.jar BOOT-INF/lib/spring-beans-5.1.6.RELEASE.jar BOOT-INF/lib/spring-webmvc-5.1.6.RELEASE.jar BOOT-INF/lib/spring-aop-5.1.6.RELEASE.jar BOOT-INF/lib/spring-context-5.1.6.RELEASE.jar BOOT-INF/lib/spring-expression-5.1.6.RELEASE.jar BOOT-INF/lib/spring-boot-starter-resin-2.1.4.RELEASE.jar BOOT-INF/lib/resin-4.0.60.jar BOOT-INF/lib/javaee-16-4.0.60.jar BOOT-INF/lib/hessian-4.0.60.jar BOOT-INF/lib/javax.el-api-3.0.0.jar =========== 2. EXCEPTION =========== org.springframework.context.ApplicationContextException: Unable to start web server; nested exception is com.caucho.config.ConfigException: java.io.FileNotFoundException: /BOOT-INF/lib/resin-4.0.60.jar!/com/caucho/server/resin/resin.rnc at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:157) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543) ~[spring-context-5.1.6.RELEASE.jar!/:5.1.6.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:142) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:775) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:316) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1260) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1248) [spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at com.caucho.spring.MyApplication.main(MyApplication.java:10) [classes!/:1.0-SNAPSHOT] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na] at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na] at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na] at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na] at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48) [spring-boot-resin-test-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:87) [spring-boot-resin-test-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] at org.springframework.boot.loader.Launcher.launch(Launcher.java:50) [spring-boot-resin-test-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) [spring-boot-resin-test-1.0-SNAPSHOT.jar:1.0-SNAPSHOT] Caused by: com.caucho.config.ConfigException: java.io.FileNotFoundException: /BOOT-INF/lib/resin-4.0.60.jar!/com/caucho/server/resin/resin.rnc at com.caucho.config.LineConfigException.create(LineConfigException.java:163) ~[resin-4.0.60.jar!/:4.0.60] at com.caucho.config.Config.configure(Config.java:258) ~[resin-4.0.60.jar!/:4.0.60] at com.caucho.server.resin.BootConfig.configureFile(BootConfig.java:132) ~[resin-4.0.60.jar!/:4.0.60] at com.caucho.server.resin.Resin.configureFile(Resin.java:1038) ~[resin-4.0.60.jar!/:4.0.60] at org.springframework.boot.web.embedded.resin.ResinPreCustomizer$ConfigFileResinPreCustomizer.customize(ResinPreCustomizer.java:47) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.web.embedded.resin.SpringResin.createResin(SpringResin.java:93) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.web.embedded.resin.SpringResin.<init>(SpringResin.java:64) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.web.embedded.resin.ResinServletWebServerFactory.createSpringResin(ResinServletWebServerFactory.java:103) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.web.embedded.resin.ResinServletWebServerFactory.getWebServer(ResinServletWebServerFactory.java:84) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.createWebServer(ServletWebServerApplicationContext.java:181) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.onRefresh(ServletWebServerApplicationContext.java:154) ~[spring-boot-2.1.4.RELEASE.jar!/:2.1.4.RELEASE] ... 16 common frames omitted Caused by: java.io.FileNotFoundException: /BOOT-INF/lib/resin-4.0.60.jar!/com/caucho/server/resin/resin.rnc at com.caucho.vfs.Jar.openReadImpl(Jar.java:509) ~[resin-4.0.60.jar!/:4.0.60] at com.caucho.vfs.Jar.openReadImpl(Jar.java:479) ~[resin-4.0.60.jar!/:4.0.60] at com.caucho.vfs.JarPath.openReadImpl(JarPath.java:214) ~[resin-4.0.60.jar!/:4.0.60] at com.caucho.vfs.Path.openRead(Path.java:1156) ~[resin-4.0.60.jar!/:4.0.60] at com.caucho.relaxng.CompactVerifierFactoryImpl.compileSchema(CompactVerifierFactoryImpl.java:89) ~[resin-4.0.60.jar!/:4.0.60] at com.caucho.config.Config.findCompactSchema(Config.java:513) ~[resin-4.0.60.jar!/:4.0.60] at com.caucho.config.Config.configure(Config.java:250) ~[resin-4.0.60.jar!/:4.0.60] |
||||||||
Steps To Reproduce | |||||||||
Additional Information | |||||||||
Attached Files | |||||||||
|
Notes | |
(0006881) nam 04-13-19 19:25 |
Spring provides a classloader that we may use to load files: https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/io/ResourceLoader.html [^] |
(0006882) nam 04-13-19 21:10 |
Workaround: try { Field bootConfigField = Resin.class.getDeclaredField("_bootConfig"); bootConfigField.setAccessible(true); this.bootConfig = (BootConfig) bootConfigField.get(resin); } catch (Exception ex) { throw ConfigException.create(ex); } InputStream is = null; try { Resource resource = this.resourceLoader.getResource(file); is = resource.getInputStream(); } catch (IOException ex) { throw ConfigException.create(ex); } Config config = new Config(); Schema schema = null; try { config.configure(this.bootConfig.getBootResin(), is, schema); } catch (Exception ex) { throw ConfigException.create(ex); } |
Mantis 1.0.0rc3[^]
Copyright © 2000 - 2005 Mantis Group
31 total queries executed. 27 unique queries executed. |