Translator.java |
/* * JBoss, the OpenSource J2EE webOS * * Distributable under LGPL license. * See terms of license at gnu.org. */ package org.jboss.util.loading; import java.security.ProtectionDomain; /** An interface for transforming byte code before Class creation. This is * compatible with the JDK1.5 java.lang.instrument.ClassFileTransformer * proposal. * * @author Scott.Stark@jboss.org * @version $Revision: 1.4 $ */ public interface Translator { /** Optionally transform the supplied class file and return a new replacement * class file. * * <P> If a transformer has been registered with the class loading layer, * the transformer will be called for every new class definition. * The request for a new class definition is made with * {@link java.lang.ClassLoader#defineClass ClassLoader.defineClass}. * The transformer is called during the processing of the request, before * the class file bytes have been verified or applied. * * <P> * If the implementing method determines that no transformations are needed, * it should return <code>null</code>. Otherwise, it should create a new * byte[] array and copy the input <code>classfileBuffer</code> into it, * along with all desired transformations. The input <code>classfileBuffer</code> * must not be modified. * * @param loader - the defining loader of the class to be transformed, may * be <code>null</code> if the bootstrap loader * @param className - the fully-qualified name of the class * @param classBeingRedefined - if this is a redefine, the class being * redefined, otherwise <code>null</code> * @param protectionDomain - the protection domain of the class being * defined or redefined * @param classfileBuffer - the input byte buffer in class file format - must * not be modified * * @throws Exception - if the input does not represent a well-formed class file * @return a well-formed class file buffer (the result of the transform), * or <code>null</code> if no transform is performed. */ public byte[] transform(ClassLoader loader, String className, Class classBeingRedefined, ProtectionDomain protectionDomain, byte[] classfileBuffer) throws Exception; /** Called to indicate that the ClassLoader is being discarded by the server. * * @param loader - a class loader that has possibly been used previously * as an argument to transform. */ public void unregisterClassLoader(ClassLoader loader); }
Translator.java |