Du kannst es - zumindest für Tokyo - wie folgt lösen.
Der entscheidende Punkt ist das Freigeben der betreffenden Klasse in der überschriebenen ConvertSoapToNativeData-Methode.
Delphi-Quellcode:
procedure ConvertSoapToNativeData(DataP: Pointer; TypeInfo: PTypeInfo;
RootNode, Node: IXMLNode; Translate: Boolean); override;
// ^^^^^^^^
D.h. in Tokyo sind diese Funktionen von
TOPToSoapDomConvert jetzt virtuell und überladbar?
Ich hatte nicht so genau darauf geachtet, und wollte nur unseren CI Server so schnell wie möglich wieder auf
green state bringen (für unseren Tokyo Branch).
Also habe ich nur den Patch für die aktuelle Version der
Unit in Tokyo angepasst (5 min).
Nichtsdesto
trotz finde ich das Mem-Leak im Original Code schlicht inakzeptabel, und in der
Unit sind weitere fehlerhafte Stellen dieser Art zu finden.
Ich kann nur annehmen, dass das nur mit der ARC Compiler Version getestet wurde (auto ref-counting für TObject Sub-Klassen), in der wohlwollenden Annahme, das die Embarcadero Devs wirklich
Unit Tests für das "Zeuch" geschrieben haben.
Ich werde Deinen Vorschlag für einen Workaround ausprobieren (vielen Dank für den Beispielcode!!). Wenn Embarcadero keinen Fix bis Okt. 2018 (unser Termin für die Umstellung des Production Codes von Seattle auf Tokyo) liefert, ist das wahrscheinlich die bessere Lösung, als die originale
RTL Unit zu patchen.
Es ist schon traurig, dass man überhaupt einen Workaround implementieren muss, für eine Toolchain + Framework in dieser Preisklasse
.