private static void checkClassAndConstructorProperties(
            String clsName,
            Class<?> c,
            Constructor<?> constructor) throws SynBinderException
    {
        if (!Modifier.isPublic(constructor.getModifiers())) {
            String msg = String.format("Class %s does not have a default public constructor", clsName);
            throw new SynBinderException(msg);
        }
        
        int modifiers = c.getModifiers();
        if (Modifier.isAbstract(modifiers)) {
            throw new SynBinderException(String.format(
                    "Class %s is abstract", c.getCanonicalName()));
        }
        if (!Modifier.isPublic(modifiers)) {
            throw new SynBinderException(String.format(
                    "Class %s is not public", c.getCanonicalName()));
        }
        if (c.isAnnotation()) {
            throw new SynBinderException(String.format(
                    "Class %s is an annotation", c.getCanonicalName()));
        }
        if (c.isEnum()) {
            throw new SynBinderException(String.format(
                    "Class %s is an enum", c.getCanonicalName()));
        }
        if (c.isInterface()) {
            throw new SynBinderException(String.format(
                    "Class %s is an interface", c.getCanonicalName()));
        }
    }