Parse .class files in runtime - how?

Hi, I need help :)
I'm trying to make a Java application that scans all the .class files it can find, looking for my custom annotations, and then parses them into an XML file. I have a class that scans the classpath, finds all .class files, and passes them on to the parser. Now, when I run this project in Eclipse, it works fine - finds all the .class files, filters them and parses them. However, when I convert the app into a runnable JAR, or an EXE file for Windows, it doesn't find anything. Even if the class files are in the directory where the app is, it still doesn't see them. And when I explicitly select a .class file and give it to my classFinder class, I get a ClassNotFound Exception. Here's the code that I use to scan for all .class files and filter them, I suspect that's where the problem is:
public class ClassFinder {
     private final FilenameFilter classFilter = new FilenameFilter() {
          public boolean accept(File dir, String name) {
               return name.endsWith(".class");
      * Finds all classes that are in the directories on the classpath. It will
      * find all classes in subdirectories as well. Note that this method will
      * not search for classes that are in jars on the classpath.
      * @return a list of found classes
     public List<Class<?>> findAllClassesOnClasspath() {
          List<Class<?>> classes = new LinkedList<Class<?>>();
          List<String> classNames = listClassNames();
          for (String className : classNames) {
               className = className.replace(File.separatorChar, '.');
               className = className.substring(0, className.length() - ".class".length());
               if (!className.contains("$")) {
                    try {
                         Class<?> clazz = Class.forName(className);
                         if (clazz.getAnnotation(SuiteAnnotation.class) != null) {
                              classes.add(clazz);
                    } catch (ClassNotFoundException e) {
                         throw new RuntimeException(e);
          return classes;
     private List<String> listClassNames() {
          String classpath = System.getProperty("java.class.path", "");
          StringTokenizer filesTokenizer = new StringTokenizer(classpath, File.pathSeparator);
          List<String> classes = new LinkedList<String>();
          while (filesTokenizer.hasMoreTokens()) {
               String token = filesTokenizer.nextToken();
               File classpathElement = new File(token);
               if (classpathElement.isDirectory()) {
                    String elementPath = classpathElement.getAbsolutePath();
                    List<File> dirs = new LinkedList<File>();
                    dirs.add(classpathElement);
                    dirs.addAll(findSubdirectories(classpathElement));
                    for (File dir : dirs) {
                         String packageName = dir.getAbsolutePath().substring(elementPath.length());
                         if (packageName.startsWith("" + File.separatorChar)) {
                              packageName = packageName.substring(1);
                         List<String> classesInDir = Arrays.asList(dir.list(classFilter));
                         if (classesInDir == null) {
                              System.out.println("Root je: " + dir.getName());
                         List<String> fullClassNames = new LinkedList<String>();
                         for (String classInDir : classesInDir) {
                              fullClassNames.add(packageName + File.separatorChar + classInDir);
                         classes.addAll(fullClassNames);
          return classes;
     private List<File> findSubdirectories(File dir) {
          assert dir.isDirectory();
          List<File> results = new LinkedList<File>();
          List<File> rootFiles = Arrays.asList(dir.listFiles());
          for (File file : rootFiles) {
               if (file.isDirectory()) {
                    results.add(file);
                    results.addAll(findSubdirectories(file));
          return results;
     public static void main(String[] args) {
          List<Class<?>> classes = new ClassFinder().findAllClassesOnClasspath();
          for (Class<?> clazz : classes) {
               System.out.println(clazz);
}Can anyone help? Why does this work if I run it as a project in Eclipse (or in Netbeans, works in both), but not when I run it as a standalone JAR or EXE file in Windows? When run as a project, it returns a list of classes it found, but when run as a runnable JAR, or EXE in Windows, it doesn't find anything. Why?

I've added this:
if (className.startsWith(".")) {
     className = className.substring(1);
}And now I get this:
Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: NewTest (wrong name: parser/NewTest)
     at java.lang.ClassLoader.defineClass1(Native Method)
     at java.lang.ClassLoader.defineClassCond(ClassLoader.java:632)
     at java.lang.ClassLoader.defineClass(ClassLoader.java:616)
     at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
     at java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
     at java.net.URLClassLoader.access$000(URLClassLoader.java:58)
     at java.net.URLClassLoader$1.run(URLClassLoader.java:197)
     at java.security.AccessController.doPrivileged(Native Method)
     at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
     at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:296)
     at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
     at parser.ClassFinder.findAllClassesOnClasspath(ClassFinder.java:54)
     at parser.Parser.getClassNames(Parser.java:51)
     at testresultsparser.ListBean.getWholeListModel(ListBean.java:60)
     at testresultsparser.TestResultsParserView.initComponents(TestResultsParserView.java:142)
     at testresultsparser.TestResultsParserView.<init>(TestResultsParserView.java:33)
     at testresultsparser.TestResultsParserApp.startup(TestResultsParserApp.java:19)
     at org.jdesktop.application.Application$1.run(Application.java:171)
     at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
     at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
     at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)

Similar Messages

  • How to find the location of java class files at runtime?

    Does anyonw have an idea how to get the file name of a java class given the binary name?
    I mean how can I get the file name for my class myPackage.myClass?
    I am looking for a function which takes "myPackage.myClass" as input and returns
    "c:\\javaprojects\\myPackage\\myClass.class".
    I tried to do it with the LassLoader class but it did not work. Does anyone have an idea if the Java core API already has a function which does that?
    Thanks, Bernhard

    Hi ,
    It is a simple SAMPLE code , you think and build a logics to handle all classes.
    Try this sample, It doesn't handle the inner classes you put logic to handle the logics for inner classes.
    The inner class format is it contains the character $ in the File location but inside the code you put "." instedad of "$" you to find out or put trials.
    package pkg1;
    import java.io.* ;
    import java.util.* ;
    import java.util.zip.* ;
    public class ClsB {
         private static Vector clsPaths ;
         public static Vector getPaths() {
              if( clsPaths == null ) {
                   String paths = System.getProperty( "java.class.path" ) ;
                   // In linux or solarise use the following
                   // StringTokenizer st = new StringTokenizer( paths , ":\n" ) ;
                   StringTokenizer st = new StringTokenizer( paths , ";\n" ) ;
                   clsPaths = new Vector() ;
                   while( st.hasMoreTokens() ) {
                        String path = st.nextToken() ;
                        File f = new File( path ) ;
                        if( f.exists() ) {
                             try {
                                  f = f.getCanonicalFile() ;
                                  clsPaths.add( f ) ;
                             }catch( IOException ioe ) { }
              return clsPaths ;
         public static String findClassPath( String fullClassName ) {
              Vector v = getPaths() ;
              for( int i = 0 ; i < v.size() ; i++ ) {
                   File f = ( File ) v.get( i ) ;
                   String path = findIn( f , fullClassName ) ;
                   if( path != null )
                        return path ;
              return null ;
         static boolean isJar( File jar ) {
              if( jar.isDirectory() )
                   return false ;
              try {
                   ZipFile zf = new ZipFile( jar ) ;
                   return true ;
              } catch ( ZipException ze ) {
                   // It is not a jar file
                   // you handle this
              } catch ( IOException ioe ) {
                   ioe.printStackTrace() ;
              return false ;
         static String findIn( File dirOrJar , String clsName ) {
              if( isJar( dirOrJar ) ) {
                   // It is something different because the class inside the jar file
                   // Simply I return the jar file location and the entry name ,
                   // but you put action what you want
                   if( isInsideJar( dirOrJar , clsName ) ) {
                        // All archieve file using the path separator is '/'
                        return dirOrJar.getPath() + "!" + clsName.replace( '.' , '/' ) + ".class" ;
              } else {
                   File f = new File( dirOrJar , clsName.replace( '.' , File.separatorChar ) + ".class" ) ;
                   if( f.exists() ) {
                        return f.getPath() ;
              return null ;
         static boolean isInsideJar( File jar , String clsName ) {
              try {
                   ZipFile zf = new ZipFile( jar ) ;
                   // All archieve file using the path separator is '/'
                   ZipEntry ze = zf.getEntry( clsName.replace( '.' , '/' ) + ".class" );
                   return ( ze != null ) ;
              } catch ( ZipException ze ) {
                   ze.printStackTrace() ;
              } catch ( IOException ioe ) {
                   ioe.printStackTrace() ;
              return false ;
         public static void main(String[] args) {
              System.out.println( findClassPath( "pkg1.ClsB" ) );
              System.out.println( findClassPath( "pkg1.pkg2.ClsA" ) );
    }

  • How to read the java class file to convert it in java.

    hello all,
    i m developing the java application which generated the java code from the java 'class file' .
    Can anybody please help me, Is any java support for reading the class file? or how to know the class file format?
    I know the application javad, jad, javap which is doing the same thing.
    thanks for reply,
    - Jayd

    do you mean decompiling? there are tons of java decompilers available out there, what exactly are you trying to do here?

  • How to convert a .jad file to .class file in JAVA Swings.

    Hi all,
    Sorry for the interruption.I am also facing the same problem.I am using DEJDecompiler.But my application is not J2ME But J2EE.( a Swing application).I opened .class file and made some changes but I dont know how to convert into a .class file again.
    I tried saving .jad file to .java file.Then it is showing lot of errors in Eclipse Platform.I doubt if there are any errors in the .class file already,then how could the program would run.I put all the programs in the respective platforms only and then testing.It fails.
    (2) one more question,is if I do not need to disturb any existing coding and need to create a seperate java file which will do my customisation,then what should I do.I could not get any interfaces in the program.
    Please help me as the matter is most urgent.
    Thanks in advance
    With regds
    Satheesh.K

    I tried saving .jad file to .java file.Then it is
    showing lot of errors in Eclipse Platform.I doubt if
    there are any errors in the .class file already,then
    how could the program would run.I put all the programs
    in the respective platforms only and then testing.It
    fails.So who's Java program/library are you trying to steal?
    (2) one more question,is if I do not need to disturb
    any existing coding and need to create a seperate java
    file which will do my customisation,then what should I
    do.I could not get any interfaces in the program.
    Please help me as the matter is most urgent.Wow, you urgently need to steal someones program/library. The best person to give you advice urgently is the owner of the program/library you are trying to steal.
    Thanks in advancePlease don't thank me because I'm not going to help you!
    With regds
    Satheesh.K

  • What are "Name$1.class" files and how do I generate them in Eclipse

    I have the source code of a rather large java application and I want to set up an Eclipse project for it.
    After diffing the WEB-INF directory generated by Eclipse with the one generated by the original maven build script I noticed that there are several files of the form "Name$1.class" which do not exist in the Eclipse output.
    My questions are, what is the purpose of this $1 string in the class file name and how do I generate those in Eclipse?

    ok, but why are they generated in the Maven environment but not in the Eclipse environment?
    To be exact, Eclipse does create inner class files, however when diffing both output directories I have some extra inner class files generated by Maven that are not there in the Eclipse output.
    Maybe there are some java compiler settings for this?

  • How do i compile a class file to become an exe (application file)

    I know jbuilder and other 3 rd party software are able to to that. I just want to know whether jdk1.3 compiler able to do it...

    Hm ...
    if you think of a compiler producing an executable file, this means, the application is compiled, linked and bound at file-level - what about the features of loading and linking classes during runtime or the ability to replace class files during runtime and load/link it dynamically?- Guess, a compiler for java can compile static applications, which need no dynamic linking of classes, but is it also able to keep this functionality of java this way?- I don't think so (but I never tested one of these compilers).
    greetings Marsian

  • Win xp not opening class file.

    win xp not opening class file.
    Runtime.getRuntime().exec("cmd /C start c:/database/Myclass.class");
    or
    Runtime.getRuntime().exec("cmd /C c:/database/Myclass.class");
    is this code wrong for xp ?

    let me give some more information...
    i have c:\database
    in this folder i have 2 class...Myclass.class and Dbconnection.class
    Myclass simply uses the database connection from Dbconnection.class , nothing else.
    you see both of the classes are in the same folder(i.e c:\database) and there is no package
    statement inside the code .
    in command prompt if i do....
    c:\database\java Myclass // this works fine
    but i want this class to run at runtime, so i did like above and it is not running!!
    what i am getting is a irritating windows file chooser is poping up and saying "class not
    found...browse or search in web...etc etc"
    Now my question is >
    Q1 . how can i run that class at runtime ?
    N.B
    here is some brief idea abt classes
    Dbconnection.java
    DriverManager.forClass("...database....");
    // only for database connection
    Myclass.java
    Connection con =db.getConnection();
    //use this con and show results for ur database related queries.
    }Q2. Can u plz tell those correct syntax how to run class file in this situation ?
    i will try all possible solutions tomorrow.
    thanx.

  • Question about multiple class files

    I just started learning JAVA a couple of days ago and the first program I wrote had two classes in one file. here is the program :
    class fib_num {
    public int value;
    public boolean is_even;
    class Fibonacci {
    /** Print the Fibonacci sequence for values < MAX and mark even numbers with an asterick */
    private static final int MAX = 50;
    private static final String Title = "The Fibonacci sequence for values less than " + MAX + ":";
    private static fib_num[] fib = new fib_num[MAX];//This is actually an array of object
    //references to objects of the fib_num class
    public static void main(String[] args) {
    System.out.println(Title);
    //We must initialize each element of the array also !!!!
    for (int i = 0; i < fib.length; i += 1) {
    fib = new fib_num();
    int lo = 1, hi = 1;
    fib[0].value = lo;
    fib[0].is_even = false;
    fib[1].value = hi;
    fib[1].is_even = false;
    for (int i = 2; i < fib.length; i += 1) {
    //create the next Fibonacci number and then save the previous Fibonacci number
    hi = lo + hi;
    lo = hi - lo;
    fib.value = hi;
    //now indicate if the Fibonacci number is even/odd
    if (fib.value % 2 == 0) {
    fib.is_even = true;
    }else {
    fib.is_even = false;
    print (fib);
    //This method prints an array of Fibonacci numbers
    public static void print(fib_num[] array) {
    if (array == null || array.length == 0)
    throw new IllegalArgumentException();
    String mark;
    for (int i = 0; array.value < MAX; i += 1) {
    if (array.is_even) {
    mark = "*";
    }else {
    mark = "";
    System.out.println((i + 1) + ": " + array.value + mark);
    I ran the program and everything went fine. But today I started to write another program with two classes. However the file will not compile and I get an error about interfacing or something. here is the program:
    Note: it's not nearly complete.
    class enumerate {
    //print out all permutations of a list of integers
    public static final int MAX = 4;
    public static int[] initialize(int[] nums) {
    for (int i = 0; i < nums.length; i++) {
    nums = i + 1;
    return nums;
    public static void print(int[] nums) {
    for (int i = 0; i < nums.length; i++) {
    System.out.print(nums);
    System.out.println("");
    public static void swap (int[] nums, int i, int j) {
    int temp = nums;
    nums = nums[j];
    nums[j] = temp;
    public static void main (String[] args) {
    int[] list = new int[MAX];
    list = initialize(list);
    PermutationGenerator x = new PermutationGenerator(5);
    // Systematically generate permutations.
    import java.math.BigInteger;
    public class PermutationGenerator {
    private int[] a;
    private BigInteger numLeft;
    private BigInteger total;
    // Constructor. WARNING: Don't make n too large.
    // Recall that the number of permutations is n!
    // which can be very large, even when n is as small as 20 --
    // 20! = 2,432,902,008,176,640,000 and
    // 21! is too big to fit into a Java long, which is
    // why we use BigInteger instead.
    public PermutationGenerator (int n) {
    if (n < 1) {
    throw new IllegalArgumentException ("Min 1");
    a = new int[n];
    total = getFactorial (n);
    reset ();
    // Reset
    public void reset () {
    for (int i = 0; i < a.length; i++) {
    a = i;
    numLeft = new BigInteger (total.toString ());
    // Return number of permutations not yet generated
    public BigInteger getNumLeft () {
    return numLeft;
    // Return total number of permutations
    public BigInteger getTotal () {
    return total;
    // Are there more permutations?
    public boolean hasMore () {
    return numLeft.compareTo (BigInteger.ZERO) == 1;
    // Compute factorial
    private static BigInteger getFactorial (int n) {
    BigInteger fact = BigInteger.ONE;
    for (int i = n; i > 1; i--) {
    fact = fact.multiply (new BigInteger (Integer.toString (i)));
    return fact;
    // Generate next permutation (algorithm from Rosen p. 284)
    public int[] getNext () {
    if (numLeft.equals (total)) {
    numLeft = numLeft.subtract (BigInteger.ONE);
    return a;
    int temp;
    // Find largest index j with a[j] < a[j+1]
    int j = a.length - 2;
    while (a[j] > a[j+1]) {
    j--;
    // Find index k such that a[k] is smallest integer
    // greater than a[j] to the right of a[j]
    int k = a.length - 1;
    while (a[j] > a[k]) {
    k--;
    // Interchange a[j] and a[k]
    temp = a[k];
    a[k] = a[j];
    a[j] = temp;
    // Put tail end of permutation after jth position in increasing order
    int r = a.length - 1;
    int s = j + 1;
    while (r > s) {
    temp = a[s];
    a[s] = a[r];
    a[r] = temp;
    r--;
    s++;
    numLeft = numLeft.subtract (BigInteger.ONE);
    return a;
    I thought the error had somethin to do with only having one class per .java file since the compiler creates a .class file. But how come my first program had two classes and it was OK. Is it b/c the second class was merely a collection of fields, almost like a simple struct in C?
    Any help would be appreciated. Thanks

    Move the import java.math.BigInteger line to the start of the file.
    Use the "[ code ] [ /code ]" tags around your code when you post, it makes reading it a lot easier.

  • Too many class files are creating.....

    Hi,
    I am using SwingUtilities.invokeLater() method to update my JTextPane.it is working fine but it is creating number of class files depends upon how many times i am calling SwingUtilities.invokeLater() method....In my application i am calling SwingUtilities.invokeLater() method 5 times so it is creating 5 class files.
    So pl let me know the solution to avoid the same.............thnx

    In my application i am calling
    g SwingUtilities.invokeLater() method 5 times so it
    is creating 5 class files.
    So pl let me know the solution to avoid the
    same............So why is this a problem?

  • How to load all the classes in a JAR file at runtime?

    Any clues o:
    "How can I force JVM to load all the classes in a specified JAR at once?"
    Thanx!
    -Rajeev

    Well I was thinking may be there exists an option with "java", when I
    am starting an application from a jar file, I could force it to load all
    the classes in the JAR. I don't want to do it programically. Is there such
    an option available?? Or in other words can I ask JVM to not do the dynamic
    loading for the JAR??
    Thanx.
    List all JarEntries and convert the paths to fully
    qualified class files
    e.g file in jar
    [1] /com/mycompany/proj/X.class
    should become
    [2] com.mycompany.proj.X
    then for each entry issue
    Class.forName( [2] );

  • How to load a .class file dynamically?

    Hello World ;)
    Does anyone know, how I can create an object of a class, that was compiled during the runtime?
    The facts:
    - The user puts a grammar in. Saved to file. ANTLR generates Scanner and Parser (Java Code .java)
    - I compile these file, so XYScanner.class and XYParser.class are available.
    - Now I want to create an object of XYScanner (the classnames are not fixed, but I know the filename). I tried to call the constructor of XYScanner (using reflection) but nothing works and now I am really despaired!
    Isn't there any way to instantiate the class in a way like
    Class c = Class.forName("/home/mark/XYScanner");
    c scan = new c("input.txt");
    The normal call would be:
    XYLexer lex = new XYLexer(new ANTLRFileStream("input.txt"));The problem using reflection is now that the parameter is a ANTLRFileStream, not only an Integer, as in this example shown:
    Class cls = Class.forName("method2");
    Class partypes[] = new Class[2];
    partypes[0] = Integer.TYPE;
    partypes[1] = Integer.TYPE;
    Method meth = cls.getMethod("add", partypes);
    method2 methobj = new method2();
    Object arglist[] = new Object[2];
    arglist[0] = new Integer(37);
    arglist[1] = new Integer(47);
    Object retobj = meth.invoke(methobj, arglist);
    Integer retval = (Integer)retobj;
    System.out.println(retval.intValue());Has anyone an idea? Thanks for each comment in advance!!!

    Dump all of your class files into a directory.
    Use the File class to list all files and iterateover
    the files.NastyNot really, when you are dynamically creating code, I would expect the output to be centralized, not spread out all over the place.
    >
    Use a URLClassloader to load the URL that isobtained
    for each file with file.toURI().toURL()(file.toURL()
    is depricated in 1.6)Wrong, the URL you give it must be that of the
    directory, not the class file.No, I did this quite recently, you can give it a specific class file to load.
    >
    Load all of the classes in this directory, thatway
    any anonymous classes are loaded as well.Anonymous classes automatically loaded when the real
    one isIt can't load it if it doesn't know where the code is. Since you haven't used a URL classloader to load once class file at a time, you would never encounter this. But if you loaded a class file that had an anonymous classfile it needed, would it know where to look for it?
    >
    From this point you should be able to just get a
    class with Class.forName(name)No. Class.forName uses the classloader of the class
    it's called in, which will be the system classloader.
    It won't find classes loaded by a URLClassLoader.got me there.

  • How to create and exe from a class file.

    I want to create an application and want to distribute it. I am using simplw awt gui interface. I have compiled the program and have got the required class file. If I want an executable how can I go for it.
    There are many files provided by java library which are exe but are created using java API eg. policytool.exe. Please Help.
    Ashwini Bagga,
    Jaipur(Rajasthan)
    INDIA.

    Java uses the JVM to parse the class files. It cannot be converted to a .exe file
    but if you want to distribute it, i suggest you use InstallAnywhere which makes it into an exe installer.
    In the end it still uses the virtual machine...
    If i am wrong anywhere pls correct me thanks...

  • How to capture output of java files using Runtime.exec

    Hi guys,
    I'm trying to capture output of java files using Runtime.exec but I don't know how. I keep receiving error message "java.lang.NoClassDefFoundError:" but I don't know how to :(
    import java.io.*;
    public class CmdExec {
      public CmdExec() {
      public static void main(String argv[]){
         try {
         String line;
         Runtime rt = Runtime.getRuntime();
         String[] cmd = new String[2];
         cmd[0] = "javac";
         cmd[1] = "I:\\My Documents\\My file\\CSM\\CSM00\\SmartQ\\src\\E.java";
         Process proc = rt.exec(cmd);
         cmd = new String[2];
         cmd[0] = "javac";
         cmd[1] = "I:\\My Documents\\My file\\CSM\\CSM00\\SmartQ\\src\\E";
         proc = rt.exec(cmd);
         //BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream()));
         BufferedReader input = new BufferedReader(new InputStreamReader(proc.getErrorStream()));
         while ((line = input.readLine()) != null) {
            System.out.println(line);
         input.close();
        catch (Exception err) {
         err.printStackTrace();
    public class E {
        public static void main(String[] args) {
            System.out.println("hello world!!!!");
    }Please help :)

    Javapedia: Classpath
    How Classes are Found
    Setting the class path (Windows)
    Setting the class path (Solaris/Linux)
    Understanding the Java ClassLoader
    java -cp .;<any other directories or jars> YourClassNameYou get a NoClassDefFoundError message because the JVM (Java Virtual Machine) can't find your class. The way to remedy this is to ensure that your class is included in the classpath. The example assumes that you are in the same directory as the class you're trying to run.
    javac -classpath .;<any additional jar files or directories> YourClassName.javaYou get a "cannot resolve symbol" message because the compiler can't find your class. The way to remedy this is to ensure that your class is included in the classpath. The example assumes that you are in the same directory as the class you're trying to run.

  • How to parse xml file

    Hi,
    I am having an XML file which is having set of repeated tags like
    <gender>
    <male>
    <name>sk</name>
    <age>19</age>
    </male>
    <male>
    <name>raj</name>
    <age>20</age>
    </male>
    <male>
    <name>kris</name>
    <age>18</age>
    </male>
    </gender>
    Like this i am having the xml file, i have to read the values from this xml file, here we are having male tag is repeated, from this i have to take the name, and age values. can you tell me how to take these values. If you are having the sample send me.
    Thanks,

    Hai
    It may be a bit late to reply but i hope this code will help you
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import java.io.*;
    import java.io.File;
    import org.w3c.dom.*;
    class DomParse
         public void func()
              try               
                   DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();               
                   DocumentBuilder db = dbf.newDocumentBuilder();               
                   //File f =new File("trial.xml");
                   Document doc = db.parse(new File("trial.xml")); //your xml file name here
                   //Document doc = db.parse(f);
                   NodeList nl1 = doc.getElementsByTagName("male");
                   for(int i=0;i<nl1.getLength();i++)
                        Node nd = nl1.item(i);
                        NodeList tmplist = nd.getChildNodes();
                        for(int j=0;j<tmplist.getLength();j++)
                             Node tmpNode = tmplist.item(j);
                             String locStr = tmpNode.getTextContent();
                             System.out.println(""+tmpNode.getTextContent());
              catch(Exception e)
                   System.out.println("Error: "+e);
                   e.printStackTrace();
         public static void main(String[] args) //throws
              new DomParse().func();
    with regards
    shan

  • How to compare after parsing xml file

    Hi,
    following code, parse the input.xml file, counts how many nodes are there and writes the node name and its value on screen.
    1) i am having trouble writing only node name into another file instead of writing to screen.
    2) after parsing, i like to compare each node name with another .xsd file for existence.
    Please keep in mind that, input.xml is based on some other .xsd and after parsing i have comparing its tag with another .xsd
    Need you help guys.
    thanks
    * CompareTags.java
    import java.io.*;
    import org.w3c.dom.*;
    import org.xml.sax.*;
    import javax.xml.parsers.*;
    import javax.xml.transform.*;
    import javax.xml.transform.dom.*;
    import javax.xml.transform.stream.*;
    /** This class represents short example how to parse XML file,
    * get XML nodes values and its values.<br><br>
    * It implements method to save XML document to XML file too
    public class CompareTags {
    private final static String xmlFileName = "C:/input.xml";
         int totalelements = 0;
    /** Creates a new instance of ParseXMLFile */
    public CompareTags() {
    // parse XML file -> XML document will be build
    Document doc = parseFile(xmlFileName);
    // get root node of xml tree structure
    Node root = doc.getDocumentElement();
    // write node and its child nodes into System.out
    System.out.println("Statemend of XML document...");
    writeDocumentToOutput(root,0);
                   System.out.println("totalelements in xyz tag " + totalelements);
              System.out.println("... end of statement");
    /** Returns element value
    * @param elem element (it is XML tag)
    * @return Element value otherwise empty String
    public final static String getElementValue( Node elem ) {
    Node kid;
    if( elem != null){
    if (elem.hasChildNodes()){
    for( kid = elem.getFirstChild(); kid != null; kid = kid.getNextSibling() ){
    if( kid.getNodeType() == Node.TEXT_NODE ){
    return kid.getNodeValue();
    return "";
    private String getIndentSpaces(int indent) {
    StringBuffer buffer = new StringBuffer();
    for (int i = 0; i < indent; i++) {
    buffer.append(" ");
    return buffer.toString();
    /** Writes node and all child nodes into System.out
    * @param node XML node from from XML tree wrom which will output statement start
    * @param indent number of spaces used to indent output
    public void writeDocumentToOutput(Node node,int indent) {
    // get element name
    String nodeName = node.getNodeName();
    // get element value
    String nodeValue = getElementValue(node);
    // get attributes of element
    NamedNodeMap attributes = node.getAttributes();
    System.out.println(getIndentSpaces(indent) + "NodeName: " + nodeName + ", NodeValue: " + nodeValue);
    for (int i = 0; i < attributes.getLength(); i++) {
    Node attribute = attributes.item(i);
    System.out.println(getIndentSpaces(indent + 2) + "AttributeName: " + attribute.getNodeName() + ", attributeValue: " + attribute.getNodeValue());
    // write all child nodes recursively
    NodeList children = node.getChildNodes();
              //int totalelements = 0;
    for (int i = 0; i < children.getLength(); i++) {
    Node child = children.item(i);
                   //     System.out.println("child value.."+child);
    if (child.getNodeType() == Node.ELEMENT_NODE) {
    writeDocumentToOutput(child,indent + 2);
                             if(node.getNodeName() == "DATA"){
                             totalelements = totalelements+1;}
                        //System.out.println("totalelements in DATA tag " + totalelements);
    /** Parses XML file and returns XML document.
    * @param fileName XML file to parse
    * @return XML document or <B>null</B> if error occured
    public Document parseFile(String fileName) {
    System.out.println("Parsing XML file... " + fileName);
    DocumentBuilder docBuilder;
    Document doc = null;
    DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
    docBuilderFactory.setIgnoringElementContentWhitespace(true);
    try {
    docBuilder = docBuilderFactory.newDocumentBuilder();
    catch (ParserConfigurationException e) {
    System.out.println("Wrong parser configuration: " + e.getMessage());
    return null;
    File sourceFile = new File(fileName);
    try {
    doc = docBuilder.parse(sourceFile);
    catch (SAXException e) {
    System.out.println("Wrong XML file structure: " + e.getMessage());
    return null;
    catch (IOException e) {
    System.out.println("Could not read source file: " + e.getMessage());
    System.out.println("XML file parsed");
    return doc;
    /** Starts XML parsing example
    * @param args the command line arguments
    public static void main(String[] args) {
    new CompareTags();
    }

    hi,
    check out the following links
    Check this blog to extract from XML:
    /people/kamaljeet.kharbanda/blog/2005/09/16/xi-bi-integration
    http://help.sap.com/saphelp_nw04/helpdata/en/fe/65d03b3f34d172e10000000a11402f/frameset.htm
    Check thi link for Extract from any DB:
    http://help.sap.com/saphelp_nw04s/helpdata/en/58/54f9c1562d104c9465dabd816f3f24/content.htm
    regards
    harikrishna N

Maybe you are looking for

  • Cisco ISE 1.2.1 deplyomet issue with Anyconnect and Profiling

    Hi All, We are running cisco ise box in 1.2.1 version wherein I am facing below issue while deployment. We are having two ISE boxes where One box act as Primary Admin,Secondary MNT and Policy Service and Second Box act as Secondary Admin,Primary MNT

  • Windows 8.1: Explorer - Visual C++ Runtime error "Terminate in an usual way"

    After updating form Win 8 Pro to Win 8.1 Pro, sometime Explorer.exe crashes by itself, here is the detail from Event Viewer: Faulting application name: Explorer.EXE, version: 6.3.9600.16408, time stamp: 0x523d251b Faulting module name: msvcrt.dll, ve

  • HT1414 it will not update. how do i fix that?

    i log onto itunes and it asks me if i want to update my itouch to the updated version (5) and i click yes. it starts the backing up process but then stops. how do i fix that?

  • Cannot install Adobe Acrobat or Reader on Leopard OS!

    Has anyone ever had this problem? I used monolingual software to remove non-english language files & non-Intel architectures for installed applications. I have had problems with Acrobat 9 ever since. It requires me to enter my system administrator pa

  • Signal Loss after a 300ft RG6Q Cable Run

    I have a long run of a 300ft RG6 Quad cable from one point to another.  No other way of going about it.  Due to this long run, some of the high frequency channels such as ESPN and TBS are not working.  Using a Motorola Amp allows the channels to work