Skip to Content
Author's profile photo Roger Allue

Module PayloadGZipBean: Zip and Unzip Payloads using gzip

Here you’ll find a module I wrote to zip and unzip messages using gzip. I hope you find it useful:


PayloadGZipBean

package com.integrations.adapter.module;

import java.io.ByteArrayInputStream;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.OutputStream;

import java.rmi.RemoteException;

import java.util.zip.GZIPInputStream;

import java.util.zip.GZIPOutputStream;

import javax.ejb.EJBException;

import javax.ejb.SessionBean;

import javax.ejb.SessionContext;

import javax.ejb.TimedObject;

import javax.ejb.Timer;

import com.sap.aii.af.lib.mp.module.ModuleContext;

import com.sap.aii.af.lib.mp.module.ModuleData;

import com.sap.aii.af.lib.mp.module.ModuleException;

import com.sap.aii.af.service.auditlog.Audit;

import com.sap.engine.interfaces.messaging.api.Message;

import com.sap.engine.interfaces.messaging.api.MessageKey;

import com.sap.engine.interfaces.messaging.api.auditlog.AuditLogStatus;

/**

* @author Roger Allué i Vall

*

*/

public class PayloadGZipBean implements SessionBean, TimedObject {

    private static final String C_PARAM_MODE         = “zip.mode”;

    private static final String C_MODE_ZIP           = “zip”;

    private static final String C_MODE_UNZIP         = “unzip”;

    private static final int    C_BUFFER_SIZE        = 8192;

    private static MessageKey amk;

    /* (non-Javadoc)

     * @see javax.ejb.SessionBean#ejbActivate()

     */

    @Override

    public void ejbActivate() throws EJBException, RemoteException {

        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)

     * @see javax.ejb.SessionBean#ejbPassivate()

     */

    @Override

    public void ejbPassivate() throws EJBException, RemoteException {

        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)

     * @see javax.ejb.SessionBean#ejbRemove()

     */

    @Override

    public void ejbRemove() throws EJBException, RemoteException {

        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)

     * @see javax.ejb.SessionBean#setSessionContext(javax.ejb.SessionContext)

     */

    @Override

    public void setSessionContext(SessionContext arg0) throws EJBException,

            RemoteException {

        // TODO Auto-generated method stub

    }

    /* (non-Javadoc)

     * @see javax.ejb.TimedObject#ejbTimeout(javax.ejb.Timer)

     */

    @Override

    public void ejbTimeout(Timer arg0) {

        // TODO Auto-generated method stub

    }

    public void ejbCreate() throws javax.ejb.CreateException {

    }

    public ModuleData process(ModuleContext moduleContext, ModuleData inputModuleData) throws ModuleException {

        Message msg;

        ByteArrayInputStream  payloadIn;

        ByteArrayOutputStream payloadOut;

        try {

            msg = (Message) inputModuleData.getPrincipalData();           

            amk               = new MessageKey(msg.getMessageId(), msg.getMessageDirection());

            addInfo(“PayloadGZipBean Begin…”);

            addInfo(“Payload initialization”);

            payloadIn = new ByteArrayInputStream(msg.getDocument().getContent());       

            payloadOut = new ByteArrayOutputStream();

            addInfo(“Getting ” + C_PARAM_MODE + ” from parameters”);           

            String mode            = moduleContext.getContextData(C_PARAM_MODE);

            if (mode!=null && mode.equals(C_MODE_ZIP)){

                addInfo(“zip.mode from parameters”);

                addInfo(C_PARAM_MODE + ” found: ” + C_MODE_ZIP);               

                compress(payloadIn,payloadOut);   

                addInfo(“PayloadGZipBean: Payload successfully zipped”);

            }else if (mode!=null && mode.equals(C_MODE_UNZIP)){

                addInfo(C_PARAM_MODE + ” found: ” + C_MODE_UNZIP);

                uncompress(payloadIn,payloadOut);

                addInfo(“PayloadGZipBean: Payload successfully unzipped”);

            }else{

            }

             msg.getDocument().setContent(payloadOut.toByteArray());        

             inputModuleData.setPrincipalData(msg);

        }

        catch (Exception e) {

            ModuleException me = new ModuleException(e);

            throw me;

            }

        addInfo(“PayloadGZipBean End…”);       

        return inputModuleData;

    }

    private void compress(InputStream in, OutputStream out) throws ModuleException{           

        try {           

        GZIPOutputStream goutstream = new GZIPOutputStream(out);                   

        byte[] buf = new byte[C_BUFFER_SIZE];

         int len;        

            while ((len = in.read(buf)) > 0)

            {

                 goutstream.write(buf, 0, len);

            }

        } catch (IOException e) {

            addError(“Compress: Exception found!”);

            ModuleException me = new ModuleException(e);

            throw me;

        }       

    }

    private void uncompress(InputStream in, OutputStream out) throws ModuleException{

        try {

        GZIPInputStream ginstream = new GZIPInputStream(in);                   

        byte[] buf = new byte[C_BUFFER_SIZE];

         int len;

         while ((len = ginstream.read(buf)) > 0)

        {

           out.write(buf, 0, len);

        }

        } catch (IOException e) {

            addError(“Uncompress: Exception found!”);

            ModuleException me = new ModuleException(e);

            throw me;

        }

    }

    private void addInfo (String msg){

        try{

        Audit.addAuditLogEntry(amk, AuditLogStatus.SUCCESS,msg);

        }

        catch (Exception e){

            Audit.addAuditLogEntry(amk, AuditLogStatus.ERROR,”Error a l’obrir el fitxer!”);

        }

        }

    private void addWarning (String msg){

        try{

        Audit.addAuditLogEntry(amk, AuditLogStatus.WARNING,msg);

        }

        catch (Exception e){

            Audit.addAuditLogEntry(amk, AuditLogStatus.ERROR,”Error a l’obrir el fitxer!”);

        }

        }

    private void addError (String msg){

        try{

        Audit.addAuditLogEntry(amk, AuditLogStatus.ERROR,msg);

        }

        catch (Exception e){

            Audit.addAuditLogEntry(amk, AuditLogStatus.ERROR,”Error a l’obrir el fitxer!”);

        }

        }   

}


Regards!

Assigned tags

      3 Comments
      You must be Logged on to comment or reply to a post.
      Author's profile photo Adarsh Dhingra
      Adarsh Dhingra

      Hi Roger,

      Nice job.Could you please include an end to end testing scenario in the above blog.

      Author's profile photo Former Member
      Former Member

      Awesome work Roger.

      Thanks for sharing..!!

      Thanks,

      Aman Gupta

      Author's profile photo Grzegorz Glowacki
      Grzegorz Glowacki

      Hi Roger,

      Thanks for sharing your code. For your information, recently an undocumented feature was discovered and gzip/gunzip is also possible with standard PayloadZipBean module. See more details in the blog by PRAVEEN GUJJETI here: Undocumented Feature: Gzip/Gunzip using standard SAP PayloadZipBean module

      Regards,

      Greg