在Spring Boot应用程序启动时,我尝试从类路径中的一个目录加载和验证xml文件。我看到以下错误,这表明我正在尝试使用绝对路径而不是类路径加载文件:
java.io.FileNotFoundException: class path resource [converters/mapper.xml] cannot be resolved to absolute file path because it does not reside in the file system: jar:file:/opt/core/home/libexec/boss/core-service-2.0.0.jar!/BOOT-INF/lib/core-api-2.0.0.jar!/converters/mapper.xml
以下是加载文件的代码片段:
..
@Autowired
public FieldsMapTypeConvertersRegistry(@Value("${core.files-location:converters}")
String mapperFilesLocation) {
this.mapperFilesLocation = mapperFilesLocation;
}
..
try {
// ToDo we need to replace this when we enable multi-tenancy
ClassLoader classLoader = ClassUtils.getDefaultClassLoader();
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver(classLoader);
Resource[] xmlResources = resolver.getResources(mapperFilesLocation + "/*.xml");
for (Resource xmlResource : xmlResources) {
File file = ResourceUtils.getFile(xmlResource.getURL());
registerTypeConverter(file);
}
} catch (IOException e) {
// do stuff
} catch (JAXBException e) {
//do stuff
}
我认为问题出在上面代码中的这条语句中:
File file = ResourceUtils.getFile(xmlResource.getURL());
但我不确定还有什么其他方法可以做到这一点。任何帮助都是非常感谢的。
发布于 2020-06-26 21:50:55
我只是想知道当xmlResource.getFile()已经可以用来获取文件句柄的时候,你为什么还要使用ResourceUtils.getFile(xmlResource.getURL())。理想情况下,您应该捕获catch块中的FileNotFoundException,并检查包装在异常中的详细消息。
编辑:
引发异常是因为在运行时在类路径中找不到xml。最有可能的是,文件target/converters/mapper.xml不可用。
发布于 2020-06-26 22:06:27
尝试类似这样的MyService.class.getClassLoader().getResourceAsStream("/file.xml");,然后从stream创建文件。
发布于 2021-03-19 01:57:06
尝试使用commons-io:commons-io:2.7 (Maven工件)并使用以下代码:
InputStream inputStream = obj.getClass()
.getClassLoader()
.getResourceAsStream("converters/mapper.xml");
String data = IOUtils.toString(inputStream, "UTF-8");https://stackoverflow.com/questions/62595994
复制相似问题