View Javadoc

1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *  http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
18   */
19  
20  //
21  // This source code implements specifications defined by the Java
22  // Community Process. In order to remain compliant with the specification
23  // DO NOT add/change/or delete method signatures!
24  //
25  
26  package javax.persistence.spi;
27  
28  import java.security.ProtectionDomain;
29  import java.lang.instrument.IllegalClassFormatException;
30  
31  /**
32   * @version $Rev: 467742 $ $Date: 2006-10-25 12:30:38 -0700 (Wed, 25 Oct 2006) $
33   */
34  public interface ClassTransformer {
35      /**
36       * Invoked when a class is being loaded or redefined. The implementation of this
37       * method may transform the supplied class file and return a new replacement class
38       * file.
39       *
40       * @param loader              The defining loader of the class to be transformed, may be null if
41       *                            the bootstrap loader
42       * @param className           The name of the class in the internal form of fully qualified
43       *                            class and interface names
44       * @param classBeingRedefined If this is a redefine, the class being redefined,
45       *                            otherwise null
46       * @param protectionDomain    The protection domain of the class being defined or
47       *                            redefined
48       * @param classfileBuffer     The input byte buffer in class file format - must not be
49       *                            modified
50       * @return A well-formed class file buffer (the result of the transform), or null if
51       *         no transform is performed
52       * @throws java.lang.instrument.IllegalClassFormatException
53       *          If the input does not represent a well-formed
54       *          class file
55       */
56      byte[] transform(
57              ClassLoader loader,
58              String className,
59              Class<?> classBeingRedefined,
60              ProtectionDomain protectionDomain,
61              byte[] classfileBuffer) throws IllegalClassFormatException;
62  
63  }