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.