Ver Mensaje Individual
  #1  
Antiguo 21-03-2015
frankizzio frankizzio is offline
Miembro
NULL
 
Registrado: abr 2013
Posts: 10
Reputación: 0
frankizzio Va por buen camino
Convertir String - TDynArray - Archivo ZIP

Hola,
Estoy realizando un client web service pero me estoy estancando en lo siguiente, ya genere la conexión con el servidor y este me envía un XML de respuesta, que es el siguiente

Código:
<?xml version='1.0' encoding='UTF-8'?>
<S:Envelope xmlns:S="ht tp: / /sche mas.xmls oap.or g/soap/envelope/">
<S:Body>
<ns2:sendBillResponse xmlns:ns2="h t t p : //serv ice . co m"><applicationResponse>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</applicationResponse>
</ns2:sendBillResponse>
</S:Body>
</S:Envelope>
El xml muestra una etiqueta llamada aplicationresponse la cual tiene una cadena que viene a ser un arreglo de bytes (TByteDynArray) la cual contiene un archivo zipeado, este archivo zip contiene un archivo xml con la constancia de recepción del web service.

Mi problema se da cuando quiero convertir el archivo zip, siempre que lo abro me aparece el mensaje de error "El archivo tiene un formato desconocido o está dañado", El proceso que realizo es el siguiente

En el AfterExecute extraigo la respuesta

Código Delphi [-]
procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string;
  SOAPResponse: TStream);
begin
  ConverZipFile(StreamToString(SOAPResponse));
end;
Luego utilizando los siguientes procesos realizó las conversiones hasta crear el archivo zip

Código Delphi [-]
procedure ConverZipFile(XML: String);
    var
  Doc     : IXMLDocument;
  Elemento: IXMLNode;
  ByteB   : TByteDynArray;
begin
  Doc := LoadXMLData(XML);
  Elemento := Doc.DocumentElement.ChildNodes.FindNode('S:Body');
  Elemento := Elemento.ChildNodes.Get(0);
  Elemento := Elemento.ChildNodes.Get(0);
  ByteB:=StringToByteArray2(VarToStr(Elemento.NodeValue));
  ByteArrayToFIle(ByteB,'D:\E-Billing\demo.ZIP');
end;


function StringToByteArray2(Str: AnsiString): TByteDynArray;
var
  MSTream: TMemoryStream;
  pTemp: pointer;
begin
  MStream := TMemoryStream.Create;
  MStream.Write(str,length(str));
  MStream.Position := 0;

  SetLength(Result, MStream.Size);
  pTemp := @Result[0];
  MStream.Position := 0;
  MStream.Read(pTemp^, MStream.Size);

  MStream.Free;
end;



procedure ByteArrayToFIle( ByteArray : TByteDynArray;
                           FileName : string );
var Count : integer;
    F : FIle of Byte;
    pTemp : Pointer;
begin
  AssignFile( F, FileName );
  Rewrite(F);
  try
    Count := Length( ByteArray );
    pTemp := @ByteArray[0];
    BlockWrite(F, pTemp^, Count );
  finally
    CloseFile( F );
  end;
end;

La documentación del web service especifica que la respuesta es un arreglo de bytes de base64,
Espero me puedan ayudar.
Responder Con Cita