public Class getJavaClass()

in cayenne-di/src/main/java/org/apache/cayenne/di/spi/DefaultAdhocObjectFactory.java [81:163]


    public Class<?> getJavaClass(String className) {
        // is there a better way to get array class from string name?
        if (className == null) {
            throw new NullPointerException("Null class name");
        }

        ClassLoader classLoader = classLoaderManager.getClassLoader(className.replace('.', '/'));

        // use custom logic on failure only, assuming primitives and arrays are not that common
        try {
            return Class.forName(className, true, classLoader);
        } catch (ClassNotFoundException e) {
            if (!className.endsWith("[]")) {
                switch (className) {
                    case "byte":
                        return Byte.TYPE;
                    case "int":
                        return Integer.TYPE;
                    case "short":
                        return Short.TYPE;
                    case "char":
                        return Character.TYPE;
                    case "double":
                        return Double.TYPE;
                    case "long":
                        return Long.TYPE;
                    case "float":
                        return Float.TYPE;
                    case "boolean":
                        return Boolean.TYPE;
                    case "void":
                        return Void.TYPE;

                    // try inner class often specified with "." instead of $
                    default:
                        int dot = className.lastIndexOf('.');
                        if (dot > 0 && dot + 1 < className.length()) {
                            className = className.substring(0, dot) + "$" + className.substring(dot + 1);
                            try {
                                return Class.forName(className, true, classLoader);
                            } catch (ClassNotFoundException nestedE) {
                                // ignore, throw the original exception...
                            }
                        }
                        break;
                }

                throw new DIRuntimeException("Invalid class: '%s'", e, className);
            }

            if (className.length() < 3) {
                throw new IllegalArgumentException("Invalid class name: '" + className + "'");
            }

            // TODO: support for multi-dim arrays
            className = className.substring(0, className.length() - 2);

            switch (className) {
                case "byte":
                    return byte[].class;
                case "int":
                    return int[].class;
                case "long":
                    return long[].class;
                case "short":
                    return short[].class;
                case "char":
                    return char[].class;
                case "double":
                    return double[].class;
                case "float":
                    return float[].class;
                case "boolean":
                    return boolean[].class;
            }

            try {
                return Class.forName("[L" + className + ";", true, classLoader);
            } catch (ClassNotFoundException e1) {
                throw new DIRuntimeException("Invalid class: '%s'", e1, className);
            }
        }
    }