AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke REST-Server Aufruf ohne Parameter -> Access violation
Thema durchsuchen
Ansicht
Themen-Optionen

REST-Server Aufruf ohne Parameter -> Access violation

Ein Thema von Starsky911 · begonnen am 16. Feb 2016 · letzter Beitrag vom 17. Feb 2016
Antwort Antwort
Starsky911

Registriert seit: 8. Feb 2008
Ort: Bremen
96 Beiträge
 
Delphi 11 Alexandria
 
#1

REST-Server Aufruf ohne Parameter -> Access violation

  Alt 16. Feb 2016, 11:47
Hallo,

ich habe einen REST-Server erstellt, über den ich eine Servermethode mit zwei
Parametern definiert habe.

Delphi-Quellcode:
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;
Aufruf über Webbrowser:

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
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: REST-Server Aufruf ohne Parameter -> Access violation

  Alt 16. Feb 2016, 12:01
Wie ist toString implementiert?
Markus Kinzler
  Mit Zitat antworten Zitat
Starsky911

Registriert seit: 8. Feb 2008
Ort: Bremen
96 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: REST-Server Aufruf ohne Parameter -> Access violation

  Alt 16. Feb 2016, 12:58
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.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: REST-Server Aufruf ohne Parameter -> Access violation

  Alt 16. Feb 2016, 13:11
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Starsky911

Registriert seit: 8. Feb 2008
Ort: Bremen
96 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: REST-Server Aufruf ohne Parameter -> Access violation

  Alt 16. Feb 2016, 13:51
Es ist eine Datasnap-Rest-Anwendung die über
den Assistenten von Delphi XE7 erstellt wurde.
Der Aufruf Stack.
Miniaturansicht angehängter Grafiken
aufrufstack.png  
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: REST-Server Aufruf ohne Parameter -> Access violation

  Alt 16. Feb 2016, 14:39
Du hast den Callstack gefunden

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.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Starsky911

Registriert seit: 8. Feb 2008
Ort: Bremen
96 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: REST-Server Aufruf ohne Parameter -> Access violation

  Alt 16. Feb 2016, 15:15
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: REST-Server Aufruf ohne Parameter -> Access violation

  Alt 16. Feb 2016, 15:22
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 nil .

Hast du auch mit den Debug-DCU kompiliert?
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: REST-Server Aufruf ohne Parameter -> Access violation

  Alt 17. Feb 2016, 00:09
Hallo,

kannst du das nicht so definieren

function KundeListe(action: string; jObject: TJSONObject = nil): TJSONObject; oder gleich
function KundeListe(action: string = nil; jObject: TJSONObject = nil): TJSONObject;
Heiko
Heiko
  Mit Zitat antworten Zitat
Starsky911

Registriert seit: 8. Feb 2008
Ort: Bremen
96 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: REST-Server Aufruf ohne Parameter -> Access violation

  Alt 17. Feb 2016, 11:25
@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...

Gruß
Starsky
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz