0

コマンドライン引数として Base64 パラメーターを受け取る必要がある Java webstart アプリケーションを作成しました。

Apache Common-CLI を使用して、JNLP 内から引数を解析しています。引数は 2 つだけで、そのうちの 1 つは JSON で、この JSON 内には Base64 文字列があります。

問題は、Base64 文字列の最後に「=」(等号/等号) が埋め込まれており、パーサーが文字列を引数の一部として認識できず、代わりに「=」をキーとして評価しようとすることです。引数の =value 区切り記号であり、次の例外が発生します。 org.apache.commons.cli.UnrecognizedOptionException: Unrecognized option

この文字をエスケープする方法、またはパーサーに無視させる方法はありますか?

CLI オプションは、次のコードを使用して構築されます。

Option appletBehaviourConfigJSONOption = Option.builder("J")
            .longOpt("appletBehaviourConfigJSON")
            .hasArg()
            .argName("JSON")
            .desc("JSON config")
            .build();
clioptions.addOption(appletBehaviourConfigJSONOption);

CommandLineParser cliparser = new DefaultParser();
CommandLine cmd = null;
try {
    cmd = cliparser.parse(clioptions, args);
} catch (ParseException e) {
    e.printStackTrace();
}

そして、JNLP から呼び出されています。

<argument>-appletBehaviourConfigJSON { "appletBehaviourSignatureType": "HASH", "appletBehaviourHashList": [{"id": "1234", "hash": "ZjQzZDM1NTJiYzBhYmZmMDBlNTc0NjIyZDExMDhhM2Y5MmVlOWJjZAo="}, {"id": "5678", "hash": "ZjQzZDM1NTJiYzBhYmZmMDBlNTc0NjIyZDExMDhhM2Y5MmVlOWJjZAo="}], "appletBehaviourCookies": [{"name": "JSESSIONID", "value": "2edee5627c84937f707bdd390b1c"}, {"name": "STICKY", "value": "ASD123213123adsf"}], "appletBehaviourPostURL": "http://example.org", "stampSelection": "WHITE", "setStampAll": true}</argument>

両方のハッシュで「=」を「a」に変更すると、パーサーは期待どおりに機能します (ただし、オプションにはもちろん無効な Base64 が含まれています)。

4

1 に答える 1

0

commons-cli は、オプションの名前と値の間の空白を等号と同じように処理しないようです。

したがって、次のように空白の代わりに等号を使用してみてください

-appletBehaviourConfigJSON={...
于 2016-11-08T21:17:09.657 に答える