![]() |
REST-Server Aufruf ohne Parameter -> Access violation
Hallo,
ich habe einen REST-Server erstellt, über den ich eine Servermethode mit zwei Parametern definiert habe.
Delphi-Quellcode:
Aufruf über Webbrowser:
type
{$METHODINFO ON} TServerMethods1 = class(TDataModule) private { Private-Deklarationen } public { Public-Deklarationen } function KundeListe(action: string; jObject: TJSONObject): TJSONObject; end; {$METHODINFO OFF} function TServerMethods1.KundeListe(action: string; jObject: TJSONObject): TJSONObject; var s: string; begin if Assigned(jObject) then begin if not jObject.Null then begin s:=jObject.ToString; <<<-- Access violation bei Aufruf2 //... end; end; end; Aufruf1: localhost:8080/datasnap/rest/TServerMethods1/"KundeListe"/read// Aufruf2: localhost:8080/datasnap/rest/TServerMethods1/"KundeListe"/read/ Der erste Aufruf funktioniert einwandfrei. Bei dem zweiten Aufruf fehlt der zweite Parameter was dazu führt das es zum Access violation kommt. Eigenartig ist auch, dass "jObject.Null" im Debugger True anzeigt aber trotzdem in der If-Schleife rein geht. Irgendwie scheint das jObject einen undefinierten Zustand zu haben. Gibt es irgendwie eine Möglichkeit den zweiten Parameter auf Gültigkeit zu prüfen? Vielen Dank im voraus. Gruß Starsky |
AW: REST-Server Aufruf ohne Parameter -> Access violation
Wie ist toString implementiert?
|
AW: REST-Server Aufruf ohne Parameter -> Access violation
toString ist eine Function aus dem Object TJSONObject aus der Unit System.JSON
Aber auch wenn ich die Funktion jObject.Count oder jObject.Size aufrufe bekomme ich auch einen Access Violation.:cry: |
AW: REST-Server Aufruf ohne Parameter -> Access violation
Dann schau doch mal über den Debugger, wer diese Instanz erzeugt hat (durch den Callstack zurückgehen).
Da gibt irgendetwas wohl eine nicht initialisierte lokale Referenzvariable durch ;) |
AW: REST-Server Aufruf ohne Parameter -> Access violation
Liste der Anhänge anzeigen (Anzahl: 1)
Es ist eine Datasnap-Rest-Anwendung die über
den Assistenten von Delphi XE7 erstellt wurde. Der Aufruf Stack. |
AW: REST-Server Aufruf ohne Parameter -> Access violation
Du hast den Callstack gefunden :thumb:
Jetzt brauchst du nur noch dich von oben nach unten durchklicken und schauen, wer diese Instanz erzeugt (bzw. erzeugen sollte). Dann einen Breakpoint an den Anfang dieser gefundenen Methode, nochmals aufrufen und schauen, warum die Instanz nicht erzeugt wird. |
AW: REST-Server Aufruf ohne Parameter -> Access violation
Warum die Instanz/Parameter nicht erzeugt wird, weiss ich ja.
Weil der zweite Parameter im Aufruf2 nicht mitgegeben wurde (der letzte Slash fehlt im Aufruf2). Gibt es die Möglichkeit aus der ServerMethode heraus die Aufruf URL abzufragen? Wenn ich mich im Aufruf Stack durchklicke bekomme ich die CPU-Ansicht mit Assembler Quellcode:cry: |
AW: REST-Server Aufruf ohne Parameter -> Access violation
Ich denke dass ist uns allen klar, warum da keine Instanz erzeugt wird.
Unklar ist aber, warum dort ein dangling pointer übergeben wird und eben kein
Delphi-Quellcode:
.
nil
Hast du auch mit den Debug-DCU kompiliert? |
AW: REST-Server Aufruf ohne Parameter -> Access violation
Hallo,
kannst du das nicht so definieren
Delphi-Quellcode:
oder gleich
function KundeListe(action: string; jObject: TJSONObject = nil): TJSONObject;
Delphi-Quellcode:
function KundeListe(action: string = nil; jObject: TJSONObject = nil): TJSONObject;
Heiko |
AW: REST-Server Aufruf ohne Parameter -> Access violation
@Sir Rufo
Danke für den Tipp mit Debug-DCU. Dadurch konnte ich mich durch den Stack durchklicken. Allerdings sind die Routinen in System.JSON doch sehr komplex. @Heiko Die Declaration mit TJSONObject = nil hat leider nicht geholfen. Mir ist allerdings aufgefallen, dass die Variable jObject zwar gültig war aber die private Variable FMembers=nil war. Ich habe mir eine Helper Class erstellt um die private Variable auf nil zu testen und es funktioniert. Vielen Dank an alle...:-D Gruß Starsky |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:30 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz