Покажите, пожалуйста, пальцем, где у меня ошибка в ДНК. Или не у меня, а в SOAP::Lite.
А то я уже голову сломал.
Дано: простейший тестовый скрипт о пяти строчках.
Во всех инструкциях написано, что вызов метода, даже неудачный, должен вернуть ссылку на 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 в убунте, если что.
А то я уже голову сломал.
Дано: простейший тестовый скрипт о пяти строчках.
#!/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 в убунте, если что.
no subject
Я SOAP::Lite давно использую и мои методы всегда возвращали скалярные величины. Может, они что-то переделали и в 0.69-1 этого нету?
Сдаётся мне, что я не замечаю каких-то больших граблей, но каких?
SOAP::Lite - это вообще одни большие грабли, без чтения исходников их логику не всегда можно понять.
no subject
и потом, может, я как-то неправильно понимаю, чтО тут нарисовано?
http://guide.soaplite.com/#error%20handling
http://guide.soaplite.com/#writing%20a%20client - конкретно вот тут: http://guide.soaplite.com/hibyeout.pl_
Ну и, собственно, из perldoc SOAP::SOM от конкретно установленной у меня на машине версии:
SOAP::SOM objects are returned by a SOAP::Lite call in a client context. For example:
my $client = SOAP::Lite
->readable(1)
->uri($NS)
->proxy($HOST)
$som = $client->someMethod();
no subject
print $soap -> chpass(...) -> result();Через переменную, как my $r у тебя, никогда не пробовал.
Но ты вроде все правильно делаешь.
Насчет $service->call
$soap = SOAP::Lite -> uri('system') -> proxy('tcp://'.$server.':'.@conn_to[1]);Для HTTP синтаксис скорее всего немного другой.
no subject
no subject
дает
$VAR1 = '1';
по-моему, это типичный скаляр.
no subject
my @data = $service->Version();
no subject
$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, как в документации написано?
no subject
интересно может он на хэш еще что-то интересное вернет? %d = ..
perl ведь может определять рантайм что стоит слева и возвращать то, что требуют.
или какой глобальную переменную выставить.
no subject
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';
no subject