У меня проблема с передачей строкового аргумента с использованием Perl.Следующий код
#!/usr/bin/perl -w
use SOAP::Lite;
my $service = SOAP::Lite->service('http://localhost:8080/greeting?wsdl');
print $service->greetClient('perl wooooo'), "\n";
Результат
Приветствие null !Хорошего дня ...
Аналогичный код Python
from suds.client import Client
client = Client('http://localhost:8080/greeting?wsdl')
print client.service.greetClient('python wooooo')
отлично работает
Приветствие python wooooo !Хорошего дня ...
Я пытался установить разные кодировки
print $service->encoding('utf-8')->greetClient("perl wooooo"), "\n";
с тем же результатом.
Монитор SOAP показывает, что нетarg0 в случае Perl
<greetClient xsi:nil="true" xsi:type="tns:greetClient" />
, который присутствует в случае Python
<ns0:greetClient>
<arg0>python wooooo</arg0>
</ns0:greetClient>
В чем может быть проблема?
Почему это так сложно реализоватьSOAP-клиент с Perl по сравнению с Python?
РЕДАКТИРОВАТЬ: РЕШЕНИЕ
Наконец следующее решение работает
#!/usr/bin/perl -w
use strict;
use warnings;
use XML::Compile::SOAP11;
use XML::Compile::WSDL11;
use XML::Compile::Transport::SOAPHTTP;
my $soap = XML::Compile::WSDL11->new('c:/temp/greeting.wsdl');
my $call = $soap->compileClient('greetClient');
print $call->(arg0 => 'perl wooooo'){'greetClientResponse'}{'return'}, "\n";