Подстановочные знаки в файле шаблона jnlp

95
12

Со времени последних изменений безопасности в Java 7u40 требуется подписать JNLP файл. Это можно сделать, добавив конечный JNLP в JNLP-INF/APPLICATION.JNLP или предоставив шаблон JNLP в JNLP-INF/APPLICATION_TEMPLATE.JNLP в подписанном главная банка.


Первый способ работает хорошо, но мы хотели бы разрешить передавать ранее неизвестное количество аргументов времени выполнения в наше приложение.


Поэтому наш APPLICATION_TEMPLATE.JNLP выглядит следующим образом:


<?xml version="1.0" encoding="UTF-8"?>
<jnlp codebase="*">
<information>
<title>...</title>
<vendor>...</vendor>
<description>...</description>
<offline-allowed />
</information>
<security>
<all-permissions/>
</security>
<resources>
<java version="1.7+" href="http://java.sun.com/products/autodl/j2se" />
<jar href="launcher/launcher.jar" main="true"/>
<property name="jnlp...." value="*" />
<property name="jnlp..." value="*" />
</resources>
<application-desc main-class="...">
*
</application-desc>
</jnlp>

Проблема заключается в * внутри тега application-desc.


Можно подстановить фиксированное количество аргументов, используя несколько тегов аргументов (см. код ниже), но тогда невозможно предоставить более или менее аргументы для приложения (Java Webstart не запускается с пустым тегом аргумента).


    <application-desc main-class="...">
<argument>*</argument>
<argument>*</argument>
<argument>*</argument>
</application-desc>

Помогает ли кто-нибудь подтвердить эту проблему и/или имеет решение для передачи ранее undefined количества аргументов времени выполнения в приложение Java?


Спасибо, много!

спросил(а) 2020-04-04T01:35:04+03:00 3 месяца назад
1
Решение
117

Из того, что я вижу после прочтения спецификации JNLP 7, кажется, что вы не можете сделать. Звездочка может представлять только текстовые данные, а не несколько элементов XML.


В вашей ситуации я бы сделал метод main способным выполнять собственный анализ одного аргумента, поэтому его можно рассматривать как несколько значений, используя специальный разделитель. Что-то вроде этого:


public static void main(String[] args) {
if (args.length == 2 && args[0].equals("--args")) {
args = args[1].split(";;");
}

// Continue as normal
}


Это позволяет шаблону содержать:

<application-desc main-class="com.example.app.Main">
<argument>--args</argument>
<argument>*</argument>
</application-desc>

И ваш фактический .jnlp файл может содержать что-то вроде:


<application-desc main-class="com.example.app.Main">
<argument>--args</argument>
<argument>files.txt;;29;;true;;1384212567908</argument>
</application-desc>

ответил(а) 2020-04-04T01:52:43.654634+03:00 3 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема