Announcement

Collapse
No announcement yet.

Exception bei XML Funktionsaufruf

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Exception bei XML Funktionsaufruf

    Hallo zusammen,

    ich arbeite an einem Projekt, in dem ich eine Kommunikation zur einer "BlackBox" mittels XML erstellen soll.

    Vorgegebene WSDL und XSD - Beschreibungen sind bereits ins Delphi 2006 importiert.

    Beim Versuch die Kommunikation zu starten, erhalte ich eine Exception (Lesezugriffsverletzung).
    Dabei ist es egal, welche der Importfunktionen ich aufrufe. Es geht hier wohl um ein Initialisierungsproblem,

    Hier ein Auszug aus dem Quelltext (Delphi):

    procedure TForm1.CardOutClick(Sender: TObject);
    var CardService : CardServicePortType;
    EjectCard : EjectCard;
    EjectCardResponse: EjectCardResponse;
    begin
    CardService:= GetCardServicePortType(true); // durch WSDL-Import erstellt
    if Assigned(CardService) then begin // Pointer vergeben
    EjectCardResponse:= CardService.EjectCard(EjectCard); // hier Fehler
    end;
    end;


    EjectCard wird wohl nicht initialisiert. Wenn ich jedoch versuche EjectCard zu initialisieren in Form von:

    EjectCard.Create(Par1,Par2,Par3);
    wobei
    Par1 = ADomNode
    xmldom.IDomNode
    Par2= AParentNode
    xmldoc.TXmlNode
    Par3= OwnerDoc
    xmldoc.TXmlDocument

    werden diese drei Parameter gefordert, mit dehnen ich nichts anzufangen weiß.

    Durch WSDL Import ist u.a. folgende Function erzeugt worden (s.o).

    CardServicePortType = interface(IInvokable)
    ['{63B1C593-F454-74AF-4DF0-32ED9BBFD746}']
    function EjectCard(const parameter: EjectCard): EjectCardResponse; stdcall;
    end;



    Kann mir jemand unter die Arme greifen ?

    Schon jetzt vielen Dank
    Klaus

  • #2
    Hallo zusammen,

    schade dass keiner eine Hilfestellung geben konnte.
    Ich versuche das Problem jetzt mal etwas anders darzustellen, weil ich leider keinen Schritt weitergekommen bin.
    Dabei habe ich den Quellcode auf das nötigste reduziert.

    Durch WSDL-Import durch Delphi generiert:

    Type

    TuWas = TXMLTuWas;
    TuWasResponse = TXMLTuWasResponse;

    [.. blabla..]

    CSPortType = interface(IInvokable)
    ['{63B1C593-F454-74AF-4DF0-32ED9BBFD746}']

    function TuWas(const parameter: TuWas): TuWasResponse; stdcall;

    end;

    function GetCSPortType(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): CSPortType;

    Implementation
    [.. blabla..]


    Jetzt der eigene Code:

    procedure TForm1.TuWasClick(Sender: TObject);
    var v_TuWas : TXMLTuWas;
    v_TuWasResponse: TXMLTuWasResponse;

    begin
    p_CS:= GetCSPortType(false); // ob true oder false ist hier egal
    v_TuWas:= nil; // v_TuWas muss irgendwie initialisiert werden

    try
    v_TuWas:= TXMLTuWas.CreateHosted(v_TuWas); // hier entsteht die Exception, weil v_TuWas nicht richtig initialisiert wurde.
    except
    on E:Exception do
    ShowMessage(Format('Fehler: %s',[E.Message])); end;
    end;
    [... bla bla ..]
    v_TuWas.Free;
    end;


    Das Ganze sieht also so aus, dass es sowohl eine Methode TuWas und einen XML-Node der Klasse TXMLTuWAS gibt.
    TXMLTuWas.CreateHosted erwartet einen Parameter gem OnlineHilfe:

    "TXMLNode(TXMLNode) Constructor
    Declariert in XMLDoc.TXMLNode
    Parameter
    HostNode
    XMLDoc.TXMLNode"


    Meine Frage: Wie wird v_TuWas richtig initialisiert ?

    In der Hoffnung auf einen Tipp

    Klaus

    Comment

    Working...
    X