【问题标题】:Wildcards in jnlp template filejnlp 模板文件中的通配符
【发布时间】:2013-11-21 21:46:25
【问题描述】:

自从 Java 7u40 中的最后一次安全更改以来,需要对 JNLP 文件进行签名。这可以通过在 JNLP-INF/APPLICATION.JNLP 中添加最终的 JNLP 来完成,或者通过在签名的 JNLP-INF/APPLICATION_TEMPLATE.JNLP 中提供模板 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 标签内的 *。

可以使用多个 argument 标记来通配固定数量的参数(参见下面的代码),但是不能为应用程序提供更多或更少的参数(Java Webstart 不会以一个空的 argument 标签开始)。

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

是否有人可以确认这个问题和/或有解决方案来将以前未定义数量的运行时参数传递给 Java 应用程序?

非常感谢!

【问题讨论】:

    标签: java security templates wildcard jnlp


    【解决方案1】:

    从我在阅读 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>
    

    【讨论】:

    • 你是对的,这是一种可能的解决方法,如果真的没有 JNLP-only 方法,我将使用你的解决方案。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-21
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多