2008-12-08 8 views
0

Dans notre projet, le webservice Java communique avec le programme backend écrit en C et Perl. Nous utilisons le ProcessBuild pour exécuter un travail backend (UNIX) FrameworkHandler.Pourquoi mon webservice Java ne peut-il pas parler à mon serveur Perl?

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

FrameworkHandler invoque un script Perl pour effectuer une action. Le script Perl interne une commande diff entre deux fichiers XML et utilise la fonction d'impression pour imprimer l'erreur:

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

Chaque fois qu'il ya une différence entre les fichiers du programme Perl se bloque dans la fonction print_error. Si nous exécutons le programme Perl dans le shell UNIX, cela fonctionne sans aucun problème. Mais si nous exécutons Perl via le webservice, il ne revient pas après la commande diff. Pour cette raison, le service Web ne renvoie pas non plus la réponse. Si les symboles supérieurs à (>) dans les balises XML créent un problème?

Toute aide est très appréciée.

Partie d'erreur:


< 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> 

Merci, Mathew Liju

+0

Ceci est un doublon. Des réponses encore meilleures peuvent être trouvées à l'autre incarnation de cette question: http://stackoverflow.com/questions/355311/why-cant-my-java-program-read-perls-stderr – innaM

Répondre

3

The API docs disent:

« Parce que certaines plates-formes natives ne fournissent que la taille de la mémoire tampon limitée pour l'entrée standard et les flux de sortie, l'échec d'écrire rapidement le i flux d'entrée ou lire le flux de sortie du sous-processus peut provoquer le sous-processus à bloquer, et même blocage. "

Êtes-vous conforme?

+0

Non, nous ne sommes pas conformes. Nous prévoyons de lire le stdout dans un thread et stderr dans un autre thread. D'autres suggestions pour surmonter cela? –

Questions connexes