Hola,
Lo que pretendo es consumir un Webservice enviando un XML (generado con los métodos ya importados del WSDL) y luego obtener el XML de respuesta para saber si es aceptado o rechazado. El caso es que logro consumir correctamente el Webservice, pero a la hora de acceder a la respuesta me da un error Accessviolation. Seguramente no estoy inicializando o creando correctamente alguna clase o lo que sea, pero llevo ya varios días probándolo de todas las maneras y no logro solucionarlo. Os pongo en detalle lo que hago a ver si alguien me puede ayudar.
Primero importo el WSDL de la siguiente dirección:
https://www3.agenciatributaria.gob.e...s/Ie215V1.wsdl
Esto genera una unidad en Delphi para consumir el Webservice, pongo solamente la parte que interesa para obtener el resultado:
Código Delphi
[-]
Ie215V1 = interface(IInvokable)
['{AC981E05-A0BD-5252-1FB3-FB4E248F1318}']
function Ie215V1(const Ie215V1Ent: Ie215): Ie215V1SalType; stdcall;
end;
function GetIe215V1(UseWSDL: Boolean=System.False; Addr: string=''; HTTPRIO: THTTPRIO = nil): Ie215V1;
La función
GetIe215V1 devuelve una clase TRemotable que es la que contiene el resultado del Webservice y a la que no logro acceder. La clase es esta:
Código Delphi
[-]
Ie215V1SalType = class(TRemotable)
private
FIe201: Ie201;
FIe201_Specified: boolean;
FIe204: Ie204;
FIe204_Specified: boolean;
procedure SetIe201(Index: Integer; const AIe201: Ie201);
function Ie201_Specified(Index: Integer): boolean;
procedure SetIe204(Index: Integer; const AIe204: Ie204);
function Ie204_Specified(Index: Integer): boolean;
public
constructor Create; override;
destructor Destroy; override;
published
property Ie201: Ie201 Index (IS_OPTN or IS_REF) read FIe201 write SetIe201 stored Ie201_Specified;
property Ie204: Ie204 Index (IS_OPTN or IS_REF) read FIe204 write SetIe204 stored Ie204_Specified;
end;
Y este es el código que utilizo para consumir el Webservice:
Código Delphi
[-]
procedure TfrmSIANE.Ie215_PresentacionAlbaranCirculacion;
var
XMLEnvio: Ie215;
XMLRespuesta: Ie215V1SalType;
begin
XMLEnvio:=Ie215.Create;
XMLEnvio.Id:='20190503000001';
XMLEnvio.NifDeclarante:='11111111H';
XMLEnvio.NombreDeclarante:='NOMBRE DEL DECLARANTE';
…
XMLRespuesta:=GetIe215V1(True,'',HTTPRIO1).Ie215V1(XMLEnvio);
if XMLRespuesta.Ie201.Cuerpo.AlbaranVER.DatosAceptacion.CRE)<>'' then --> Esta es la línea que me da AccessViolation
begin
end;
end;
Por favor, si alguien puede arrojar luz sobre este tema se lo agradeceré, pero llevo ya atascado con esto varios días y no doy con la solución.
Muchas gracias!!