You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Paras Mehta <pa...@elitecore.com> on 2003/05/01 06:48:41 UTC

Error loading custom class loader in Tomcat 4.1.12.

i am trying to load my own classloader.
----------------------------------------

in my server.xml, i have put loader entry as:

 <Context path="" docBase="D:\E-Learning\Application" debug="10"
   reloadable="true" crossContext="true" >

  <Loader Reloadable="false" debug="10" loaderClass="com.ElearningLoader" />

 </Context>

and one jar file which is containg this classlaoder is put in
<tomcat_home>\common\lib

but when i start my tomcat server it gives me this exception:

Catalina.start: LifecycleException:  start: :
java.lang.NoSuchMethodException
LifecycleException:  start: :  java.lang.NoSuchMethodException
        at
org.apache.catalina.loader.WebappLoader.start(WebappLoader.java:678)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:3
456)
        at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)

        at
org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
        at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)

        at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347
)
        at
org.apache.catalina.core.StandardService.start(StandardService.java:4
97)
        at
org.apache.catalina.core.StandardServer.start(StandardServer.java:218
9)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:510)
        at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
        at org.apache.catalina.startup.Catalina.process(Catalina.java:180)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
----- Root Cause -----
java.lang.NoSuchMethodException
        at java.lang.Class.getConstructor0(Class.java:1755)
        at java.lang.Class.getConstructor(Class.java:990)
        at
org.apache.catalina.loader.WebappLoader.createClassLoader(WebappLoade
r.java:781)
        at
org.apache.catalina.loader.WebappLoader.start(WebappLoader.java:655)
        at
org.apache.catalina.core.StandardContext.start(StandardContext.java:3
456)
        at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)

        at
org.apache.catalina.core.StandardHost.start(StandardHost.java:738)
        at
org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1188)

        at
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:347
)
        at
org.apache.catalina.core.StandardService.start(StandardService.java:4
97)
        at
org.apache.catalina.core.StandardServer.start(StandardServer.java:218
9)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:510)
        at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
        at org.apache.catalina.startup.Catalina.process(Catalina.java:180)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)
Stopping service Tomcat-Standalone
Catalina.stop: LifecycleException:  Coyote connector has not been started
LifecycleException:  Coyote connector has not been started
        at
org.apache.coyote.tomcat4.CoyoteConnector.stop(CoyoteConnector.java:1
045)
        at
org.apache.catalina.core.StandardService.stop(StandardService.java:54
6)
        at
org.apache.catalina.core.StandardServer.stop(StandardServer.java:2224
)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:541)
        at org.apache.catalina.startup.Catalina.execute(Catalina.java:400)
        at org.apache.catalina.startup.Catalina.process(Catalina.java:180)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:324)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:203)

My Class loader code is here:

===========================================================

package com;

import java.io.*;
import java.lang.reflect.*;

public class ElearningLoader extends ClassLoader
{ 
    
 public ElearningLoader()
 {
  System.out.println("ElearningLoader Constructor");
 }
 
 ///////////////////////////////////////////////////////////////////////////
 private static String getFileContent(String strFilePath)
 {
  try
  {
   System.out.println("ElearningLoader.getFileContent(" + strFilePath + ")");
   String strFileContent = null;
   FileInputStream in = null;      
   ByteArrayOutputStream outBuf = null;
   
      try
      {
          in = new FileInputStream(strFilePath);
          
          outBuf = new ByteArrayOutputStream();

          byte[] buffer = new byte[4096];
          int count = in.read(buffer);
          while (count > 0)
          {
              outBuf.write(buffer, 0, count);
              count = in.read(buffer);
          }
          
    strFileContent = outBuf.toString();
      }
      finally
      {
          try
          {
              if(in != null) in.close();     
     if(outBuf != null) outBuf.close();     
          }
          catch(Exception e)
          {
     System.out.println("getFileContent -> Exception while closing FileInputStream, ByteArrayOutputStream ojbects "+ e);        
          }
      }
      
   return strFileContent;     
  }
  catch(Exception e)
  {
   System.out.println("getFileContent -> Exception "+ e);
   r
eturn null;
  }
 }

 ///////////////////////////////////////////////////////////////////////////
    public Class findClass(String name)
 {
  Class clsLoaded = null;
  byte[] byteBuffer = null;
  char[] charBuffer = null;

  System.out.println("ElearningLoader.findClass(" + name + ")" );

  try


   String strEncrypted = getFileContent(name + ".class");

   StringReader sr = new StringReader(strEncrypted);

    byteBuffer = new byte[strDecrypted.length()];
   charBuffer = new char[strDecrypted.length()];

   int count = sr.read(charBuffer);

   for(int i=0;i<charBuffer.length;i++)
    byteBuffer[i] = (byte)charBuffer[i];

   clsLoaded = defineClass(name, byteBuffer, 0, count);

  }
  catch(Exception e)


   System.out.println("Exception in findClass method = "+e.getMessage());
   e.printStackTrace();
  }

  return clsLoaded;
 }

 public static void main(String[] args) throws Throwable


  ElearningLoader objElearningLoader = new ElearningLoader();

  Class cls = objElearningLoader.findClass(args[0]);

   }
}

=====================================================

Please help me resolve this problem.

Paras Mehta.