Ich beschäftige mich jetzt zum ersten mal mit den Webservices in Delphi.
Dabei habe ich eine
wsdl-Datei bekommen, die ich in Delphi importiert habe.
Nachdem ich alles soweit hatte und den ersten Test gemacht habe, flog mir das Delphi-Programm um
die Ohren.
Meldung :
Zugriffsverletzung bei Adresse 00492069 in Modul 'WS_Test.exe'. Lesen von Adresse 00000000.
Nach langem suchen und debuggen bin ich auf das Problem gestoßen.
Und zwar ist eines der Rückgabe folgende:
<shipmentDate xsi:nil="true" xmlns="http://....." />
Hier wird ein Datumswert erwartet, der unter anderem so aussehen könnte:
<shipmentDate xmlns="http://.....">2006-04-16T09:02:50.665Z</shipmentDate>
Da aber nil übergeben wird, bekomme ich eine
exception in xsBuiltIns.pas
Delphi-Quellcode:
procedure TXSDateTime.XSToNative(Value: WideString);
var
BaseDate: TXSBaseDateTime;
begin
BaseDate := GetBaseDateTime(Value);
// <-- Hier entsteht die exception, da Value = '' ist
try
FDateTime := Value;
finally
BaseDate.Free;
end;
end;
Das ist Problemnummer 1
Hier das zweite Problem:
Es werden auch boolsche Werte übergeben.
Nach dem importieren der
wsdl-Datei hat Delphi mir eigenständig ein Objekt generiert.
Unter anderem hat Delphi folgenden Eintrag gemacht:
property rueckrufAktion: Boolean read FrueckrufAktion write FrueckrufAktion;
Die Rückgabe in der Form eines
xml-Doc sieht so aus:
<rueckrufAktion xmlns="http://....">0</rueckrufAktion>
Hier kommt es ebenfalls zu einer Fehlermeldung:
Ungültiges Eigenschaftselement: 0
Ändere ich den von Delphi generierten Code in
property rueckrufAktion: WideString read FrueckrufAktion write FrueckrufAktion;
um, dann kann ich ohne Fehler den Wert auslesen.
Meine Fragen:
Warum generiert mir Delphi eine boolsche Variable, wenn es beim Füllen zu einer Fehlermeldung führt?
Handelt es sich hierbei um einen Bug?
Was mache ich mit der Umsetzung des Datumswertes?
Ist es ein Fehler in Delphi?
Hat jemand schon das Problem gehabt?
Wie wurde das Problem gelöst?