【问题标题】:Java applet can't find JavaPOS configuration filesJava小程序找不到JavaPOS配置文件
【发布时间】:2023-04-06 06:57:01
【问题描述】:

我创建了一个小程序,它使用 JavaPOS 与用户本地系统上的支付终端进行通信。

在 Eclipse IDE 中运行时,小程序可以正常工作,但在浏览器中运行时却不行。在浏览器中,小程序似乎找不到 jpos/res/jpos.properties 和 jposxml.cfg 文件。

在小程序中执行以下语句时(在 start() 方法中,而不是 init() 中):

JposEntryRegistry registry = JposServiceLoader.getManager().getEntryRegistry();
registry.load();

这是我在 Java 控制台窗口中看到的输出:

jpos/res/jpos.properties file not found
jpos/res/jpos.properties file not found
jpos/res/jpos.properties file not found

并且 JposEntry 注册表中没有加载任何条目。

我尝试了以下方法让小程序“看到”这两个文件:

  1. jpos/res/jpos.properties 已存在于小程序引用的其中一个 jar 中。不过,我已将此文件添加到小程序的主 jar 中。我还尝试将它添加到包含 jars 的服务器上的目录中(使用正确的相对路径)。这些都不行。

  2. 我可以通过使用适当的值设置系统属性来解决无法找到 jpos.properties 的问题,如下所示:

    System.setProperty("jpos.loader.serviceManagerClass", "jpos.loader.simple.SimpleServiceManager");
    System.setProperty("jpos.config.populatorFile", "jposxml.cfg");
    System.setProperty("jpos.util.tracing.TurnOnNamedTracers", "JposServiceLoader,SimpleEntryRegistry,SimpleRegPopulator,XercesRegPopulator");
    System.setProperty("jpos.util.tracing.TurnOnAllNamedTracers", "ON");
    

    但是,小程序仍然找不到 jposxml.cfg。该文件位于小程序主 jar 文件的根目录中。我尝试将服务器放在与罐子相同的目录中。我也尝试过创建一个单独的 jar 文件,其中只包含 jposxml.cfg,但这也不起作用。我在 Java 控制台窗口中得到以下输出:

    [AbstractRegPopulator]getPopulatorFileIS(): populatorFileName=jposxml.cfg
    [JposServiceLoader]manager.getEntryRegistry().load() OK
    [AbstractRegPopulator]getPopulatorFileIS(): populatorFileName=jposxml.cfg
    

    但是 JposEntries 的列表是空的。因此小程序无法与支付终端通信。

小程序通过 JNLP 文件加载(所有需要的 jars 通过 JNLP 扩展加载)。两个 JNLP 文件都将安全设置为 。所有 jar 都使用相同的证书进行签名。相同的代码在 Eclipse 中完美运行。关于问题是什么的任何想法?

【问题讨论】:

  • 我也有同样的问题。它与尝试加载 jpos.properties 文件时尝试加载 sunrsasign.jar 有关,但该 jar 仅包含在早期的 JDK 中。知道它为什么要加载这个文件吗?

标签: applet javapos


【解决方案1】:

供遇到类似问题的人参考。

我无法获取 JavaPOS 代码来查看 jpos.properties 文件,但如上所述将值加载到系统属性中是可行的,所以我暂时坚持这样做。

要让 JavaPOS 从 URL 加载 jpos.xml 或 jposxml.cfg,您需要设置属性 jpos.config.populatorFileURL 而不是 jpos.config.populatorFile。这可以在 jpos.properties 中设置,也可以作为系统属性设置。

【讨论】:

    【解决方案2】:

    遇到同样的问题。

    JposServiceLoader 使用类路径查找路径的根。

    例如,如果应用程序的本地类路径是

    C:/myapp/target/classes
    

    那么 jpos.properties 应该是路径

    C:/myapp/target/classes/jpos/res/jpos.properties
    

    附:也许这不是放置 jpos 文件的最佳方式,但至少它是您可以从解决这个问题开始的。

    【讨论】:

      【解决方案3】:

      你有两种方法:

      1. 忽略此错误并从代码中设置属性(如前所述)

         System.setProperty("jpos.config.populatorFile", "jposxml.cfg");  
         System.setProperty("jpos.util.tracing.TurnOnNamedTracers", "JposServiceLoader,SimpleEntryRegistry,SimpleRegPopulator,XercesRegPopulator");  
         System.setProperty("jpos.util.tracing.TurnOnAllNamedTracers", "ON"); 
         System.setProperty("jpos.loader.serviceManagerClass", "jpos.loader.simple.SimpleServiceManager")
        
      2. 解压你的jposXXX.jar(通常XXX代表版本),
        将 jpos.properties 和 jpos.xml 文件添加到文件夹 jposXXX/jpos/res/,
        将文件夹 jposXXX 转换为 jar 文件
        例如通过终端中的命令jar cvf jposXXX.jar jposXXX
        将 jar 文件放入 app/libs/ 文件夹
        添加到您的 gradle 依赖项行

        implementation fileTree(dir: 'libs', include: ['*.jar'])
        享受

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-29
        • 1970-01-01
        • 2015-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多