@Override public void register(String schemaName, Class<?> clazz) throws AbortRuntimeException { ClassRepository repos = new ClassRepository(); repos.add(clazz); repos.add(getTransitiveDependencies(clazz)); repos.write(); }
private ClassLoader loadJars(File... jars) { ClassLoader cl = Thread.currentThread().getContextClassLoader(); URLClassLoader jarExtensions = createClassLoaderFrom(jars, cl); return jarExtensions; }
private Set<Class<?>> getTransitiveDependencies(Class<?> clazz) { Set<Class<?>> transitive = new HashSet<Class<?>>(); transitive.addAll(getSuperClasses(clazz)); for (Field f : findFields(clazz)) { transitive.addAll(getEnumDependencies(f)); } return transitive; }
private static void validateProperties(Bean bean) { Schema schema = bean.getSchema(); ClassRepository repos = new ClassRepository(); for (SchemaProperty prop : schema.get(SchemaProperty.class)) { String value = validateSingle(bean, prop); if (value == null) { continue; } try { conversion.convert(value, repos.loadClass(prop.getType())); } catch (Exception e) { throw Events.CFG105_WRONG_PROPERTY_TYPE(bean.getId(), prop.getName(), prop.getType(), value); } } }
@SuppressWarnings({ "rawtypes", "unchecked" }) @Override public void validate(Collection<Bean> beans) throws AbortRuntimeException { if (validator == null) { validator = Validation.buildDefaultValidatorFactory().getValidator(); } ClassRepository repos = new ClassRepository(); ClassLoader cl = repos.getClassLoader(); ClassLoader org = Thread.currentThread().getContextClassLoader(); try { Thread.currentThread().setContextClassLoader(cl); for (Bean bean : beans) { Class genclazz = forName(bean.getSchema().getType()); Object beanToValidate = conversion.convert(bean, genclazz); logger.debug("Validating {}", beanToValidate); Set<ConstraintViolation<Object>> violations = validator.validate(beanToValidate); String msg = ""; for (ConstraintViolation<Object> v : violations) { msg = msg + v.getPropertyPath() + " " + v.getMessage(); } if (msg != null && !"".equals(msg.trim())) { throw CFG309_VALIDATION_ERROR(msg); } } } finally { Thread.currentThread().setContextClassLoader(org); } }
public void add(Collection<Class<?>> clazzes) { for (Class<?> clazz : clazzes) { add(clazz); } }
public void add(Class<?> clazz) { List<Class<?>> classes = Reflections.computeClassHierarchy(clazz); for (Class<?> aClass : classes) { List<Class<?>> enclosings = Reflections.computeEnclosingClasses(clazz); for (Class<?> enclosing : enclosings) { if (shouldAdd(enclosing)) { dependencies.add(enclosing); } } if (shouldAdd(aClass)) { dependencies.add(aClass); } dependencies.addAll(getTransitiveDependencies(aClass)); } }
private Set<Class<?>> getEnumDependencies(Field f) { Set<Class<?>> transitive = new HashSet<Class<?>>(); if (f.getType().isEnum()) { if (shouldAdd(f.getType())) { transitive.add(f.getType()); } } return transitive; }
public ClassLoader getClassLoader() { return loadJars(jar); }
private static void validatePropertyList(Bean bean) { Schema schema = bean.getSchema(); ClassRepository repos = new ClassRepository(); for (SchemaPropertyList prop : schema.get(SchemaPropertyList.class)) { List<String> values = bean.getValues(prop.getName()); if (values == null) { continue; } for (String value : values) { try { conversion.convert(value, repos.loadClass(prop.getType())); } catch (Exception e) { throw Events.CFG105_WRONG_PROPERTY_TYPE(bean.getId(), prop.getName(), prop.getType(), value); } } } }
private Set<Class<?>> getSuperClasses(Class<?> clazz) { Set<Class<?>> transitive = new HashSet<Class<?>>(); List<Class<?>> classes = computeClassHierarchy(clazz); for (Class<?> superclass : classes) { if (shouldAdd(superclass)) { transitive.add(superclass); } } return transitive; }
public Class<?> loadClass(String className) { ClassLoader org = Thread.currentThread().getContextClassLoader(); try { ClassLoader cl = loadJars(jar); Thread.currentThread().setContextClassLoader(cl); try { return forName(className); } catch (Exception e) { throw new IllegalArgumentException("Could not load stub [" + className + "] from jar [" + jar.getAbsolutePath() + "].", e); } } finally { Thread.currentThread().setContextClassLoader(org); } }