segunda-feira, 15 de outubro de 2018

Debugging error "Could not import XML from stream: invalid LOC header (bad signature)" when building a Thorntail application

Tl;DR: Check if there's corrupted JARs in your maven repository


When building a Thorntail 2.2.0.Final application I faced the error Could not import XML from stream: invalid LOC header (bad signature) when trying to build the JAR using mvn clean install. I could not find what is wrong, I just downloaded the application using Thorntail generator but I was not able to run it, so frustrating. When I used the -X flag I could see the error stack trace. The part that was causing the error was:


Caused by: java.util.zip.ZipException: invalid LOC header (bad signature)
    at java.util.zip.ZipFile.read (Native Method)
    at java.util.zip.ZipFile.access$1400 (ZipFile.java:60)
(...)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse (DocumentBuilderImpl.java:339)
    at javax.xml.parsers.DocumentBuilder.parse (DocumentBuilder.java:121)
    at org.jboss.shrinkwrap.descriptor.spi.node.dom.XmlDomNodeImporterImpl.importAsNode (XmlDomNodeImporterImpl.java:65)
    at org.wildfly.swarm.tools.ModuleAnalyzer. (ModuleAnalyzer.java:53)
    at org.wildfly.swarm.tools.ResolvedDependencies.findModuleXmls (ResolvedDependencies.java:80)


If you check the full stack trace you can see that the problem is coming from some corrupted zip file in my local maven repository. The simply solution would be clean my local maven, but I didn't want to do that, so I had to debug ResolvedDependencies  class. Code is open, I cloned the thorntail project from github, imported the project tools to my Eclipse, checked the 2.2.0.Final TAG, configured remote Java application debug adding the tools projects in source tab:


Then I added a breakpoint to the point where the exception was thrown: 



Finally I run the maven using mvnDebug When you do this maven hangs waiting for a remote debugger to connect to it, then I had to go back to Eclipse and run my Remote Java Application goal:


When it stopped at my break point I was able to continue the debug execution in debug mode and back to ResolvedDependencies I could see what JAR was corrupted. After the debug session session I simply had to delete the JAR and run mvn clean install again and everything worked because maven re-downloaded the JAR, this time a not corrupted one :-)


Nenhum comentário:

Postar um comentário