Jaxws-ri-2.3.2.pom causes 'zip END header not found'

I’m using Sonar Gradle plugin connected to SonarCloud. Scan reports a warning:

> Task :sonar
WARN: zip END header not found: /builds/my-project/gradle-cache/caches/modules-2/files-2.1/com.sun.xml.ws/jaxws-ri/2.3.2/15ee0d893c452db7c4865eacb37cf5355c6c5cd7/jaxws-ri-2.3.2.pom
java.util.zip.ZipException: zip END header not found
	at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1607)
	at java.base/java.util.zip.ZipFile$Source.findEND(ZipFile.java:1497)
	at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1504)
	at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1308)
	at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1271)
	at java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:733)
	at java.base/java.util.zip.ZipFile$CleanableResource.get(ZipFile.java:850)
	at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:248)
	at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:177)
	at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:191)
	at org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.ZipHandler$1.createAccessor(ZipHandler.java:22)
	at org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.ZipHandler$1.createAccessor(ZipHandler.java:15)
	at org.jetbrains.kotlin.com.intellij.util.io.FileAccessorCache.createHandle(FileAccessorCache.java:45)
	at org.jetbrains.kotlin.com.intellij.util.io.FileAccessorCache.get(FileAccessorCache.java:39)
	at org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.ZipHandler.acquireZipHandle(ZipHandler.java:46)
	at org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.ZipHandlerBase.createEntriesMap(ZipHandlerBase.java:66)
	at org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.ArchiveHandler.getEntriesMap(ArchiveHandler.java:181)
	at org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.jar.CoreJarHandler.<init>(CoreJarHandler.java:26)
	at org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem.lambda$new$0(CoreJarFileSystem.java:17)
	at org.jetbrains.kotlin.com.intellij.util.containers.ConcurrentFactoryMap$2.create(ConcurrentFactoryMap.java:174)
	at org.jetbrains.kotlin.com.intellij.util.containers.ConcurrentFactoryMap.get(ConcurrentFactoryMap.java:40)
	at org.jetbrains.kotlin.com.intellij.openapi.vfs.impl.jar.CoreJarFileSystem.findFileByPath(CoreJarFileSystem.java:28)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.findJarRoot(KotlinCoreEnvironment.kt:399)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.contentRootToVirtualFile(KotlinCoreEnvironment.kt:377)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.access$contentRootToVirtualFile(KotlinCoreEnvironment.kt:107)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$2.invoke(KotlinCoreEnvironment.kt:224)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$2.invoke(KotlinCoreEnvironment.kt:107)
	at org.jetbrains.kotlin.cli.jvm.compiler.ClasspathRootsResolver.convertClasspathRoots(ClasspathRootsResolver.kt:76)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(KotlinCoreEnvironment.kt:233)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment.<init>(KotlinCoreEnvironment.kt:107)
	at org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment$Companion.createForProduction(KotlinCoreEnvironment.kt:442)
	at org.sonarsource.kotlin.api.frontend.KotlinCoreEnvironmentToolsKt.kotlinCoreEnvironment(KotlinCoreEnvironmentTools.kt:70)
	at org.sonarsource.kotlin.api.frontend.Environment.<init>(KotlinCoreEnvironmentTools.kt:55)
	at org.sonarsource.kotlin.api.frontend.Environment.<init>(KotlinCoreEnvironmentTools.kt:47)
	at org.sonarsource.kotlin.api.sensors.AbstractKotlinSensorExecuteContextKt.environment(AbstractKotlinSensorExecuteContext.kt:154)
	at org.sonarsource.kotlin.api.sensors.AbstractKotlinSensorExecuteContext$environment$2.invoke(AbstractKotlinSensorExecuteContext.kt:66)
	at org.sonarsource.kotlin.api.sensors.AbstractKotlinSensorExecuteContext$environment$2.invoke(AbstractKotlinSensorExecuteContext.kt:65)
	at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
	at org.sonarsource.kotlin.api.sensors.AbstractKotlinSensorExecuteContext.getEnvironment(AbstractKotlinSensorExecuteContext.kt:65)
	at org.sonarsource.kotlin.api.sensors.AbstractKotlinSensorExecuteContext$kotlinFiles$2.invoke(AbstractKotlinSensorExecuteContext.kt:73)
	at org.sonarsource.kotlin.api.sensors.AbstractKotlinSensorExecuteContext$kotlinFiles$2.invoke(AbstractKotlinSensorExecuteContext.kt:69)
	at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
	at org.sonarsource.kotlin.api.sensors.AbstractKotlinSensorExecuteContext.getKotlinFiles(AbstractKotlinSensorExecuteContext.kt:69)
	at org.sonarsource.kotlin.api.sensors.AbstractKotlinSensorExecuteContext.analyzeFiles(AbstractKotlinSensorExecuteContext.kt:93)
	at org.sonarsource.kotlin.api.sensors.AbstractKotlinSensor.execute(AbstractKotlinSensor.kt:68)
	at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:62)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:75)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.lambda$execute$1(ModuleSensorsExecutor.java:48)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.withModuleStrategy(ModuleSensorsExecutor.java:66)
	at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:48)
	at org.sonar.scanner.scan.ModuleScanContainer.doAfterStart(ModuleScanContainer.java:64)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:123)
	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:109)
	at org.sonar.scanner.scan.ProjectScanContainer.scan(ProjectScanContainer.java:163)
	at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:159)
	at org.sonar.scanner.scan.ProjectScanContainer.scanRecursively(ProjectScanContainer.java:156)
	at org.sonar.scanner.scan.ProjectScanContainer.doAfterStart(ProjectScanContainer.java:130)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:123)
	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:109)
	at org.sonar.scanner.bootstrap.ScannerContainer.doAfterStart(ScannerContainer.java:396)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:123)
	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:109)
	at org.sonar.scanner.bootstrap.GlobalContainer.doAfterStart(GlobalContainer.java:128)
	at org.sonar.core.platform.ComponentContainer.startComponents(ComponentContainer.java:123)
	at org.sonar.core.platform.ComponentContainer.execute(ComponentContainer.java:109)
	at org.sonar.batch.bootstrapper.Batch.doExecute(Batch.java:57)
	at org.sonar.batch.bootstrapper.Batch.execute(Batch.java:51)
	at org.sonarsource.scanner.api.internal.batch.BatchIsolatedLauncher.execute(BatchIsolatedLauncher.java:46)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.sonarsource.scanner.api.internal.IsolatedLauncherProxy.invoke(IsolatedLauncherProxy.java:60)
	at com.sun.proxy.$Proxy133.execute(Unknown Source)
	at org.sonarsource.scanner.api.EmbeddedScanner.doExecute(EmbeddedScanner.java:189)
	at org.sonarsource.scanner.api.EmbeddedScanner.execute(EmbeddedScanner.java:138)
	at org.sonarqube.gradle.SonarTask.run(SonarTask.java:131)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:125)
	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)

I’m using Gradle 8.2.1 with OpenJDK 11.0.19, but the error appeared long ago, probably when I was using Gradle 7.5. It also appeared in an old version of Sonar Plugin: for sure it happened in 4.2.1.3168. It still happens in 4.4.0.3356 (the stacktrace is for 4.4).

Cleaning Gradle cache (~/.gradle) does not help.

I think it’s a bug in the plugin. According to the log, it tries to open POM (XML text) as a ZIP archive.

To reproduce, try to add a dependency on adwords-axis. Here is my dependency graph leading to jaxws-ri:

com.sun.xml.ws:jaxws-ri:2.3.2
\--- com.google.api-ads:ads-lib:4.20.0
     +--- com.google.api-ads:adwords-axis:4.20.0
     |    \--- project :my-project
     |         \--- runtimeClasspath

Hey there.

What version of SonarQube are you using?

As I wrote, the plugin connects to Sonar Cloud.

Hey there.

You put this in the SonarQube category, sorry I missed it :wink:

I’ll raise this to the right team. Stay tuned.

Hello @pkubowicz,

Thanks for the report! I was able to reproduce the issue and have opened a ticket to track it.

For some context, have you been having this issue for a while, has it appeared only recently, or have you only started using SonarCloud recently?

I was able to see this error log in a pipeline from 3 May 2023, when I was running the plugin in version 4.0.0.2929. Version 3.4.0.2513 did not show this error. So I think the regression happened between 3.4 and 4.0.

1 Like

Perfect, thanks for the precise feedback, that should help the investigation on our side!