Friday, March 13, 2015

IllegalAccessException

java.lang.IllegalAccessException

IllegalAccessException is described in the javadoc comments as:

An IllegalAccessException is thrown when an application tries to reflectively create an instance (other than an array), set or get a field, or invoke a method, but the currently executing method does not have access to the definition of the specified class, field, method or constructor.
author: unascribed version: 1.14, 12/19/03 see: Class#newInstance() see: java.lang.reflect.Field#set(Object, Object) see: java.lang.reflect.Field#setBoolean(Object, boolean) see: java.lang.reflect.Field#setByte(Object, byte) see: java.lang.reflect.Field#setShort(Object, short) see: java.lang.reflect.Field#setChar(Object, char) see: java.lang.reflect.Field#setInt(Object, int) see: java.lang.reflect.Field#setLong(Object, long) see: java.lang.reflect.Field#setFloat(Object, float) see: java.lang.reflect.Field#setDouble(Object, double) see: java.lang.reflect.Field#get(Object) see: java.lang.reflect.Field#getBoolean(Object) see: java.lang.reflect.Field#getByte(Object) see: java.lang.reflect.Field#getShort(Object) see: java.lang.reflect.Field#getChar(Object) see: java.lang.reflect.Field#getInt(Object) see: java.lang.reflect.Field#getLong(Object) see: java.lang.reflect.Field#getFloat(Object) see: java.lang.reflect.Field#getDouble(Object) see: java.lang.reflect.Method#invoke(Object, Object[]) see: java.lang.reflect.Constructor#newInstance(Object[]) since: JDK1.0

Where is this exception thrown?

Following, is a list of exception messages cross-referenced to the source code responsible for throwing them. Click on the method link to view the code and see how the exception is thrown.

How is this exception thrown?

The following sub-sections identify where this exception is thrown, and how (or why) the code is throwing the exception.

Any source code quoted in this section is subject to the Java Research License unless stated otherwise.

com.sun.jmx.snmp.agent.SnmpMibOid.registerNode(long[], int, SnmpMibNode)

/**
     * Registers a specific node in the tree.
     */
void registerNode(long[] oid, int cursor, SnmpMibNode node) throws IllegalAccessException {
    if (cursor >= oid.length) throw new IllegalAccessException();
    long var = oid[cursor];
    int pos = retrieveIndex(var);
    if (pos == nbChildren) {
        nbChildren++;
        varList = new int[nbChildren];
        varList[0] = (int) var;
        pos = 0;
        if ((cursor + 1) == oid.length) {
            children.insertElementAt(node, pos);
            return;
        }
        SnmpMibOid child = new SnmpMibOid();
        children.insertElementAt(child, pos);
        child.registerNode(oid, cursor + 1, node);
        return;
    }
    if (pos == -1) {
        int[] tmp = new int[nbChildren + 1];
        tmp[nbChildren] = (int) var;
        System.arraycopy(varList, 0, tmp, 0, nbChildren);
        varList = tmp;
        nbChildren++;
        SnmpMibNode.sort(varList);
        int newPos = retrieveIndex(var);
        varList[newPos] = (int) var;
        if ((cursor + 1) == oid.length) {
            children.insertElementAt(node, newPos);
            return;
        }
        SnmpMibOid child = new SnmpMibOid();
        children.insertElementAt(child, newPos);
        child.registerNode(oid, cursor + 1, node);
        return;
    } else {
        SnmpMibNode child = (SnmpMibNode) children.elementAt(pos);
        if ((cursor + 1) == oid.length) {
            if (child == node) return;
            if (child != null && node != null) {
                if (node instanceof SnmpMibGroup) {
                    ((SnmpMibOid) child).exportChildren((SnmpMibOid) node);
                    children.setElementAt(node, pos);
                    return;
                } else if ((node instanceof SnmpMibOid) && (child instanceof SnmpMibGroup)) {
                    ((SnmpMibOid) node).exportChildren((SnmpMibOid) child);
                    return;
                } else if (node instanceof SnmpMibOid) {
                    ((SnmpMibOid) child).exportChildren((SnmpMibOid) node);
                    children.setElementAt(node, pos);
                    return;
                }
            }
            children.setElementAt(node, pos);
            return;
        } else {
            if (child == null) throw new IllegalAccessException();
            ((SnmpMibOid) child).registerNode(oid, cursor + 1, node);
        }
    }
}

Source: "Java SE Downloads: Java SE 6 JDK Source Code", at: http://www.oracle.com/technetwork/java/javase/downloads/index.html

java.lang.Class.newInstance0()

private T newInstance0() throws InstantiationException, IllegalAccessException {
    if (cachedConstructor == null) {
        if (this == Class.class) {
            throw new IllegalAccessException('Can not call newInstance() on the Class for java.lang.Class');
        }
        try {
            Class[] empty = {};
            final Constructor<T> c = getConstructor0(empty, Member.DECLARED);
            java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() {

                public Object run() {
                    c.setAccessible(true);
                    return null;
                }
            });
            cachedConstructor = c;
        } catch (NoSuchMethodException e) {
            throw new InstantiationException(getName());
        }
    }
    Constructor<T> tmpConstructor = cachedConstructor;
    int modifiers = tmpConstructor.getModifiers();
    if (!Reflection.quickCheckMemberAccess(this, modifiers)) {
        Class caller = Reflection.getCallerClass(3);
        if (newInstanceCallerCache != caller) {
            Reflection.ensureMemberAccess(caller, this, null, modifiers);
            newInstanceCallerCache = caller;
        }
    }
    try {
        return tmpConstructor.newInstance((Object[]) null);
    } catch (InvocationTargetException e) {
        Unsafe.getUnsafe().throwException(e.getTargetException());
        return null;
    }
}

Source: "Java SE Downloads: Java SE 6 JDK Source Code", at: http://www.oracle.com/technetwork/java/javase/downloads/index.html

No comments:

Post a Comment