【问题标题】:How to get an URL location from a server path for a property file如何从属性文件的服务器路径中获取 URL 位置
【发布时间】:2015-12-27 20:38:16
【问题描述】:

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

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

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

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

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

收到的路径为propertiesUrl.toURI()

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

以上创建成功连接。

请指导我了解他们之间缺少的内容。如何使服务器代码以与本地代码类似的方式工作。

【问题讨论】:

  • 什么是“abc:”方案?
  • 其实就是我们部署代码的服务器。部署后,它看起来像说项目名称(我将其命名为 abc):://localhost/server/test/payment/ConfigLookup.properties
  • 目前尚不清楚“拒绝此值”是什么意思,是否有某种错误消息或配置根本没有被加载。第 3 方 jar 是否进行任何日志记录?你能从它那里得到任何可能提供更多关于它在寻找什么的线索的日志吗?

标签: java url jakarta-ee uri config


【解决方案1】:

显然,第 3 方 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?

【讨论】:

    【解决方案2】:

    您可以通过类加载器获取资源,然后获取文件的 URI,详情请参阅here

    【讨论】:

    • 我确实得到了资源,但是它看起来像 abc://localhost/server/test/payment/ConfigLookup.properties,第 3 方 jar 不接受作为有效 URI。
    猜你喜欢
    • 1970-01-01
    • 2015-06-06
    • 2011-07-14
    • 2017-09-01
    • 1970-01-01
    • 2011-11-06
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多