Class<?> createBeanClass() { ClassWriter writer = new ClassWriter(0); String name = prefix + Integer.toString(generatedClassCounter.addAndGet(1)); writer.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, name, null, "java/lang/Object", null); MethodVisitor methodVisitor = writer.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null); methodVisitor.visitCode(); methodVisitor.visitVarInsn(Opcodes.ALOAD, 0); methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); methodVisitor.visitInsn(Opcodes.RETURN); methodVisitor.visitMaxs(1, 1); methodVisitor.visitEnd(); writer.visitEnd(); byte[] bytecode = writer.toByteArray(); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); try { Class<?> result = (Class<?>) defineClassMethod.invoke(classLoader, name.replace("/", "."), bytecode, 0, bytecode.length); LOGGER.fine("Created class " + result.getName()); return result; } catch (Throwable t) { LOGGER.log(Level.SEVERE, "error calling ClassLoader.defineClass", t); return null; } } }
Class<?> createBeanClass() { ClassWriter writer = new ClassWriter(0); String name = prefix + Integer.toString(generatedClassCounter.addAndGet(1)); writer.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, name, null, "java/lang/Object", null); MethodVisitor methodVisitor = writer.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null); methodVisitor.visitCode(); methodVisitor.visitVarInsn(Opcodes.ALOAD, 0); methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); methodVisitor.visitInsn(Opcodes.RETURN); methodVisitor.visitMaxs(1, 1); methodVisitor.visitEnd(); writer.visitEnd(); byte[] bytecode = writer.toByteArray(); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); try { Class<?> result = (Class<?>) defineClassMethod.invoke(classLoader, name.replace("/", "."), bytecode, 0, bytecode.length); LOGGER.fine("Created class " + result.getName()); return result; } catch (Throwable t) { LOGGER.log(Level.SEVERE, "error calling ClassLoader.defineClass", t); return null; } } }
Class<?> createBeanClass() { ClassWriter writer = new ClassWriter(0); String name = prefix + Integer.toString(generatedClassCounter.addAndGet(1)); writer.visit(Opcodes.V1_6, Opcodes.ACC_PUBLIC, name, null, "java/lang/Object", null); MethodVisitor methodVisitor = writer.visitMethod(Opcodes.ACC_PUBLIC, "<init>", "()V", null, null); methodVisitor.visitCode(); methodVisitor.visitVarInsn(Opcodes.ALOAD, 0); methodVisitor.visitMethodInsn(Opcodes.INVOKESPECIAL, "java/lang/Object", "<init>", "()V"); methodVisitor.visitInsn(Opcodes.RETURN); methodVisitor.visitMaxs(1, 1); methodVisitor.visitEnd(); writer.visitEnd(); byte[] bytecode = writer.toByteArray(); ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); try { Class<?> result = (Class<?>) defineClassMethod.invoke(classLoader, name.replace("/", "."), bytecode, 0, bytecode.length); LOGGER.fine("Created class " + result.getName()); return result; } catch (Throwable t) { LOGGER.log(Level.SEVERE, "error calling ClassLoader.defineClass", t); return null; } } }