Leser: 19
1 2 3 4 5 6 7 8 9 10 11 12 13
foreach my $param (@_) { if (@templates) { my $template = shift @templates; my ($prefix,$typename) = SOAP::Utils::splitqname($template->type); my $method = 'as_'.$typename; # TODO - if can('as_'.$typename) {...} my $result = $self->serializer->$method($param, $template->name, $template->type, $template->attr); push(@parameters, $template->value($result->[2])); } else { push(@parameters, $param); } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
foreach my $param (@_) { if (@templates) { warn "Adding parameter: $param"; my $template = shift @templates; my ($prefix,$typename) = SOAP::Utils::splitqname($template->type); my $method = 'as_'.$typename; # TODO - if can('as_'.$typename) {...} warn "Method name: $method"; my $result = $self->serializer->$method($param, $template->name, $template->type, $template->attr); push(@parameters, my$ v = $template->value($result->[2])); warn "Adding parameter with value: " . Dumper($v); } else { push(@parameters, $param); } }
2010-05-22T08:05:53 esskarhab ich mal abgeändert in
2010-05-22T13:44:41 esskarich hab das in meinem code geändert.
es sind nur debug ausgaben, die zeigen, dass SOAP::Lite den DatenTyp nicht füllt., egal was man mitgibt.
ist wohl ein problem in dem modul
2010-05-22T13:56:26 esskarBug report erzeugen oder mal den autor anschreiben.
QuoteHi,
aus dem thread werde ich leider nicht schlau - funktioniert's jetzt schon oder nicht?
Wenn nicht: Zum Fehlersuchen brauche ich die WSDL-Datei und eine Beschreibung mit welchen Schritten was (nicht) passiert.
Leider ist der SOAP::Lite Code-Generator alles andere als perfekt - ohne den generierten Code anzupassen wird's fast nie funktionieren.
Schöne Grüße,
Martin
2010-05-24T06:46:47 esskarer soll dir mal zeigen, wie man an den generierten code rankommt.
QuoteIch würde empfehlen, den Request "von Hand" zusammenzubauen:
Code: (dl )1
2
3
4
5
6
7
8
9
10
11
12
13
14
15use SOAP::Lite +trace;
my $soap = SOAP::Lite->new();
$soap->proxy('http://dev.iban-bic.com/Riban/soap2/');
my @params = (
SOAP::Data->name('params')->value(
\SOAP::Data->name('item')->value([
SOAP::Data->name('key')->value('country'),
SOAP::Data->name('value')->value('DE'),
])
),
SOAP::Data->name('user')->value('foo'),
SOAP::Data->name('password')->value('bar')
);
my $result = $soap->call('get_form', @params);
Das liefert wenigstens ein Ergebnis.
Zu beachten für weiter
- die meisten SOAP::Lite-Objekte (wie SOAP::Data) haben automatische
Konstruktoren und geben immer $self zurück. D.h.
my $param = SOAP::Data->name('foo')->value('bar)
ist das gleiche wie
my $param = SOAP::Data->new();
$param->name('foo');
$param->value('bar');
... fand der ursprüngliche Autor damals cool.
- Der Parameter für SOAP::Data->value($param) muss immer eine
Referenz sein - entweder eine Array-Referenz [] oder eine Referenz auf
ein Objekt (daher die komische Schreibweise \SOAP::Data->name(...)
oben).
QuoteNaja, auf jeden Fall funktioniert es ;)