2013-11-09 14 views
5

Vì những thay đổi bảo mật cuối cùng trong Java 7u40, cần phải ký một tệp JNLP. Điều này có thể được thực hiện bằng cách thêm JNLP cuối cùng trong JNLP-INF/APPLICATION.JNLP hoặc bằng cách cung cấp mẫu JNLP trong JNLP-INF/APPLICATION_TEMPLATE.JNLP trong bình chính đã ký.Ký tự đại diện trong tệp mẫu jnlp

Cách đầu tiên hoạt động tốt, nhưng chúng tôi muốn cho phép chuyển số lượng đối số thời gian chạy chưa biết trước đó đến ứng dụng của chúng tôi.

Do đó, chúng tôi APPLICATION_TEMPLATE.JNLP trông như thế này:

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

Vấn đề là * bên trong ứng dụng desc thẻ. Có thể ký tự đại diện cho một số đối số cố định bằng cách sử dụng nhiều đối số đối số (xem mã bên dưới), nhưng sau đó không thể cung cấp nhiều hoặc ít đối số cho ứng dụng (Java Webstart sẽ không bắt đầu bằng trống đối số thẻ).

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

Có ai có thể xác nhận vấn đề này và/hoặc có giải pháp để vượt qua số đối số thời gian chạy không xác định trước đó đối với ứng dụng Java không?

Cảm ơn rất nhiều!

Trả lời

8

Từ những gì tôi có thể thấy sau khi đọc đặc tả JNLP 7, nó xuất hiện những gì bạn muốn không thể thực hiện được. Dấu sao chỉ có thể đại diện cho dữ liệu văn bản, không phải nhiều phần tử XML.

Trong trường hợp của bạn, tôi sẽ làm phương pháp main có khả năng thực hiện phân tích cú pháp riêng của một đối số duy nhất để nó có thể được coi là nhiều giá trị, sử dụng dấu phân tách tùy chỉnh. Một cái gì đó như thế này:

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

    // Continue as normal 
} 

Điều này cho phép các mẫu để chứa:

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

Và file .jnlp thực tế của bạn có thể chứa một cái gì đó như:

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

Bạn nói đúng đây là một giải pháp có thể có, và nếu thực sự không có cách nào chỉ có JNLP, tôi sẽ sử dụng giải pháp của bạn cho việc này. Cám ơn! – Andy

Các vấn đề liên quan