2013-11-09 27 views
5

Od czasu ostatniej zmiany zabezpieczeń w Javie 7u40 wymagane jest podpisanie pliku JNLP. Można to zrobić, dodając ostateczny JNLP w JNLP-INF/APPLICATION.JNLP lub dostarczając szablon JNLP w JNLP-INF/APPLICATION_TEMPLATE.JNLP w podpisanym jarku głównym.Symbole wieloznaczne w pliku szablonu jnlp

Pierwszy sposób działa dobrze, ale chcielibyśmy zezwolić na przekazanie do naszej aplikacji nieznanej wcześniej liczby argumentów runtime.

Dlatego nasza APPLICATION_TEMPLATE.JNLP wygląda następująco:

<?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> 

Problemem jest * wewnątrz aplikacji malejąco tagu.

Możliwe jest wprowadzenie wieloznacznej liczby argumentów przy użyciu wielu zmiennych (patrz poniższy kod), ale nie jest możliwe podanie większej lub mniejszej liczby argumentów do aplikacji (Java Webstart nie rozpocznie się od pustej argument tag).

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

Czy ktoś może potwierdzić ten problem i/lub ma rozwiązanie dla przechodząc wcześniej undefined, liczbę argumentów uruchomieniowych do aplikacji Java?

Wielkie dzięki!

Odpowiedz

8

Z tego, co widzę po przeczytaniu specyfikacji JNLP 7, wynika, że ​​tego, czego się chce, nie da się zrobić. Gwiazdka może reprezentować tylko dane tekstowe, a nie wiele elementów XML.

W Twojej sytuacji uczyniłbym metodę main zdolną do samodzielnego analizowania pojedynczego argumentu, aby mogła być traktowana jako wiele wartości przy użyciu niestandardowego separatora. Coś takiego:

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

    // Continue as normal 
} 

Pozwala to szablon zawiera:

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

i twój rzeczywisty plik .jnlp może zawierać coś takiego:

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

Masz rację to jest możliwe obejście tego problemu, a jeśli naprawdę nie ma mowy o JNLP, wykorzystam do tego twoje rozwiązanie. Dzięki! – Andy

Powiązane problemy