Я создал апплет, который использует 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.
Я пробовал следующее, чтобы апплет «увидел» два файла:
jpos/res/jpos.properties уже присутствует в одном из jar-файлов, на который ссылается апплет. Тем не менее, я добавил этот файл в основную банку апплета. Я также попытался добавить его в каталог на сервере, содержащий банки (с правильным относительным путем). Ничего из этого не работает.
Я могу обойти невозможность найти jpos.properties, установив свойства System с соответствующими значениями, например так:
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/›. Все банки подписаны одним и тем же сертификатом. Тот же код отлично работает в Eclipse. Есть идеи, в чем проблема?