2016-11-03 3 views
0

Я создал приложение Java Webstart, которое должно получить параметр Base64 в качестве аргумента командной строки.Передача строки Base64 в качестве опции для парсера Apache Commons-CLI

Я использую Apache Common-CLI для анализа аргументов из JNLP. Есть только два аргумента, один из которых - JSON, и внутри этого JSON есть строка Base64.

Проблема заключается в том, что строка Base64 заполняется в конце символом «=» (равным знаком char/equal), и синтаксический анализатор испытывает трудности с распознаванием строки как части аргумента, вместо этого пытается оценить значение «= «как разделитель ключевых значений для аргумента, и это затмевает следующее исключение: 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> 

Когда я изменить «=» в «а» на обоих хешей , синтаксический анализатор работает как ожидалось (но теперь у опции есть недействительный Base64, конечно).

+0

Вы можете включать в себя код, который показывает, как вы на самом деле использовать Обще-кли здесь? – centic

+0

Hi @centic только что добавил код. Пожалуйста, дайте мне знать, если вам нужна дополнительная информация. – strangedata

+0

Я попытался воспроизвести это, но не мог, но вы могли бы попытаться использовать одиночную кавычку в JSON, чтобы избежать CLI от выполнения некоторых цитирования/разбора здесь. В противном случае я попытался бы использовать знак равенства вместо пустого, как в '-appletBehaviourConfigJSON = {...' – centic

ответ

0

Кажется, что commons-cli не обрабатывает пробелы между именем и значением для параметров так же, как знак равенства.

Поэтому старайтесь использовать знак равенства вместо пустой, как в

-appletBehaviourConfigJSON={... 
+0

Это сделало, спасибо. – strangedata

 Смежные вопросы

  • Нет связанных вопросов^_^