/** * Generates interface class using collection of rules. * * @param className name of result class * @param rules collection of rules what will be used as interface methods * @param classLoader class loader what will be used to load generated * interface * @return generated interface * @throws Exception if an error has occurred */ public static Class<?> generateInterface(String className, RuleInfo[] rules, ClassLoader classLoader) throws Exception { ClassWriter classWriter = new ClassWriter(0); String name = className.replace('.', '/'); classWriter.visit(Opcodes.V1_7, PUBLIC_ABSTRACT_INTERFACE, name, null, JAVA_LANG_OBJECT, null); for (RuleInfo ruleInfo : rules) { String ruleName = ruleInfo.getName(); classWriter.visitMethod(PUBLIC_ABSTRACT, ruleName, getMethodTypes(ruleInfo), null, null); } classWriter.visitEnd(); // Create class object. // ClassUtils.defineClass(className, classWriter.toByteArray(), classLoader); // Return loaded to classpath class object. // return Class.forName(className, true, classLoader); }