Skip to Content

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!

To report this post you need to login first.

3 Comments

You must be Logged on to comment or reply to a post.

Leave a Reply