November 2019

S M T W T F S
      12
34 5 678 9
10111213141516
17181920212223
24252627282930

Style Credit

Expand Cut Tags

No cut tags
Tuesday, April 22nd, 2008 05:41 pm
Покажите, пожалуйста, пальцем, где у меня ошибка в ДНК. Или не у меня, а в SOAP::Lite.
А то я уже голову сломал.

Дано: простейший тестовый скрипт о пяти строчках.
#!/usr/bin/perl -w
use SOAP::Lite +trace => "debug";
my $service = SOAP::Lite
-> service('http://...');
$service->envprefix('SOAP-ENV');

my $r = $service->Version();


Во всех инструкциях написано, что вызов метода, даже неудачный, должен вернуть ссылку на SOAP::SOM, после чего можно по ней получать всякие fault, result и paramsout.

Авотфиг. Вызов проходит, я в дампе вижу, что сервер понял запрос и вернул корректный XML. А в $r возвращается скалярная единица.

Аналогичная фигня с попыткой передать в вызываемый метод ссылки на SOAP::Data, как показано в документации. Оно говорит String value expected instead of SOAP::Data reference.

А $service->call('Version') говорит, что "A service address has not been specified either by using SOAP::Lite->proxy() or a service description)", хотя в вышеуказанном явном вызове $service->Version() адрес прокси замечательно обнаруживается.

Сдаётся мне, что я не замечаю каких-то больших граблей, но каких?

P.S. libsoap-lite-perl 0.69-1 в убунте, если что.
Tags:
Wednesday, April 23rd, 2008 12:40 pm (UTC)
print Dumper($r);
дает
$VAR1 = '1';

по-моему, это типичный скаляр.
Wednesday, April 23rd, 2008 01:02 pm (UTC)
а если написать так:

my @data = $service->Version();
Wednesday, April 23rd, 2008 01:40 pm (UTC)
Спасибо, стало интереснее.
$VAR1 = '1';
$VAR2 = 'EmrSOAP 4.6.0 on SITE2-AS02';
$VAR3 = '';

Действительно, соответствует XMLному

<Result>1</Result><strVersion>EmrSOAP 4.6.0 on SITE2-AS02</strVersion><strResult></strResult>

Но почему оно не SOM, как в документации написано?
Wednesday, April 23rd, 2008 02:48 pm (UTC)
я не знаю, мне лично SOAP показался тяжеловесным, я им практически не занимался, пользовал XMLRPC для удаленных вызовов.

интересно может он на хэш еще что-то интересное вернет? %d = ..
perl ведь может определять рантайм что стоит слева и возвращать то, что требуют.
или какой глобальную переменную выставить.



Thursday, April 24th, 2008 09:41 am (UTC)
хэш получился исключительно кривой:

Odd number of elements in hash assignment at ./soaptest.pl line 23.
$VAR1 = '';
$VAR2 = undef;
$VAR3 = '1';
$VAR4 = 'EmrSOAP 4.6.0 on SITE2-AS02';