Solved

Wierd EmptyStackException from SAX

Posted on 2002-05-07
8
423 Views
Last Modified: 2013-11-23
Hello,

I have written a class which utilizes the SAX api in JDK 1.4 in order to parse XML files. When running a small TesterUtility which I wrote to test it through the IDE everything works fine, however when running from the command line I kept on getting a java.util.EmptyStackException thrown somwhere within org.apache.crimson.Parser2.java.

Since generally such problems come from  a bad classpath, I added:
System.out.println(System.getProperty("java.class.path"));
in the begginning of the tester, and then began checking dir by dir which one was lacking.

After a while I found the when placing one of Fortes modules ('wasp-advanced.jar') in the classpath solved the problem and allowed the program to run from the command line as well. Now this is odd for two reasons:

a) I have absolutley no dependencies on wasp-advanced.jar, as does the SAX api. I have verified this by running a verbose output

b) The exception thrown was a java.util.EmptyStackException - which is a runtime exception, not a class not found exception, or any other exception one would expect to find when the VM doesn't find a class.

Unfortunatley the problem was not solved by simply adding the module into the classpath. I also need this to run under Tomcat, and placing the aforementioned module into Tomcats 'lib' directory does not help, and I still receive the same error.

So just to sum it all up:
a) The program worked fine under the IDE

b) Did not work under console until a single jar, wasp-advanced.jar, one of Forte's modules, was placed into the classpath. There are no dependencies on the jar file *verified* by running verbose output.

c) Adding this module into tomcat lib directory does not help, and the same EmptyStackException is still thrown, as if running from command prompt without correct classpath.

If anybody has any insight as to the origin of this error and/or suggestions for a solution they would be very much appreciated.
0
Comment
Question by:Solfire
8 Comments
 
LVL 7

Expert Comment

by:yoren
ID: 6994371
Maybe there is a SAX parser in wasp-advanced.jar that you're using instead of Crimson when it's in your path.

How are you instantiating the parser? Try adding a line to see what parser you're using. Assuming you have a line like:

[XMLReader reader = ....]

Add:
System.out.println("Parser: " 
  + reader.getClass().getName());

As far as the EmptyStackException, that's not a classpath issue but rather an error parsing your document. It might be a bug in Crimson, and adding wasp-advanced.jar might be fixing it by using a different parser altogether.
0
 
LVL 16

Expert Comment

by:heyhey_
ID: 6994426
another option - try recompiling your project with command line javac.
0
 

Author Comment

by:Solfire
ID: 6996332
voren:
Well, I have already verified by using verbose output that nothing is being loaded from wasp-advanced.jar (everything comes from rt.jar, as is expected). The check you suggested returns the same result. Also, wouldn't the interpreter report any ambigous classes in it's classpath? i.e. when attempting to load classes with same name?

heyhey:
Unfortunatley by the time I read your message I had already rewritten the class to use a different XML package (namely EXML, www.themindelectric.com) which works fine. When I get home and a backup copy is available I will try a command line compile.
0
 

Author Comment

by:Solfire
ID: 6996726
voren:
Well, I have already verified by using verbose output that nothing is being loaded from wasp-advanced.jar (everything comes from rt.jar, as is expected). The check you suggested returns the same result. Also, wouldn't the interpreter report any ambigous classes in it's classpath? i.e. when attempting to load classes with same name?

heyhey:
Unfortunatley by the time I read your message I had already rewritten the class to use a different XML package (namely EXML, www.themindelectric.com) which works fine. When I get home and a backup copy is available I will try a command line compile.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 7

Expert Comment

by:yoren
ID: 6997187
Solfire,

I have worked quite a bit with Crimson and have never encountered an XML file that gives an EmptyStackException. Can you post or email (yuval@bluecast.com) the file?

Regarding the ambiguous class question, the class names for the parsers are not the same. If you're using XMLReaderFactory or JAXP to instantiate the parser, it uses a system property (org.xml.sax.driver) or service identitifer (META-INF/services/javax.xml.parsers/SAXParserFactory) to determine which class to load.

0
 
LVL 7

Expert Comment

by:yoren
ID: 6997234
Ignore that last comment. You specifically said the class name was Crimson. In this case, you've got one of the following:

- corrupt bytecode (fixed as heyhey said)
- a corrupt JDK (would need to reinstall)
- an actual bug in Crimson
0
 
LVL 35

Expert Comment

by:girionis
ID: 8709944
No comment has been added lately, so it's time to clean up this TA.

I will leave a recommendation in the Cleanup topic area that this question is:

- To be PAQ'ed and points NOT refunded

Please leave any comments here within the
next seven days.

PLEASE DO NOT ACCEPT THIS COMMENT AS AN ANSWER !

girionis
Cleanup Volunteer
0
 

Accepted Solution

by:
PashaMod earned 0 total points
ID: 8774368
Per Recommendation,

PashaMod
Community Support Moderator @Experts Exchange
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Java Flight Recorder and Java Mission Control together create a complete tool chain to continuously collect low level and detailed runtime information enabling after-the-fact incident analysis. Java Flight Recorder is a profiling and event collectio…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

867 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

21 Experts available now in Live!

Get 1:1 Help Now