Hallo Bernhard,
danke für den Hinweis, ich habe AnsiString in UnicodeString geändert.
Allerdings habe ich dadurch das Problem nicht gelöst. Ich bekomme unter Android eine Schutzverletzung, wenn ich den Web-Service aufrufe, der mir eine Struktur zurück geben soll.
Die importierte
WSDL erstellte mir die Klassen:
Delphi-Quellcode:
TPersonalRem =
class;
{ "urn:TestIntf"[GblCplx] }
TPersonalRemArray =
array of TPersonalRem;
{ "urn:TestIntf"[GblCplx] }
// ************************************************************************ //
// XML : TTTPersonalRem, global, <complexType>
// Namespace : urn:TestIntf
// ************************************************************************ //
TTTPersonalRem =
class(TRemotable)
private
FAnrede:
string;
FName_1:
string;
FName_2:
string;
FZusatz:
string;
FStrasse:
string;
FLKZ:
string;
FPLZ:
string;
FOrt:
string;
published
property Anrede:
string read FAnrede
write FAnrede;
property Name_1:
string read FName_1
write FName_1;
property Name_2:
string read FName_2
write FName_2;
property Zusatz:
string read FZusatz
write FZusatz;
property Strasse:
string read FStrasse
write FStrasse;
property LKZ:
string read FLKZ
write FLKZ;
property PLZ:
string read FPLZ
write FPLZ;
property Ort:
string read FOrt
write FOrt;
end;
Ich greife darauf so zu:
Delphi-Quellcode:
procedure TfrmPersonal7Zoll.btn1Click(Sender: TObject);
var myWS : ITest;
Rio : THTTPRIO;
emp1 : TPersonalRem;
ans : TPersonalRemArray;
i : integer;
begin
Rio := THTTPRIO.Create(
nil);
emp1 := TPersonalRem.Create;
emp1.Name_1 := edSuchName_1.Text;
// --------- aus Parameterobjekt ------------
Rio.WSDLLocation := '
http://192.168.178.16:8080/wsdl/ITest';
Rio.URL := '
http://192.168.178.16:8080/soap/IGetPersonalListeFilter';
Rio.Service := '
IGetPersonalListeFilterservice';
Rio.Port := '
IGetPersonalListeFilterPort';
// ---------- Aufruf der DeisterMethode ---------------
try
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
ans := (Rio
as ITest).SuchePersonen(emp1);
// Hier kommt die Schutzverletzung unter Android. Unter Win32 läuft es problemlos.....
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
for i := 0
to length(ans) - 1
do
begin
showmessage('
Response :' + ans[i].Name_1 + '
' + ans[i].Name_2);
end;
except
on ER:
Exception do
begin
showmessage(ER.
Message);
end;
end;
end;
Was mich verwundert ist, dass unter
Win32 alles einwandfrei funktioniert. Unter Android auf diversen Endgeräten funktioniert es nicht.
Gebe ich in einem anderem Service nur TPersonalRem zurück klappt es auch. Nur das Array TPersonalRemArray (Ein Array von TPersonalRem) als Rückgabe macht Probleme.
Fragende Grüße
Axel