首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Spring Boot中从类路径加载Xml文件

在Spring Boot中从类路径加载Xml文件
EN

Stack Overflow用户
提问于 2020-06-26 21:37:55
回答 3查看 1.3K关注 0票数 0

在Spring Boot应用程序启动时,我尝试从类路径中的一个目录加载和验证xml文件。我看到以下错误,这表明我正在尝试使用绝对路径而不是类路径加载文件:

代码语言:javascript
复制
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

以下是加载文件的代码片段:

代码语言:javascript
复制
..
@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
        }

我认为问题出在上面代码中的这条语句中:

代码语言:javascript
复制
File file = ResourceUtils.getFile(xmlResource.getURL());

但我不确定还有什么其他方法可以做到这一点。任何帮助都是非常感谢的。

EN

回答 3

Stack Overflow用户

发布于 2020-06-26 21:50:55

我只是想知道当xmlResource.getFile()已经可以用来获取文件句柄的时候,你为什么还要使用ResourceUtils.getFile(xmlResource.getURL())。理想情况下,您应该捕获catch块中的FileNotFoundException,并检查包装在异常中的详细消息。

编辑:

引发异常是因为在运行时在类路径中找不到xml。最有可能的是,文件target/converters/mapper.xml不可用。

票数 0
EN

Stack Overflow用户

发布于 2020-06-26 22:06:27

尝试类似这样的MyService.class.getClassLoader().getResourceAsStream("/file.xml");,然后从stream创建文件。

票数 0
EN

Stack Overflow用户

发布于 2021-03-19 01:57:06

尝试使用commons-io:commons-io:2.7 (Maven工件)并使用以下代码:

代码语言:javascript
复制
InputStream inputStream = obj.getClass()
                                     .getClassLoader()
                                     .getResourceAsStream("converters/mapper.xml");
                                         
String data = IOUtils.toString(inputStream, "UTF-8");
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62595994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档