You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by Tim Meals <tm...@azulix.com> on 2004/10/04 21:22:53 UTC

Help with getMethod and AntClassLoader

I'm having some difficulty figuring out why the AntClassLoader isn't 
finding a public void static method with the parameters I'm asking for.  
My environment is Linux 2.6.8, Sun JDK 1.4.2 and Ant 1.6.2.

I've defined a class that should call a well-known method inside of a 
dynamically-loaded class.  Here's a short snippet of sample code:

public class Generator
{
    public String generate( String className, boolean flag, ClassLoader cl )
       throws Exception
    {
       Puck p = new Puck();    // this gets passed around to other 
classes as an
                                              // object they can write 
common data to
       Class[] parameters = { p.getClass(), boolean.class };
       Object[] arguments = { p, new Boolean( true ) };

       Class c = Class.forName( className, true, cl );
       Method generateMe = c.getMethod( "generate", parameters );
       generateMe.invoke( null, p, flag );

       return p.toString();
    }
}

public class SampleClass
{
    public static void generate( Puck p, boolean flag )
    {
       // recursively call generate on other classes, using code similar 
to above ...
       Method m = c.getMethod( "generate", parameters );
       m.invoke( null, p, flag );
    }
}

public class GenerateAntTask extends MatchingTask
{
    private Path classpath;

    // all of the MatchingTask attributes and stuff are up here ...

    public void execute()
       throws BuildException
    {
       Generator g = new Generator();
       AntClassLoader cl = new AntClassLoader(
          getProject().getCoreLoader(),
          getProject(),
          classpath,
          true );
       String result = g.generate( "SampleClass", true, cl );
    }
}

If I run the Generator through BeanShell or via an Ant <java> task (with 
a main method, of course), it works fine.  If I try running my custom 
task, I get a NoSuchMethodException when trying to call getMethod.  I'm 
guessing it's the AntClassLoader, because that's the only variant 
between the tests, but AntClassLoader is used by ExecuteJava.java to 
perform the <java> task.

Thanks to all who can help me see something I'm overlooking.

Tim

-- 
 
Tim Meals 	
Senior Programmer


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org