2013-12-06 2 views
1

Я выполняю эту задачу как часть более крупной цели в скрипте Ant. Он выполняет команду в командной строке Windows и перенаправляет вывод в текстовый файл в каталоге temp. Я изменил аргумент URL для защиты конфиденциальной информации.Задача Ant exec с использованием cURL для POST тела JSON не работает, идентичная команда работает вручную в командной строке Windows

<exec executable="cf.cmd" output="${java.io.tmpdir}/cmd_out.txt" failonerror="true" vmlauncher="false"> 
    <arg value="curl" /> 
    <arg value="POST" /> 
    <arg value="http://www.google.com/v2/routes" /> 
    <arg value="--body" /> 
    <arg value="&#39;{&quot;host&quot;: &quot;${old.app.name}&quot;, &quot;domain_guid&quot;: &quot;${domain.guid}&quot;, &quot;space_guid&quot;: &quot;${space.guid}&quot;}&#39;" /> 
</exec> 

Из подробных журналов Ant, эта задача производит следующую команду:

Current OS is Windows 7 
[exec] Output redirected to C:\Users\foo\AppData\Local\Temp\cmd_out.txt 
[exec] Executing 'cf' with arguments: 
[exec] 'curl' 
[exec] 'POST' 
[exec] 'http://www.google.com/v2/routes' 
[exec] '--body' 
[exec] ''{"host": "foo", "domain_guid": "4cc4c9b0-5b87-40f5-8ecc-6d6347a3236d", "space_guid": "6c3338e2-422d-46c0-a901-eda41b1fd968"}'' 
[exec] 
[exec] The ' characters around the executable and arguments are 
[exec] not part of the command. 

При запуске эта задача производит следующий вывод в cmd_out.txt:

{ 
    "code": 1001, 
    "description": "Request invalid due to parse error: lexical error: invalid char in json text.\n          {host: foo, domain_guid\n      (right here) ------^\n 
    "error_code": "CF-MessageParseError 
    "types": [ 
    "MessageParseError 
    "Error" 
    ], 
    "backtrace": [] 
} 

Однако, если Я выполняю эту идентичную команду вручную в командной строке Windows:

cf curl POST http://www.google.com/v2/routes --body '{"host": "foo", "domain_guid": "4cc4c9b0-5b87-40f5-8ecc-6d6347a3236d", "space_guid": "6c3338e2-422d-46c0-a901-eda41b1fd968"}' 

Затем я получаю правильный результат. Нет смысла публиковать его здесь, но это сообщение об успешной работе вместо сообщения об ошибке с ошибкой.

Если я запускаю эту команду в руководстве командной строки Windows (обратите внимание на отсутствие одинарных кавычек вокруг тела JSON), то я получаю ту же ошибку, как Ant скрипт:

cf curl POST http://www.google.com/v2/routes --body {"host": "foo", "domain_guid": "4cc4c9b0-5b87-40f5-8ecc-6d6347a3236d", "space_guid": "6c3338e2-422d-46c0-a901-eda41b1fd968"} 

Я в потеря здесь. Из того, что я вижу, Ant выполняет ту же команду, что и я, вручную. Однако версия Ant не удалась, и версия для руководства преуспела. Может ли кто-нибудь увидеть, что я делаю неправильно?

ответ

2

Похоже, что пространства вызывают проблему. Изменение EXEC задания следующих больших работ:

<exec executable="cf.cmd" output="${java.io.tmpdir}/cmd_out.txt" failonerror="true" vmlauncher="false"> 
    <arg value="curl" /> 
    <arg value="POST" /> 
    <arg value="http://www.google.com/v2/routes" /> 
    <arg value="--body" /> 
    <arg value="&apos;{&quot;host&quot;:&quot;${old.app.name}&quot;,&quot;domain_guid&quot;:&quot;${domain.guid}&quot;,&quot;space_guid&quot;:&quot;${space.guid}&quot;}&apos;" /> 
</exec> 
+0

Я также использовал «'» для одинарных кавычек вместо шестигранного представления, но я не думаю, что имеет значение. – NDGibson

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