我创建了一个小程序,它使用 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 注册表中没有加载任何条目。
我尝试了以下方法让小程序“看到”这两个文件:
jpos/res/jpos.properties 已经存在于applet 引用的其中一个jar 中。不过,我已将此文件添加到小程序的主 jar 中。我还尝试将它添加到包含 jars 的服务器上的目录中(使用正确的相对路径)。这些都不起作用。
我可以通过使用适当的值设置系统属性来解决无法找到 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 中完美运行。关于问题是什么的任何想法?