USING net.progress.encode.gzip.Zlib.
DEFINE VARIABLE gzipFile AS CHARACTER NO-UNDO.
DEFINE VARIABLE xmlFile AS CHARACTER NO-UNDO.
DEFINE VARIABLE mpGZIPData AS MEMPTR NO-UNDO.
ASSIGN
xmlFile = SUBSTITUTE('&1DebugGzip.xml',
Session:Temp-dir)
gzipFile = xmlFile + '.gz'
FIND FIRST tb_documento_xml
NO-LOCK NO-ERROR.
PROCESS-BLOB:
IF AVAILABLE tb_documento_xml THEN
DO:
SET-SIZE(mpGZIPData) = 0.
/** gzip format. Byte order: Little-endian. Offset Length Contents 0 2 bytes magic header **/
SET-BYTE-ORDER( mpGZIPData ) = LITTLE-ENDIAN.
COPY-LOB FROM tb_documento_xml.arq_xml TO OBJECT mpGZIPData .
IF GET-LONG(mpGZIPData,1) EQ 0x1f AND
GET-LONG(mpGZIPData,2) EQ 0x8b THEN
Message 'Confirmed. GZIP format'.
ELSE
DO:
Message SUBSTITUTE('Failed GZIP format magic file format. &1 &2',
GET-LONG(mpGZIPData,1),
GET-LONG(mpGZIPData,2)
).
SET-SIZE(mpGZIPData) = 0.
LEAVE PROCESS-BLOB.
END.
/** Copy the memptr data to disk..**/
COPY-LOB FROM OBJECT mpGZIPData TO FILE gzipFile.
/** Uncompress the GZIP FILE FORMAT DATA..**/
Zlib:getInstance():uncompressFile(gzipFile, chXMLFile , true).
FILE-INFO:FILE-NAME = chXMLFile.
MESSAGE SUBSTITUTE('Can you see this XML File? &1',
QUOTER(FILE-INFO:FULL-PATHNAME)).
SET-SIZE(mpGZIPData) = 0.
END.