Thread SOAP Response: mehere Knoten mit gleichem Namen (9 answers)
Opened by einfach at 2006-09-14 16:28

einfach
 2006-09-14 16:28
#28631 #28631
User since
2006-09-14
6 Artikel
BenutzerIn
[default_avatar]
Hallo zusammen,

Ersteinmal: ich bin relativ neu in Perl und Web Services inkl. SOAP... also seid nachsichtig ;-)

Ich benutze SOAP::Lite um bei einem Web Service einen Request abzusetzen. Ich erhalte die Nachricht auch und kann (fast) alles, was ich benötige auslesen.
Allerdings gibt es einen Konten in der Response, der mehrere Knoten mit gleichem Bezeichner beinhaltet. Dass diese auf jeden Fall da sein sollten sehe ich, da ich das debugging des HTTP-Verkehrs eingeschaltet habe und somit Request und Response sehen kann. Die Knoten sind also da! Nach dem Deserialisieren befindet sich von diesen Knoten allerdings immer nur mehr der letzte in meinem Result. Er nimmt also immer nur genau einen von diesen Knoten, die den gleichen bezeichner haben.

Zur Veranschaulichung hier die Response:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<RouteShipmentResponse xmlns="http://xlogics.pl/xpack/webservices">
<RouteShipmentResult>false</RouteShipmentResult>
<aRoutingData>
<RoutingCode />
<RoutingCodeData />
</aRoutingData>
<aAddressCorrectionInfo>
<CorrectedName />
<CorrectedZIP />
<CorrectedCity />
<CorrectedDistrict />
<CorrectedStreet />

<Streets>
<string>Promenade</string>
<string>Promenadenstr.</string>
</Streets>

<Cities><string /></Cities>
<Districts><string /></Districts>
<ZIPs><string /></ZIPs>
</aAddressCorrectionInfo>
<aErrorMessage />
</RouteShipmentResponse>
</soap:Body>
</soap:Envelope>


Es handelt sich um den Bereich, den ich hervorgehoben habe: Streets.
in meinem Perlcode mache ich u.a. folgendes:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
[..blablabla..]

my ($som) = $service->call($method => @params, $envHeader);

[..blablabla..]

printf "\nStreets: ";
foreach $street ($som->valueof('//Streets')) {
printf "\n\t%s", $street->{string};
}


und die Ausgabe ist folgende:

Quote
Streets:
Promenadenstr.


Ich habe mir mittels Debugger auch den Inhalt von $som und von $som->result angeschaut und da war wirklich nur dieser eine String drin. Es muss also schon etwas beim Deserialisieren anders gelaufen sein, als ich es gerne gehabt hätte...

Kann mir da jmd. was raten? Ist das ein Bug? Or a feature? :-D

Gruß, Christophe :blush:

View full thread SOAP Response: mehere Knoten mit gleichem Namen