Я работаю с примером клиент-серверного кода SOAP с использованием SOAP :: Transport :: HTTP: Daemon и SOAP :: Lite, и я заметил, что не могу получить доступ к переменной экземпляра, объявленной в методе new () объекта , Я уверен, что делаю что-то не так, но я не уверен, что (хотя прошло много лет с тех пор, как я был приличным программистом на Perl).
Вот мой сервер:
#! /usr/bin/env perl
use lib '/a/valid/directory/modules';
use SOAP::Transport::HTTP;
my $port = 9810;
my $dispatchers = {
'urn:remote_call' => 'ExampleLibrary::MyExample'
};
my $daemon = SOAP::Transport::HTTP::Daemon
-> new (LocalAddr => 'localhost', LocalPort => $port)
-> dispatch_with($dispatchers)
-> on_action(sub {return})
;
print "Connect to SOAP server at ", $daemon->url, "\n";
$daemon->handle;
Вот мой клиент (находится в каталоге, указанном в строке lib использования сервера, modules / ExampleLibrary / MyExample.pm):
package ExampleLibrary::MyExample;
use vars qw(@ISA);
@ISA = qw(Exporter SOAP::Server::Parameters);
use SOAP::Lite;
sub new {
my($class, %args) = @_;
my $self = bless({}, $class);
$self->{somevar} = 'somedata';
return $self;
}
sub remote_call {
my $self = shift;
my $envelope = pop;
# Swap out return statements and the data is returned correctly
# return SOAP::Data->type('xml' => 'foo');
return SOAP::Data->type('xml' => "$self->{somevar}");
}
1;
Я уверен, что правильно нажимаю на клиента - я могу вставить статический текст в оператор return remote_call (закомментированный код) и увидеть его - но данные объекта указаны как $ self -> {somevar } никогда не отображается, с кавычками или без них. (Я использую SoapUI, чтобы поразить сервер.)
Кто-нибудь видит, чего мне не хватает? (О, я использую Perl v5.10.1 на Cygwin.)
Спасибо ...