![]() |
Zugriffsverletzung bei SOAP-Abfrage
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:
und meine eine Test-Routine:
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;
Delphi-Quellcode:
genau an der ** Stelle kommt immer der Zugriffsfehler. Wenn ich jedoch die Zeite
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); **
Delphi-Quellcode:
erhalten ich die Exception:
findings.busRelFinding:=Array_busRelFinding;
"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:
Erhalte ich von Delphi ein
busRelFinding.AVA_SAPAccountNum:='123456789';
busRelFinding.busRelAccount:='591892'; busRelFinding.busRelTypeId:='Institut'; "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 |
Re: Zugriffsverletzung bei SOAP-Abfrage
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:
Delphi-Quellcode:
und in deinem ButtonclickCode sollte dann als erstes stehen
function GetIXYZ(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): ITestFacade;
Delphi-Quellcode:
* oder du hast selber einen Rio erstellt, wenn du z.B. die Request/Response mitschneiden willst, oder ihn zur Authentifizierung brauchst.
Abfrage:=GetIxyz(false,'',Nil*);
Zitat:
Gruß Frank |
Re: Zugriffsverletzung bei SOAP-Abfrage
@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 |
Re: Zugriffsverletzung bei SOAP-Abfrage
Zitat:
|
Re: Zugriffsverletzung bei SOAP-Abfrage
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 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:36 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-2025 by Thomas Breitkreuz