Ver Mensaje Individual
  #1  
Antiguo 03-05-2019
APO APO is offline
Miembro
 
Registrado: feb 2008
Posts: 121
Reputación: 17
APO Va por buen camino
Al consumir WebService me da Accessviolation al acceder al resultado

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}']

    // Cannot unwrap: 
    //     - Output part does not refer to an element
    //     - Input element wrapper name does not match operation's name
    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
   //Relleno los datos para consumir el WebService
   XMLEnvio:=Ie215.Create;
   XMLEnvio.Id:='20190503000001';
   XMLEnvio.NifDeclarante:='11111111H';
   XMLEnvio.NombreDeclarante:='NOMBRE DEL DECLARANTE';
…

   //Aquí llamo a la función para consumir el WebService
   XMLRespuesta:=GetIe215V1(True,'',HTTPRIO1).Ie215V1(XMLEnvio);

   //Proceso el resultado
   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!!
Responder Con Cita