public Class loadClass()

in extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/engine/dependencyScan/loaders/ScannerClassloader.java [81:145]


    public Class<?> loadClass(String className) throws ClassNotFoundException
    {
        //check if our class exists in the tempDir

        if (_alreadyScanned.containsKey(className))
        {
            return _alreadyScanned.get(className);
        }

        File target = getClassFile(className);
        if (!target.exists())
        {
            return super.loadClass(className);
        }

        //ClassResource data = WeavingContext.getFileChangedDaemon().getClassMap().get(className);
        //if (data != null && !data.getRefreshAttribute().requiresRefresh()) {
        //    return data.getAClass();
        //}

        FileInputStream iStream = null;

        int fileLength;
        byte[] fileContent;
        try
        {
            fileLength = (int) target.length();
            fileContent = new byte[fileLength];
            iStream = new FileInputStream(target);
            int len = iStream.read(fileContent);
            if (_logger.isLoggable(Level.FINER))
            {
                _logger.log(Level.FINER, "class read {0} bytes read", String.valueOf(len));
            }
            //we have to do it here because just in case
            //a dependent class is loaded as well we run into classcast exceptions
            Class retVal = super.defineClass(className, fileContent, 0, fileLength);
            _alreadyScanned.put(className, retVal);
            return retVal;

        }
        catch (FileNotFoundException e)
        {
            throw new ClassNotFoundException(e.toString());
        }
        catch (IOException e)
        {
            throw new ClassNotFoundException(e.toString());
        }
        finally
        {
            if (iStream != null)
            {
                try
                {
                    iStream.close();
                }
                catch (Exception e)
                {
                    _logger.log(Level.SEVERE, "", e);
                }
            }
        }

    }