Entwickler-Ecke

Internet / Netzwerk - Parameterübergabe an Datasnap REST-Server


Obl - Di 21.08.12 14:53
Titel: Parameterübergabe an Datasnap REST-Server
Hallo zusammen,

wir evaluieren gerade die Verwendung eines Datasnap-REST-Servers innerhalb des Unternehmens. Dieser soll unter anderem mit einem Java-Client und Jersey angebunden werden.
Nun ist uns hier ein Bug(?) seitens Delphi und Datasnap aufgefallen. Bei der Übergabe eines Stringparameters mit führender "0" (also etwa "01") an eine Serverfunktion werden die führenden Nullen einfach abgeschnitten. Zuerst dachten wir, dass dies am Zusammenspiel zwischen Jersey und Delphi liegt, tut es aber (leider) nicht, da das Problem auch schon bei den Demoprojekten auftritt.

Sehr gut und schnell nachvollziehbar ist das Problem, wenn in XE2 eine neue "DataSnap-REST-Anwendung" erstellt wird und hier die Beispielmethoden und Beispiel-Webdateien übernommen werden. Ein Aufruf der Funktion "ReverseString" im Webtemplate "ReverseString.html" mit dem Stringparameter "01" führt letztlich zu einem Aufruf mit dem Parameter "1" (ohne führende 0).

Weiß hier jemand einen guten Workaround oder gar einen Patch oder ähnliches? Ansonsten gehe ich davon aus, dass das Thema Datasnap für uns auch schon wieder gestorben ist.

Danke schonmal!


jaenicke - Di 21.08.12 17:09

Dies kommt daher, dass alles was in eine Zahl umwandelbar ist auch als solche behandelt wird. Die entsprechende Stelle im Quelltext liegt in der Unit DSService in TDSRESTService.BuildParamArray.

Da diese Funktion nicht virtuell ist, kommt man da auf direktem Weg nicht heran. Man könnte höchstens ein bisschen was im Speicher umbiegen, aber das ist auch keine schöne Lösung. :nixweiss:

Ansonsten bleibt leider nur dafür zu sorgen, dass es keine Zahl ist, wenn es nicht als solche behandelt werden soll...


Martok - Di 21.08.12 18:43

Es gibt übrigens einen QC-Eintrag [http://qc.embarcadero.com/wc/qcmain.aspx?d=104535] dazu. Gibt allerdings auch nicht mehr her, außer dass das bekannt ist.

Sowas passiert halt, wenn man sich in seinen Layers Of Indirection verzettelt.


Obl - Di 21.08.12 18:45

Hallo jaenicke,
danke für die fachkundige Antwort!
Das Problem ist, das die übergebenen Parameter Teil eines Schlüssels sind die so auch ausgewertet werden sollen, daher also leider nicht so einfach zu umgehen. Finde es etwas seltsam, dass auf diese Weise Parameter "korrigiert" werden, aber naja...

Auch wenn es nicht unbedingt das ist was ich hören wollte hilft mir die Antwort auf jeden Fall sehr viel weiter! ;-)

Vielen Dank.

Edit:
Danke Martok, den Eintrag werde ich mal verfolgen, auch wenn ich nicht wirklich die Hoffnung habe das sich hier in absehbarer Zeit etwas tun wird (was ich leider bei immer mehr QC-Einträgen beobachten muss).


jaenicke - Mi 22.08.12 18:01

user profile iconMartok hat folgendes geschrieben Zum zitierten Posting springen:
Es gibt übrigens einen QC-Eintrag [http://qc.embarcadero.com/wc/qcmain.aspx?d=104535] dazu. Gibt allerdings auch nicht mehr her, außer dass das bekannt ist.
user profile iconObl hat folgendes geschrieben Zum zitierten Posting springen:
den Eintrag werde ich mal verfolgen, auch wenn ich nicht wirklich die Hoffnung habe das sich hier in absehbarer Zeit etwas tun wird (was ich leider bei immer mehr QC-Einträgen beobachten muss).
Ja, da hatte ich diesmal keine Lust gehabt zu suchen als die Seite wieder so unglaublich schnell war. Auf jeden Fall steht der Eintrag ja auf resolved seit Ende Juli. Dementsprechend können wir davon ausgehen, dass das in XE3 funktionieren wird.