Click here to Skip to main content
15,880,469 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I have a jar file which contains only testcase.class files. I need to parse that and find all the classes defined in that jar file and need to generate one report. I tried to do it with the reflection concept in Java. Some how, when loading a class is fine, but trying to get the declared methods of it, I am getting the following error. (Note class is loaded, I am able to get the name and canonical name of the loaded class but I error at trying to get declared methods).

What I have tried:

<pre lang="Java">for (String clazz: classes) {  
            String className = clazz.replaceAll("/",  
 ".").replaceAll(".class","");  
            try {  
                URL url = file.toURI().toURL();  
                URL[] urls = new URL[]{url};  
                URLClassLoader cl = new URLClassLoader(urls);  
                Class cls = cl.loadClass(className);  
                System.out.println("##############################");  
                cls.getDeclaredMethods();
                //clazzes.add(getClassObject(cls));  
                //break;  
            } catch (MalformedURLException e) {  
                e.printStackTrace();  
            } catch (ClassNotFoundException e) {  
                e.printStackTrace();  
            }  
        }



Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Authenticator
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/java.net.URLClassLoader.defineClass(URLClassLoader.java:555)
    at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:458)
    at java.base/java.net.URLClassLoader$1.run(URLClassLoader.java:452)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:451)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at com.springboot.example.springBootExample.service.JarParserService.getTypes(JarParserService.java:99)
    at com.springboot.example.springBootExample.service.JarParserService.constructPackages(JarParserService.java:86)
    at com.springboot.example.springBootExample.service.JarParserService.getClassTypes(JarParserService.java:78)
    at com.springboot.example.springBootExample.service.JarParserService.scanJar(JarParserService.java:61)
    at com.springboot.example.springBootExample.service.JarParserService.getAllPackages(JarParserService.java:34)
    at com.springboot.example.springBootExample.service.FindClassesFromJarService.parseJar(FindClassesFromJarService.java:61)
    at com.springboot.example.springBootExample.service.FindClassesFromJarService.main(FindClassesFromJarService.java:31)
Caused by: java.lang.ClassNotFoundException: javax.mail.Authenticator
    at java.base/java.net.URLClassLoader.findClass(URLClassLoader.java:476)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:588)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 17 more

Process finished with exit code 1
Posted
Updated 30-Sep-22 1:15am

1 solution

Look at the error message:
Exception in thread "main" java.lang.NoClassDefFoundError: javax/mail/Authenticator

You need to find out why that class is not found.

[edit]
Probably because Authenticator (Java(TM) EE 7 Specification APIs)[^] is an abstract class.
[/edit]
 
Share this answer
 
v2
Comments
bharath bhushan 2022 30-Sep-22 7:44am    
Actually I am not loading javax/mail/Authenticator class and I don't know how it came into picture.
Richard MacCutchan 30-Sep-22 7:55am    
You will have to work through the stack trace, and/or use the debugger to find out exactly where it is going wrong, and why.
bharath bhushan 2022 30-Sep-22 10:14am    
Project - 1
-----------
Java1.java
Java2.java
Java3.java extending com.google.fun

Pom file have dependency of com.google.fun



Project - 2
------------
Jarparser.java
parsing Project - 1.jar file
In that at entry of Java3.class file we are getting NoClassDefFound error for com.google.fun
Richard MacCutchan 30-Sep-22 10:48am    
I have not the remotest idea what that is supposed to mean. If you have information to add to your question then please use the Improve question link above, and add complete details there.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900