Почему мой веб-сервис Java не может общаться с моим бэкэндом Perl? - PullRequest
0 голосов
/ 08 декабря 2008

В нашем проекте веб-сервис Java взаимодействует с бэкэнд-программой, написанной на C и Perl для обработки. Мы используем ProcessBuilder для выполнения внутреннего (UNIX) задания FrameworkHandler.

ProcessBuilder process;
process.Start(FrameworkHandler -a ACTION)

FrameworkHandler вызывает скрипт Perl для выполнения какого-либо действия. Сценарий Perl внутренне выполняет команду diff между двумя файлами XML и использует функцию печати для вывода ошибки:

sub print_error
{
    $err_msg = shift;
    print STDERR "$err_msg\n";
}

Всякий раз, когда между файлами есть разница, программа Perl зависает в функции print_error. Если мы выполняем программу Perl в оболочке UNIX, она работает без каких-либо проблем. Но если мы выполняем Perl через веб-сервис, он не возвращается после команды diff. В связи с этим веб-сервис также не возвращает ответ. Создают ли проблему символы «больше» (>) в тегах XML?

Любая помощь очень ценится.

Часть ошибки:


< diff -udr --new-file --label=postProcess1 --label=postProcess2 postProcess1 postProcess2
< --- postProcess1
< +++ postProcess2
< @@ -124,6 +124,36 @@
<               <LOCATION></LOCATION>
<               <ADDRESS_PART1>Test Address ^D</ADDRESS_PART1 >
<         </address_details>
< +       <address_details>
< +             <CITY></CITY>
< +             <STATE>12</STATE>

Спасибо, Мэтью Лию

1 Ответ

3 голосов
/ 08 декабря 2008

Документы API говорят:

«Поскольку некоторые собственные платформы предоставляют ограниченный размер буфера только для стандартных входных и выходных потоков, невозможность оперативной записи входного потока или чтения выходного потока подпроцесса может привести к блокировке подпроцесса и даже к взаимной блокировке».

Вы соответствуете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...