You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Arun Thomas <Ar...@solidusnetworks.com> on 2003/07/16 19:56:23 UTC
[validator][digester] Compressed parsing exception....
Folks,
I'm writing because I'm running across a really strange bug which I cannot, for the life of me figure out. Or rather, I know what's causing it, but I'm not sure why: I'm getting an exception when parsing an xml file (validation.xml) obtained as an input stream from the classpath within a compressed jar.
The scenario...: I've written a stand-alone application which I release as an application jar for invocation as a jar. The jar file includes a validation.xml which is accessed as in input stream using ClassLoader.getResourceAsStream() and used as input to ValidatorResourcesInitializer in order to set up validation. The validator process makes use of digester to read the xml, and right now, what I see is an exception raised by the parser and propagated through digester and validator while parsing the validation.xml.
Now comes the strange part: it appears that this exception is only raised when the validation.xml within the jar file has been compressed. Updating with a copy of the same file without compression resolved the problem. Has anyone seen anything like this before? (This may well have to do with the parser (xerces), as the exception is generated by the parser, but I thought it worth checking....)
I've used jar to extract the validation file, and update the jar file using the extracted file but without compression - no error occurs. Then I update the jar file once again (using the previously extracted file) with compression - the file compressed by about the same percentage as previously - and, once again, the exception occurs.
How did I test for this? First, the system details: I'm running on windows XP using cygwin as my command line. (Ergo the strange mix between unix and windows notation in the following....) I've tried invoking the program with both the sun jdk 1.4 and the ibm jdk 1.3 - the same problem occurs. I eventually determined what the final problem with the following bash script:
jar -xvf mems-ear.ear
rm mems-ear.ear
jar -tvf mems.jar >> /tmp/predecomp.txt
zipinfo -v mems.jar >> /tmp/predecomp.txt
java com.solidusnetworks.mems.ui.controller.Controller >> /tmp/predecomp.txt
jar -xvf mems.jar com/solidusnetworks/mems/resources/validation.xml
jar -uvf0 mems.jar com/solidusnetworks/mems/resources/validation.xml
jar -tvf mems.jar >> /tmp/postdecomp.txt
zipinfo -v mems.jar >> /tmp/postdecomp.txt
java com.solidusnetworks.mems.ui.controller.Controller >> /tmp/postdecomp.txt
jar -uvf mems.jar com/solidusnetworks/mems/resources/validation.xml
jar -tvf mems.jar >> /tmp/postrecomp.txt
zipinfo -v mems.jar >> /tmp/postrecomp.txt
java com.solidusnetworks.mems.ui.controller.Controller >> /tmp/postrecomp.txt
diff /tmp/predecomp.txt /tmp/postdecomp.txt >> /tmp/diffdecomp.txt
diff /tmp/postdecomp.txt /tmp/postrecomp.txt >> /tmp/diffrecomp.txt
I attach as well the relevant results from the output files.
1) zipinfo.txt - Relevant sections of zipinfo output showing the change in validation.xml
2) appout.txt - Initial application log output showing validator initialization
In each file, the three sections are denoted by the following labels:
A) Original File
B) After Decompression of validation.xml
C) After Recompression of validation.xml
Other libraries used:
commons-beanutils.jar*
commons-collections.jar*
commons-digester.jar*
commons-lang-1.0.1.jar*
commons-logging-api.jar*
commons-logging.jar*
commons-validator-1.0.1-SOL-1.1.jar
a version of validator edited to provide access to the results
jakarta-oro-2.0.7.jar*
jakarta-regexp-1.2.jar*
mems-ejb.jar*
contains shared code with ejb backend
mems.jar*
contains application code
util.jar*
xercesImpl.jar*
lib\j2ee.jar
lib\log4j.jar
lib\jbossall-client.jar
needed to access jboss JDNI repository
If any of you have experienced something like this, I'd appreciate knowing. The behaviour is quite strange to me.
Cheers,
-AMT