Hello all,
 
I have a strange question.  I need to load a class that is inside a packkage of a web 
application from within a taglib that the web application is using within its context.
 
Let me try and explain this:
 
I have a bunch of entities in the package: com.name.webapp.entities.  In this package, 
there are two base classes: Entity and MetaDataEntity.  There are quite a few entity 
classes that are derived from these two clases.
 
I've setup a taglib to take an array of either Entity or MetaDataEntity from the 
request's attribute map and loop through the array do some processing.  The problem I 
have is that different processing needs to be done if the array is of a type derived 
from Entity or derived from MetaDataEntity.  To do this, I get the first element in 
the array and get that object's superclass.
 
So the code I have in the taglib to discover the super class is:
 
Object entities[] = (Object []) pageContext.getRequest().getAttribute("list");
Object entity = entities[0];
className = entity.getClass().getSuperclass().getName();
if(className.startsWith("com.name.webapp.entities.Entity"))
 // do one thing...
else if(className.startsWith("com.name.webapp.entities.MetaDataEntity"))
 // do another...
else
 // throw exception.
 
(realizing that this will only work with direct descendants of the 2 base classes)
      
Which works fine if the array is not empty.  However, when entities.length == 0, I 
have to use a different method:
 
Object entities[] = (Object []) pageContext.getRequest().getAttribute("list");
// class name from the array is [Lcom.name.webapp.entities.entityname, get rid of the 
[L...
className = entities.getClass().getName().substring(2);
className = Class.forName(className).getSuperclass().getName();
 
However, I get a ClassNotFoundException.  I believe that is because the taglib is 
using a different class loader than my webapp, which makes sense.  But is there any 
other way (short of creating my own class loader for the webapp and accessing that 
loader from the taglib) to do this?  I'd rather avoid a custom classloader at all 
costs.
 
Thanks for any advice.
 
-Mike
 
 

Reply via email to