2

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

在 Eclipse IDE 中运行时,applet 可以正常工作,但在浏览器中运行时就不行了。在浏览器中,小程序似乎找不到 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 已经存在于applet 引用的其中一个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 文件加载(所有需要的 jar 文件通过 JNLP 扩展)。两个 JNLP 文件都将安全设置为 <all-permissions/>。所有 jar 都使用相同的证书进行签名。相同的代码在 Eclipse 中完美运行。关于问题是什么的任何想法?

4

3 回答 3

5

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

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

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

于 2012-04-11T09:27:29.107 回答
0

面临同样的问题。

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

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

C:/myapp/target/classes

那么 jpos.properties 应该是路径

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

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

于 2017-11-30T12:35:59.530 回答
0

你有两种方法:

  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'])
    请享用

于 2022-01-06T15:56:51.787 回答