![]() |
wsdl-klasse property auslesen
Hallo alle,
ich habe folgende Klassen welche zum auslesen von xml-Files dienen.
Delphi-Quellcode:
Ich lese z.B. das property 'hint' Im debugger sehe ich dass Fhint_Specified true oder false ist.
// XML : NPKNode, global, <complexType>
// Namespace : http://www.crbnet.ch/crbox_partner // ************************************************************************ // NPKNode = class(TRemotable) private Fnumber: string; Fnumber_Specified: boolean; Ftitle: string; Ftitle_Specified: boolean; Fdescription: string; Fdescription_Specified: boolean; FsubNodes: ArrayOfNPKNode; FsubNodes_Specified: boolean; procedure Setnumber(Index: Integer; const Astring: string); function number_Specified(Index: Integer): boolean; procedure Settitle(Index: Integer; const Astring: string); function title_Specified(Index: Integer): boolean; procedure Setdescription(Index: Integer; const Astring: string); function description_Specified(Index: Integer): boolean; procedure SetsubNodes(Index: Integer; const AArrayOfNPKNode: ArrayOfNPKNode); function subNodes_Specified(Index: Integer): boolean; public destructor Destroy; override; published property number: string Index (IS_OPTN) read Fnumber write Setnumber stored number_Specified; property title: string Index (IS_OPTN) read Ftitle write Settitle stored title_Specified; property description: string Index (IS_OPTN) read Fdescription write Setdescription stored description_Specified; property subNodes: ArrayOfNPKNode Index (IS_OPTN) read FsubNodes write SetsubNodes stored subNodes_Specified; end; // ************************************************************************ // // XML : NPKPositionBase, global, <complexType> // Namespace : http://www.crbnet.ch/crbox_partner // ************************************************************************ // NPKPositionBase = class(NPKNode) private FentryStart: Integer; Fhint: string; Fhint_Specified: boolean; FtitleReadOnly: Integer; FprodNormCode: string; FprodNormCode_Specified: boolean; FpublicationCode: string; FpublicationCode_Specified: boolean; FdrawingID: string; FdrawingID_Specified: boolean; procedure Sethint(Index: Integer; const Astring: string); function hint_Specified(Index: Integer): boolean; procedure SetprodNormCode(Index: Integer; const Astring: string); function prodNormCode_Specified(Index: Integer): boolean; procedure SetpublicationCode(Index: Integer; const Astring: string); function publicationCode_Specified(Index: Integer): boolean; procedure SetdrawingID(Index: Integer; const Astring: string); function drawingID_Specified(Index: Integer): boolean; published property entryStart: Integer read FentryStart write FentryStart; property hint: string Index (IS_OPTN) read Fhint write Sethint stored hint_Specified; property titleReadOnly: Integer read FtitleReadOnly write FtitleReadOnly; property prodNormCode: string Index (IS_OPTN) read FprodNormCode write SetprodNormCode stored prodNormCode_Specified; property publicationCode: string Index (IS_OPTN) read FpublicationCode write SetpublicationCode stored publicationCode_Specified; property drawingID: string Index (IS_OPTN) read FdrawingID write SetdrawingID stored drawingID_Specified; end; Wenn der Wert false ist, und ich 'hint' einem String zuweise, gibt es einen Stackoverflow. Wie komme ich an Fhint_specified ran? Gruss, Jörn |
AW: wsdl-klasse property auslesen
Hallo,
jetzt musste ich mich doch wirklich mal belesen, was das stored ist ... ;) ![]() Kann es sein, dass du das falsch einsetzt? Setze doch mal einen Breakpoint auf hint_Specified und hint_Specified. Die scheinen sich ja gegenseitig aufzurufen. Zitat:
S:= hint oder hint:= 'bla' |
AW: wsdl-klasse property auslesen
Hallo Heiko
danke erst mal. Das mit dem stored, und wie ich da rankomme, muss ich noch rausfinden. Und ich weise den hint einem String zu. S := blubb.hint; Gruss, Jörn |
AW: wsdl-klasse property auslesen
Könntest du bitte noch die Implementation der beiden Klassen posten? Deine Klasseninterfaces sehen soweit ganz normal aus. Müsste also an der Implementation liegen. Sind das Klassen einer SOAP Schnittstelle und verwendest du diese dann auch entsprechend mit dem Delphi SOAP Framework oder willst du diese dann irgendwie selber "vergewaltigen"?
Diese XXX_Specified und das stored müssen dich nicht interessieren. Das ist interner Code für das Delphi SOAP Framwork (RTTI), den du nicht abfragen kannst und auch nicht musst. Sobald Hint einen Wert gesetzt bekommt, wird dieses Specified = true. Damit bestimmt das Delphi SOAP Framework, ob eine entsprechende XML-Node geschrieben werden muss oder nicht. @hoika Diese Klassen hat der Delphi WSDL Importer erstellt und nicht jsp selber. Das ist also von Delphi erzeugter Code, an dem es nicht liegt. |
AW: wsdl-klasse property auslesen
Danke Rolf
Fakt ist, dass wenn Specified false ist, und ich 'Hint' einem String zuweisen möchte, gibt's einen Stackoveflow, vermutlich weil einfach Müll in 'Hint' steht. Ich habe versucht mit length, SizeOf, und wildem Pointergewürge dies abzufangen. Nada. try except funktioniert zwar, finde ich aber hässlich. Werde vermutlich die Daten selbst via xPath extrahieren. Für mich ist das irgendwie transparenter, kontrollierter. Gruss, Jörn |
AW: wsdl-klasse property auslesen
Jörn,
Habe deine Antwort leider erst heute gesehen. Sorry. Ich glaube dir ja, dass du einen Stacküberlauf bekommst, aber aufgrund deines Codes sehe ich nicht woran das liegt. Daher wollte ich auch die Implementation der Klassen sehen. Normal ist das auf jeden Fall nicht. Ich nutze viel SOAP und diesen Fehler habe ich bisher noch nie gesehen. Deshalb auch meine Frage in welchen Zusammenhang du diese Klassen nutzt und wie du sie genau benutzt. In Rahmen einer SOAP Kommunikation oder willst du damit ein normales XML File verarbeiten, also etwas wofür das so nicht gemacht ist? Für normale XML Fies gibt es einen anderen Importer. Hast du eventuell den WDSL Importer genutzt, anstelle des normalen XML Imports? Kannst du denn ein Demoprogramm zusammenstellen, inkl. XML Daten? Ich bin mir sicher, dass da bei deinem Code irgendwo ein Fehler vorliegt, der aber aufgrund der Interfaces nicht ersichtlich ist. Die Interfaces sehen absolut korrekt aus, so wie du sie gepostet hast. Das ganze per try/except aubzufangen ist definitiv nicht der richtige Weg. Was heist denn "Müll im Hint"? Gruss Rolf |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:11 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