Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 9183 invoked from network); 14 May 2010 03:08:23 -0000 Received: from unknown (HELO mail.apache.org) (140.211.11.3) by 140.211.11.9 with SMTP; 14 May 2010 03:08:23 -0000 Received: (qmail 20804 invoked by uid 500); 14 May 2010 03:08:23 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 20715 invoked by uid 500); 14 May 2010 03:08:22 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org List-Id: Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 20703 invoked by uid 99); 14 May 2010 03:08:22 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 14 May 2010 03:08:22 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 14 May 2010 03:08:20 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id EDEF623888CB; Fri, 14 May 2010 03:07:58 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r944089 - /geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java Date: Fri, 14 May 2010 03:07:58 -0000 To: scm@geronimo.apache.org From: rwonly@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20100514030758.EDEF623888CB@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: rwonly Date: Fri May 14 03:07:58 2010 New Revision: 944089 URL: http://svn.apache.org/viewvc?rev=944089&view=rev Log: GERONIMO-4945 Unable to deploy ejb with custom annotation Modified: geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java Modified: geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java URL: http://svn.apache.org/viewvc/geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java?rev=944089&r1=944088&r2=944089&view=diff ============================================================================== --- geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java (original) +++ geronimo/server/branches/2.1/framework/modules/geronimo-kernel/src/main/java/org/apache/geronimo/kernel/classloader/TemporaryClassLoader.java Fri May 14 03:07:58 2010 @@ -100,7 +100,7 @@ public class TemporaryClassLoader extend } // Annotation classes must be loaded by the normal classloader - if (isAnnotationClass(bytes)) { + if (isAnnotationClass(bytes)||isEnum(bytes)) { return super.loadClass(name, resolve); } @@ -141,5 +141,26 @@ public class TemporaryClassLoader extend } } -} + + /** + * Fast-parse the given class bytecode to determine if it is an + * enum class. + */ + private static boolean isEnum(byte[] bytes) { + IsEnumVisitor isEnumVisitor = new IsEnumVisitor(); + ClassReader classReader = new ClassReader(bytes); + classReader.accept(isEnumVisitor, ClassReader.SKIP_DEBUG); + return isEnumVisitor.isEnum; + } + + public static class IsEnumVisitor extends EmptyVisitor { + public boolean isEnum = false; + + public void visit(int version, int access, String name, String signature, String superName, String[] interfaces) { + isEnum = (access & Opcodes.ACC_ENUM) != 0; + } + + } + +}