001/*
002 * jPOS Project [http://jpos.org]
003 * Copyright (C) 2000-2026 jPOS Software SRL
004 *
005 * This program is free software: you can redistribute it and/or modify
006 * it under the terms of the GNU Affero General Public License as
007 * published by the Free Software Foundation, either version 3 of the
008 * License, or (at your option) any later version.
009 *
010 * This program is distributed in the hope that it will be useful,
011 * but WITHOUT ANY WARRANTY; without even the implied warranty of
012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
013 * GNU Affero General Public License for more details.
014 *
015 * You should have received a copy of the GNU Affero General Public License
016 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
017 */
018
019package org.jpos.tlv.packager;
020
021
022import org.jpos.core.Configurable;
023import org.jpos.core.Configuration;
024import org.jpos.core.ConfigurationException;
025import org.jpos.iso.ISOComponent;
026import org.jpos.iso.ISOException;
027import org.jpos.util.LogEvent;
028import org.jpos.util.LogSource;
029import org.jpos.util.Logger;
030
031import java.io.ByteArrayOutputStream;
032import java.io.PrintStream;
033
034
035/**
036 * @author Vishnu Pillai
037 */
038public class PackagerErrorLogger implements PackagerErrorHandler, Configurable, LogSource {
039
040    private Logger logger = Logger.getLogger("PACKAGER_ERROR_LOGGER");
041    private String realm;
042
043    @Override
044    public void setLogger(Logger logger, String realm) {
045        this.logger = logger;
046    }
047
048    @Override
049    public String getRealm() {
050        return realm;
051    }
052
053    @Override
054    public Logger getLogger() {
055        return logger;
056    }
057
058    @Override
059    public void setConfiguration(Configuration cfg) throws ConfigurationException {
060        String loggerName = cfg.get("packager-error-logger");
061        logger = Logger.getLogger(loggerName);
062        realm = cfg.get("realm", "packager-error");
063    }
064
065    @Override
066    public void handlePackError(ISOComponent m, ISOException e) {
067        StringBuilder sb = new StringBuilder("Error packing message:\n");
068        ByteArrayOutputStream baos = new ByteArrayOutputStream();
069        PrintStream ps = new PrintStream(baos);
070        m.dump(ps, "");
071        sb.append(e.toString()).append("\n");
072        sb.append("Message dump:\n").append(new String(baos.toByteArray())).append("\n");
073        LogEvent logEvent = new LogEvent(this, "pack-error");
074        logEvent.addMessage(sb.toString());
075        logEvent.addMessage(e);
076        Logger.log(logEvent);
077    }
078
079    @Override
080    public void handleUnpackError(ISOComponent isoComponent, byte[] msg, ISOException e) {
081        StringBuilder sb = new StringBuilder("Error unpacking message:\n");
082        sb.append(e.toString()).append("\n");
083        sb.append("Raw data:\n").append(new String(msg)).append("\n");
084        LogEvent logEvent = new LogEvent(this, "unpack-error");
085        logEvent.addMessage(sb.toString());
086        logEvent.addMessage(e);
087        Logger.log(logEvent);
088    }
089}