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 * Default {@link PackagerErrorHandler} that records pack/unpack failures to a 037 * dedicated logger instead of aborting the operation. 038 * 039 * @author Vishnu Pillai 040 */ 041public class PackagerErrorLogger implements PackagerErrorHandler, Configurable, LogSource { 042 /** Default constructor; no instance state to initialise. */ 043 public PackagerErrorLogger() {} 044 045 private Logger logger = Logger.getLogger("PACKAGER_ERROR_LOGGER"); 046 private String realm; 047 048 @Override 049 public void setLogger(Logger logger, String realm) { 050 this.logger = logger; 051 } 052 053 @Override 054 public String getRealm() { 055 return realm; 056 } 057 058 @Override 059 public Logger getLogger() { 060 return logger; 061 } 062 063 @Override 064 public void setConfiguration(Configuration cfg) throws ConfigurationException { 065 String loggerName = cfg.get("packager-error-logger"); 066 logger = Logger.getLogger(loggerName); 067 realm = cfg.get("realm", "packager-error"); 068 } 069 070 @Override 071 public void handlePackError(ISOComponent m, ISOException e) { 072 StringBuilder sb = new StringBuilder("Error packing message:\n"); 073 ByteArrayOutputStream baos = new ByteArrayOutputStream(); 074 PrintStream ps = new PrintStream(baos); 075 m.dump(ps, ""); 076 sb.append(e.toString()).append("\n"); 077 sb.append("Message dump:\n").append(new String(baos.toByteArray())).append("\n"); 078 LogEvent logEvent = new LogEvent(this, "pack-error"); 079 logEvent.addMessage(sb.toString()); 080 logEvent.addMessage(e); 081 Logger.log(logEvent); 082 } 083 084 @Override 085 public void handleUnpackError(ISOComponent isoComponent, byte[] msg, ISOException e) { 086 StringBuilder sb = new StringBuilder("Error unpacking message:\n"); 087 sb.append(e.toString()).append("\n"); 088 sb.append("Raw data:\n").append(new String(msg)).append("\n"); 089 LogEvent logEvent = new LogEvent(this, "unpack-error"); 090 logEvent.addMessage(sb.toString()); 091 logEvent.addMessage(e); 092 Logger.log(logEvent); 093 } 094}