显然,第三方JAR需要基于本地磁盘文件系统的URI.这实际上是他们身边的错误.可以通过uri.toURL().openStream()获取内容,而无需担心URI实际位于的上下文.拒绝该值表明第三方正在使用新的FileInputStream(新文件(uri))那.首先,应该报告这一点,以便他们能够正确地修复它.
同时,最好的办法是将其转换为基于本地磁盘文件系统的URI,而不是提供虚拟文件系统或基于Web的URI.您可以通过在容器管理的临时文件夹中使用File#createTempFile()的帮助创建临时文件,将内容写入其中并最终将临时文件作为URI提供.
下面的示例假设您在servlet中,因此已经掌握了getServletContext().否则,您正在使用的基于Java EE的框架必须具有为/向您注入ServletContext的功能.
String tempDir = (String) getServletContext().getAttribute(ServletContext.TEMPDIR);
File tempFile = File.createTempFile("temp-", ".properties", new File(tempDir));
Files.copy(propertiesUrl.openStream(), tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING);
// ...
defaultConfiguration = Factory.createDefaultConfiguration(tempFile.toURI());