001    package org.shiftone.jrat.jvmti;
002    
003    import org.shiftone.jrat.util.log.Logger;
004    
005    import java.lang.instrument.ClassFileTransformer;
006    import java.lang.instrument.IllegalClassFormatException;
007    import java.security.ProtectionDomain;
008    
009    /**
010     * @author jeff@shiftone.org (Jeff Drost)
011     */
012    public class TryCatchClassFileTransformer implements ClassFileTransformer {
013    
014        private static final Logger LOG = Logger.getLogger(TryCatchClassFileTransformer.class);
015        private final ClassFileTransformer transformer;
016    
017        public TryCatchClassFileTransformer(ClassFileTransformer transform) {
018            this.transformer = transform;
019        }
020    
021        public byte[] transform(
022                ClassLoader loader,
023                String className,
024                Class/*<?>*/ classBeingRedefined,
025                ProtectionDomain protectionDomain,
026                byte[] classfileBuffer) throws IllegalClassFormatException {
027    
028            try {
029    
030                return transformer.transform(
031                        loader,
032                        className,
033                        classBeingRedefined,
034                        protectionDomain,
035                        classfileBuffer);
036    
037            } catch (Exception e) {
038    
039                LOG.error("failed to transform : " + className, e);
040                return classfileBuffer;
041    
042            }
043        }
044    
045    
046        public String toString() {
047            return "TryCatchClassFileTransformer[" + transformer + "]";
048        }
049    }