i solved problem with NoClassDefFoundError

but i have other problem

This program will use SimpleClassLoader.
        >>>>>> Load class : TestClass
        >>>>>> Not a system class.
        >>>>>> Load class : test.LocalModule
        >>>>>> Not a system class.
        >>>>>> Load class : java.lang.Object
        >>>>>> returning system class (in CLASSPATH).
        >>>>>> Returning newly loaded class.
        >>>>>> Returning newly loaded class.
        >>>>>> Load class : java.util.Vector
        >>>>>> returning system class (in CLASSPATH).
Caught exception : java.lang.ClassCastException



########################## myjsp.jsp #########################

    SimpleClassLoader sc = new SimpleClassLoader("M:\\Java\\JSP 
Projects\\Ticker\\servlet4\\");
       Object o;
       String tst = "TestClass";

       System.out.println("This program will use SimpleClassLoader.");
           try {
               Class cClass = sc.loadClass(tst);
              o= cClass.newInstance();
    

///            here ... throw  cast exception ... in debuger i see that in "o" is 
instance of TestClass (TestClass is implented class of interface LocalModule)

          ((LocalModule)o).start("DF");
        

           } catch (Exception e) {
               System.out.println("Caught exception : "+e);
          }




#############################

package test;

public interface LocalModule {
    /* Start the module */
    void start(String option);
}


#############################
I'm using this classloader


/**
 * Created by IntelliJ IDEA.
 * User: Alknaion
 * Date: 16.6.2003
 * Time: 12:23:54
 * To change this template use Options | File Templates.
 */


package test;
import java.util.*;
import java.io.*;

public class SimpleClassLoader extends ClassLoader {
    private Hashtable classes = new Hashtable();
    private String basePath;

    public SimpleClassLoader(String basePath) {
     this.basePath = basePath;
    }


   private byte[] getTypeFromBasePath(String typeName) {

  FileInputStream fis;
  String fileName = basePath + File.separatorChar
          + typeName.replace('.', File.separatorChar)
          + ".class";

  try {
   fis = new FileInputStream(fileName);
  } catch (FileNotFoundException e) {
   return null;
  }

  BufferedInputStream bis =
          new BufferedInputStream(fis);
  ByteArrayOutputStream out =
          new ByteArrayOutputStream();

  try {
   int c = bis.read();
   while (c != -1) {
    out.write(c);
    c = bis.read();
   }
  } catch (IOException e) {
   return null;
  }
  return out.toByteArray();
 }

    public Class loadClass(String className) throws ClassNotFoundException {
        return (loadClass(className, true));
    }

    public synchronized Class loadClass(String className, boolean resolveIt)
     throws ClassNotFoundException {
        Class result;
        byte  classData[];

        System.out.println("        >>>>>> Load class : "+className);

        result = (Class)classes.get(className);
        if (result != null) {
            System.out.println("        >>>>>> returning cached result.");
            return result;
        }

        try {
            result = super.findSystemClass(className);
            System.out.println("        >>>>>> returning system class (in 
CLASSPATH).");
            return result;
        } catch (ClassNotFoundException e) {
            System.out.println("        >>>>>> Not a system class.");
        }

        /* Try to load it from our repository */
        classData = getTypeFromBasePath(className);
        if (classData == null) {
            throw new ClassNotFoundException();
        }

        /* Define it (parse the class file) */
        result = defineClass(className, classData, 0, classData.length);
        if (result == null) {
            throw new ClassFormatError();
        }

        if (resolveIt) {
            resolveClass(result);
        }

        classes.put(className, result);
        System.out.println("        >>>>>> Returning newly loaded class.");
        return result;
    }
}

Reply via email to