Апплет Java не может найти файлы конфигурации JavaPOS

Я создал апплет, который использует 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-файлов, на который ссылается апплет. Тем не менее, я добавил этот файл в основную банку апплета. Я также попытался добавить его в каталог на сервере, содержащий банки (с правильным относительным путем). Ничего из этого не работает.

  2. Я могу обойти невозможность найти 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. Есть идеи, в чем проблема?


person Douglas Dubier    schedule 03.04.2012    source источник
comment
У меня такая же проблема. Это связано с попыткой загрузить sunrsasign.jar при попытке загрузить файл jpos.properties, но этот jar включен только в более ранний JDK. Любая идея, почему он пытается загрузить этот файл?   -  person Edwin Evans    schedule 04.07.2013


Ответы (2)


Это для справки для тех, кто сталкивается с подобной проблемой.

Мне не удалось заставить код JavaPOS увидеть файл jpos.properties, но загрузка значений в системные свойства, как описано выше, работает, поэтому я пока останусь на этом.

Чтобы JavaPOS загружал jpos.xml или jposxml.cfg из URL-адреса, вам необходимо установить свойство jpos.config.populatorFileURL, а не jpos.config.populatorFile. Это можно установить либо в jpos.properties, либо в качестве системного свойства.

person Douglas Dubier    schedule 11.04.2012

Столкнулся с такой же проблемой.

JposServiceLoader использует classpath для поиска корня пути.

Например, если локальный путь к классам для приложения

C:/myapp/target/classes

тогда jpos.properties должен быть по пути

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

P.S. Возможно, это не лучший способ размещения файлов jpos, но, по крайней мере, вы можете начать с решения этой проблемы.

person Alexo Po.    schedule 30.11.2017