AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein XML Delphi Zugriffsverletzung bei SOAP-Abfrage
Thema durchsuchen
Ansicht
Themen-Optionen

Zugriffsverletzung bei SOAP-Abfrage

Ein Thema von Chaosworld · begonnen am 14. Aug 2008 · letzter Beitrag vom 18. Aug 2008
Antwort Antwort
Chaosworld

Registriert seit: 27. Nov 2005
6 Beiträge
 
#1

Zugriffsverletzung bei SOAP-Abfrage

  Alt 14. Aug 2008, 20:00
Ich muss Daten über ein SOAP-Portal übertragen. Bei einer einzigen Abfrage erhalte ich leider immer diese Fehlermeldung:
"Zugriffsverletzung bei Adresse 0040435C in Modul 'SDIAPP.exe'. Lesen von Adresse 0000BCED."

Weil ich keine Idee habe, wie ich mich dem Fehler nähern könnte, zuerst die verkürzte Unit die von SOAP-Importer erstellt wurde:

Delphi-Quellcode:
unit TestFacade1;

interface

uses InvokeRegistry, SOAPHTTPClient, Types, XSBuiltIns;
....
  TestFacade = interface(IInvokable)
  ['{27C48D16-7064-823C-0EB4-AA7AD67AD11B}']
...
    function createRIS_QSFindings(const institut: Institut; const findings: AxdRIS_QSFindings): EntityKey; stdcall;
  end;
..
  Institut = class(TRemotable)
  private
    Fname_: WideString;
    Fnumber: WideString;
    Fpassword: WideString;
  published
    property name_: WideString Index (IS_NLBL) read Fname_ write Fname_;
    property number: WideString Index (IS_NLBL) read Fnumber write Fnumber;
    property password: WideString Index (IS_NLBL) read Fpassword write Fpassword;
  end;
...
  AxdRIS_QSFindings = array of finding2;

  finding2 = class(AxdEntity_Finding2)
  private
  published
  end;

  AxdEntity_Finding2 = class(TRemotable)
  private
    FbusRelFinding: Array_Of_AxdEntity_BusRelFinding;
    FRIS_AnalyticalDeficiencyNotCor2Spec: WideString;
    FRIS_CapacityDeficiencyNotCor2Spec: WideString;
...
  public
    destructor Destroy; override;
  published
    property busRelFinding: Array_Of_AxdEntity_BusRelFinding Index (IS_UNBD or IS_NLBL) read FbusRelFinding write FbusRelFinding;
    property RIS_AnalyticalDeficiencyNotCor2Spec: WideString Index (IS_NLBL) read FRIS_AnalyticalDeficiencyNotCor2Spec write FRIS_AnalyticalDeficiencyNotCor2Spec;
    property RIS_CapacityDeficiencyNotCor2Spec: WideString Index (IS_NLBL) read FRIS_CapacityDeficiencyNotCor2Spec write FRIS_CapacityDeficiencyNotCor2Spec;
    property RIS_ContaminationDeficiencyNotCor2Sp: WideString Index
....
  end;

  AxdEntity_BusRelFinding = class(TRemotable)
  private
    FAVA_SAPAccountNum: WideString;
    FbusRelAccount: WideString;
    FbusRelTypeId: WideString;
  published
    property AVA_SAPAccountNum: WideString Index (IS_NLBL) read FAVA_SAPAccountNum write FAVA_SAPAccountNum;
    property busRelAccount: WideString Index (IS_NLBL) read FbusRelAccount write FbusRelAccount;
    property busRelTypeId: WideString Index (IS_NLBL) read FbusRelTypeId write FbusRelTypeId;
  end;
und meine eine Test-Routine:

Delphi-Quellcode:
procedure TSDIAppForm.Button4Click(Sender: TObject);
var firma : Institut;
    Abfrage: TestFacade;
    Antwort: EntityKey;
    findings: finding2;
    Finding: AxdRIS_QSFindings;
    busRelFinding: AxdEntity_BusRelFinding;
    Array_busRelFinding: Array_Of_AxdEntity_BusRelFinding;
Begin
...
  firma:= TestFacade1.Institut.Create;
  firma.name_ :='test';
  firma.number:='123456789';
  firma.password:='test1234';




  findings:=TestFacade1.finding2.Create;
  finding:= AxdRIS_QSFindings.create(findings);


  Array_busRelFinding :=Array_Of_AxdEntity_BusRelFinding.Create(busRelFinding);

  busRelFinding.AVA_SAPAccountNum:='123456789';
  findings.busRelFinding:=Array_busRelFinding;

  findings.RIS_QSExtFindingFlag:='Yes';
  findings.RIS_QSFindingReportStatus:=Closed;
... (hier werden noch einige weitere Parameter gefülllt)
  Abfrage:= HTTPRIO as TestFacade;

  Antwort := TestFacade1.EntityKey.create;
  Antwort:=Abfrage.createRIS_QSFindings(firma,finding); **
genau an der ** Stelle kommt immer der Zugriffsfehler. Wenn ich jedoch die Zeite
  findings.busRelFinding:=Array_busRelFinding; erhalten ich die Exception:
"java.rmi.ServerException accourred in server thread, nested exception is:
java.rmi.RemoteException: ; nested exception is:
java.land.NullPointerException."

Ich geher daher davon aus, dass die Abfrage korrekt rausgesendet wird, und bei der Antwort der Fehler auftritt. Nur weiter komme ich einfach nicht.

Und was dann noch mehr verwirrt, wenn ich busRelFinding komplett fülle, also:
Delphi-Quellcode:
  busRelFinding.AVA_SAPAccountNum:='123456789';
  busRelFinding.busRelAccount:='591892';
  busRelFinding.busRelTypeId:='Institut';
Erhalte ich von Delphi ein
"Invalid Address specified to RtlReAllocateHeap( 00150000, 0013F8BC ) Prozess SDIAPP.exe (8096)"
und Delphi springt ins CPU-Fenster.

Wäre echt super, wenn mir jemand zeigen könnte, wo ich meinen Gedankenfehler mache.
Danke schon mal für jede Antwort

Chaosworld

PS: Benutze Delphi 2007
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

Re: Zugriffsverletzung bei SOAP-Abfrage

  Alt 14. Aug 2008, 20:47
Hallo,

ich probiers mal:

Die dynamischen arrays brauchst Du nicht per create zu erzeugen. Du hast nirgends ein setlength stehen, das fehlt Dir. ganz normal mit setlength die arraygröße einstellen und dann mußt du jedes Element des array mit create erzeugen, bevor du es füllst. Du übergibst ein komplett leeres array = Nil und bekommst deshalb die Exception.

Delphi-Quellcode:
  setlength(Array_busRelFinding,1);
  Array_busRelFinding[0]:=AxdEntity_BusRelFinding.create;
  Array_busRelFinding[0].AVA_SAPAccountNum:='123456789';
  findings.busRelFinding:=Array_busRelFinding;
Zitat:
Abfrage:= HTTPRIO as TestFacade;
versteh ich nicht. in deinem Importcode fehlt auch eine Zeile, da muß im interface Teil als letztes eine solche function stehen:
function GetIXYZ(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): ITestFacade; und in deinem ButtonclickCode sollte dann als erstes stehen
Abfrage:=GetIxyz(false,'',Nil*); * oder du hast selber einen Rio erstellt, wenn du z.B. die Request/Response mitschneiden willst, oder ihn zur Authentifizierung brauchst.

Zitat:
Antwort := TestFacade1.EntityKey.create;
brauchst du nicht.

Gruß Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Chaosworld

Registriert seit: 27. Nov 2005
6 Beiträge
 
#3

Re: Zugriffsverletzung bei SOAP-Abfrage

  Alt 15. Aug 2008, 11:30
@Keldorn danke für deine Antwort

setlength geht leider nicht, da dies in der SOAP-Routine wohl nicht so angelegt wurde. Aber der Fehler war am ende doch recht einfach,

ich musste vor:

Array_busRelFinding :=Array_Of_AxdEntity_BusRelFinding.Create(busRelFi nding);

noch das hier machen:

busRelFinding:=AxdEntity_BusRelFinding.Create;

Sonst war zwar Array_busRelFinding initiatlisiert, aber der enthielt dann einen Verweis auf den nicht existierenden busRelFinding.

Somit ist der Fehler dann behoben.


Chaosworld
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Zugriffsverletzung bei SOAP-Abfrage

  Alt 17. Aug 2008, 19:28
Zitat von Chaosworld:
setlength geht leider nicht, da dies in der SOAP-Routine wohl nicht so angelegt wurde.
warum meinst du geht setlength nicht? Deine Delphi-Version kommt doch mit dyn. Arrays bei webservices klar.

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
Chaosworld

Registriert seit: 27. Nov 2005
6 Beiträge
 
#5

Re: Zugriffsverletzung bei SOAP-Abfrage

  Alt 18. Aug 2008, 10:41
Hallo,
keine Ahnung, ich hatte es probiert mit setlength und das Funktioniert leider nicht. Irgendwie scheint es bei diesem Webservice damit Probleme zu geben. Warum kann ich dir aber auch nicht sagen, hatte es dann mit Create probiert und da es damit gut funktionierte, bin ich der Sache dann nicht weiter nachgegangen.

Chaosworld
  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 21:17 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