如何从属性文件的服务器路径获取URL位置

时间:2015-12-17 13:58:04

标签: java url java-ee uri config

我需要将属性文件的URI传递给以下方法(第三方jar)

    defaultConfiguration = Factory.createDefaultConfiguration(propertiesUrl.toURI());
PayClient client = Factory.createClient(defaultConfiguration);

当我在服务器上部署我的代码时,我得到这个路径,即propertiesUrl.toURI()为abc://localhost/server/test/payment/ConfigLookup.properties

第三方应用程序拒绝此值,并且不会创建用于创建连接客户端的配置。

传递属性文件在本地bin文件夹中的示例代码可以正常工作。

收到的路径为propertiesUrl.toURI()

file:/D:/Code/bin/ConfigLookup.properties

以上创建了一个成功的连接。

请指导我们之间缺少什么。如何使服务器代码以与本地代码相似的方式工作。

2 个答案:

答案 0 :(得分:1)

显然第三方JAR需要基于本地磁盘文件系统的URI。这实际上是他们身边的错误。可以通过uri.toURL().openStream()获取内容,而无需担心URI实际所处的上下文。拒绝该值意味着第三方正在使用new FileInputStream(new File(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());

那就是说,你绝对相信这个属性文件不应该放在/WEB-INF文件夹中吗?现在,世界上任何拥有网络浏览器的人都可以公开访问它。另见a.o. Where to place and how to read configuration resource files in servlet based application?

答案 1 :(得分:0)

您可以通过类加载器获取资源,然后为文件获取URI,有关详细信息,请参阅here