[
https://issues.apache.org/jira/browse/ARIES-2109?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Wouter Born updated ARIES-2109:
-------------------------------
Description:
Newer JVMs (11.0.20+9, 17.0.8+9) have "Improved ZIP64 Extra Field Validation"
(JDK-8302483) which causes the following exceptions to be logged when using the
{{org.apache.aries.spec:org.apache.aries.javax.jax.rs-api:1.0.4}} bundle with
the Aries JAX-RS Whiteboard, Apache CXF in Apache Karaf when running openHAB:
{code:java}
!ENTRY org.apache.aries.javax.jax.rs-api 4 0 2023-07-26 21:16:54.718
!MESSAGE FrameworkEvent ERROR
!STACK 0
java.util.zip.ZipException: Exception in opening zip file:
/home/wouter/software/openhab/instance/userdata/cache/org.eclipse.osgi/62/0/.cp/lib/geronimo-osgi-locator.jar
at
org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:356)
at
org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile.java:51)
at
org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(CloseableBundleFile.java:140)
at
org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(CloseableBundleFile.java:78)
at
org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(CloseableBundleFile.java:274)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.loadManifest(ClasspathEntry.java:230)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.<init>(ClasspathEntry.java:77)
at
org.eclipse.osgi.internal.loader.ModuleClassLoader.createClassPathEntry(ModuleClassLoader.java:267)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.createClassPathEntry(ClasspathManager.java:343)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.getClasspath(ClasspathManager.java:295)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.addStandardClassPathEntry(ClasspathManager.java:213)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.addClassPathEntry(ClasspathManager.java:205)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassPathEntry(ClasspathManager.java:188)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.buildClasspath(ClasspathManager.java:166)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.<init>(ClasspathManager.java:94)
at
org.eclipse.osgi.internal.loader.EquinoxClassLoader.<init>(EquinoxClassLoader.java:54)
at
org.eclipse.osgi.internal.loader.BundleLoader.createClassLoaderPrivledged(BundleLoader.java:345)
at
org.eclipse.osgi.internal.loader.BundleLoader.getModuleClassLoader(BundleLoader.java:262)
at
org.eclipse.osgi.internal.framework.EquinoxBundle$1.run(EquinoxBundle.java:653)
at
org.eclipse.osgi.internal.framework.EquinoxBundle$1.run(EquinoxBundle.java:1)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at
org.eclipse.osgi.internal.framework.EquinoxBundle.getModuleClassLoader(EquinoxBundle.java:646)
at
org.eclipse.osgi.internal.framework.EquinoxBundle.getResource(EquinoxBundle.java:588)
at
org.apache.servicemix.specs.activation.Activator.register(Activator.java:58)
at org.apache.servicemix.specs.locator.Activator.start(Activator.java:70)
at org.apache.servicemix.specs.activation.Activator.start(Activator.java:46)
at
org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:818)
at
org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:810)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:767)
at
org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1032)
at
org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:371)
at org.eclipse.osgi.container.Module.doStart(Module.java:605)
at org.eclipse.osgi.container.Module.start(Module.java:468)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1847)
at
org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1840)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1783)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1745)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1667)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
at
org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
Caused by: java.util.zip.ZipException: Invalid CEN header (invalid zip64 extra
data field size)
at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1728)
at
java.base/java.util.zip.ZipFile$Source.checkExtraFields(ZipFile.java:1261)
at
java.base/java.util.zip.ZipFile$Source.checkAndAddEntry(ZipFile.java:1212)
at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1667)
at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1445)
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1407)
at
java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:716)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:250)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:179)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:193)
at
org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:342)
... 43 more {code}
To workaround these exception we had to disable this new JVM feature by setting
the property {{jdk.util.zip.disableZip64ExtraFieldValidation=true}}
The issue seems to be that the embedded {{geronimo-osgi-locator.jar}} library
in the bundle has invalid headers.
On my Ubuntu system I could check that this embedded JAR has issues with:
{code:java}
$ zip -T geronimo-osgi-locator.jar
META-INF/MANIFEST.MF bad extra-field entry:
EF block length (61373 bytes) exceeds remaining EF data (4 bytes)
test of geronimo-osgi-locator.jar FAILED
zip error: Zip file invalid, could not spawn unzip, or wrong unzip (original
files unmodified) {code}
Another workaround I tried is replacing this bundle with
{{jakarta.ws.rs:jakarta.ws.rs-api:2.1.6}}
However that bundle does not provide the {{osgi.contract=JavaJAXRS}} capability
in its manifest which causes OSGi bundle resolution issues.
was:
Newer JVMs (11.0.20+9, 17.0.8+9) have "Improved ZIP64 Extra Field Validation"
(JDK-8302483) which causes the following exceptions to be logged when using the
{{org.apache.aries.spec:org.apache.aries.javax.jax.rs-api:1.0.4}} bundle in
with the Aries JAX-RS Whiteboard, Apache CXF in Apache Karaf when running
openHAB:
{code:java}
!ENTRY org.apache.aries.javax.jax.rs-api 4 0 2023-07-26 21:16:54.718
!MESSAGE FrameworkEvent ERROR
!STACK 0
java.util.zip.ZipException: Exception in opening zip file:
/home/wouter/software/openhab/instance/userdata/cache/org.eclipse.osgi/62/0/.cp/lib/geronimo-osgi-locator.jar
at
org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:356)
at
org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile.java:51)
at
org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(CloseableBundleFile.java:140)
at
org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(CloseableBundleFile.java:78)
at
org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(CloseableBundleFile.java:274)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.loadManifest(ClasspathEntry.java:230)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.<init>(ClasspathEntry.java:77)
at
org.eclipse.osgi.internal.loader.ModuleClassLoader.createClassPathEntry(ModuleClassLoader.java:267)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.createClassPathEntry(ClasspathManager.java:343)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.getClasspath(ClasspathManager.java:295)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.addStandardClassPathEntry(ClasspathManager.java:213)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.addClassPathEntry(ClasspathManager.java:205)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassPathEntry(ClasspathManager.java:188)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.buildClasspath(ClasspathManager.java:166)
at
org.eclipse.osgi.internal.loader.classpath.ClasspathManager.<init>(ClasspathManager.java:94)
at
org.eclipse.osgi.internal.loader.EquinoxClassLoader.<init>(EquinoxClassLoader.java:54)
at
org.eclipse.osgi.internal.loader.BundleLoader.createClassLoaderPrivledged(BundleLoader.java:345)
at
org.eclipse.osgi.internal.loader.BundleLoader.getModuleClassLoader(BundleLoader.java:262)
at
org.eclipse.osgi.internal.framework.EquinoxBundle$1.run(EquinoxBundle.java:653)
at
org.eclipse.osgi.internal.framework.EquinoxBundle$1.run(EquinoxBundle.java:1)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
at
org.eclipse.osgi.internal.framework.EquinoxBundle.getModuleClassLoader(EquinoxBundle.java:646)
at
org.eclipse.osgi.internal.framework.EquinoxBundle.getResource(EquinoxBundle.java:588)
at
org.apache.servicemix.specs.activation.Activator.register(Activator.java:58)
at org.apache.servicemix.specs.locator.Activator.start(Activator.java:70)
at org.apache.servicemix.specs.activation.Activator.start(Activator.java:46)
at
org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:818)
at
org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
at
java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:810)
at
org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:767)
at
org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1032)
at
org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:371)
at org.eclipse.osgi.container.Module.doStart(Module.java:605)
at org.eclipse.osgi.container.Module.start(Module.java:468)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1847)
at
org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1840)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1783)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1745)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1667)
at
org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
at
org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
Caused by: java.util.zip.ZipException: Invalid CEN header (invalid zip64 extra
data field size)
at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1728)
at
java.base/java.util.zip.ZipFile$Source.checkExtraFields(ZipFile.java:1261)
at
java.base/java.util.zip.ZipFile$Source.checkAndAddEntry(ZipFile.java:1212)
at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1667)
at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1445)
at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1407)
at
java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:716)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:250)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:179)
at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:193)
at
org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:342)
... 43 more {code}
To workaround these exception we had to disable this new JVM feature by setting
the property {{jdk.util.zip.disableZip64ExtraFieldValidation=true}}
The issue seems to be that the embedded {{geronimo-osgi-locator.jar}} library
in the bundle has invalid headers.
On my Ubuntu system I could check that this embedded JAR has issues with:
{code:java}
$ zip -T geronimo-osgi-locator.jar
META-INF/MANIFEST.MF bad extra-field entry:
EF block length (61373 bytes) exceeds remaining EF data (4 bytes)
test of geronimo-osgi-locator.jar FAILED
zip error: Zip file invalid, could not spawn unzip, or wrong unzip (original
files unmodified) {code}
Another workaround I tried is replacing this bundle with
{{jakarta.ws.rs:jakarta.ws.rs-api:2.1.6}}
However that bundle does not provide the {{osgi.contract=JavaJAXRS}} capability
in its manifest which causes OSGi bundle resolution issues.
> ZipException when using org.apache.aries.javax.jax.rs-api bundle
> ----------------------------------------------------------------
>
> Key: ARIES-2109
> URL: https://issues.apache.org/jira/browse/ARIES-2109
> Project: Aries
> Issue Type: Bug
> Environment: Eclipse Temurin 17.0.8+9
> Aries JAX-RS Whiteboard 2.0.0
> CXF 3.4.5
> Karaf 4.4.3
>
> Reporter: Wouter Born
> Priority: Major
>
> Newer JVMs (11.0.20+9, 17.0.8+9) have "Improved ZIP64 Extra Field Validation"
> (JDK-8302483) which causes the following exceptions to be logged when using
> the {{org.apache.aries.spec:org.apache.aries.javax.jax.rs-api:1.0.4}} bundle
> with the Aries JAX-RS Whiteboard, Apache CXF in Apache Karaf when running
> openHAB:
>
>
> {code:java}
> !ENTRY org.apache.aries.javax.jax.rs-api 4 0 2023-07-26 21:16:54.718
> !MESSAGE FrameworkEvent ERROR
> !STACK 0
> java.util.zip.ZipException: Exception in opening zip file:
> /home/wouter/software/openhab/instance/userdata/cache/org.eclipse.osgi/62/0/.cp/lib/geronimo-osgi-locator.jar
> at
> org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:356)
> at
> org.eclipse.osgi.storage.bundlefile.ZipBundleFile.doOpen(ZipBundleFile.java:51)
> at
> org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.internalOpen(CloseableBundleFile.java:140)
> at
> org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.lockOpen(CloseableBundleFile.java:78)
> at
> org.eclipse.osgi.storage.bundlefile.CloseableBundleFile.getEntry(CloseableBundleFile.java:274)
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.loadManifest(ClasspathEntry.java:230)
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathEntry.<init>(ClasspathEntry.java:77)
> at
> org.eclipse.osgi.internal.loader.ModuleClassLoader.createClassPathEntry(ModuleClassLoader.java:267)
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.createClassPathEntry(ClasspathManager.java:343)
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.getClasspath(ClasspathManager.java:295)
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.addStandardClassPathEntry(ClasspathManager.java:213)
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.addClassPathEntry(ClasspathManager.java:205)
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.findClassPathEntry(ClasspathManager.java:188)
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.buildClasspath(ClasspathManager.java:166)
> at
> org.eclipse.osgi.internal.loader.classpath.ClasspathManager.<init>(ClasspathManager.java:94)
> at
> org.eclipse.osgi.internal.loader.EquinoxClassLoader.<init>(EquinoxClassLoader.java:54)
> at
> org.eclipse.osgi.internal.loader.BundleLoader.createClassLoaderPrivledged(BundleLoader.java:345)
> at
> org.eclipse.osgi.internal.loader.BundleLoader.getModuleClassLoader(BundleLoader.java:262)
> at
> org.eclipse.osgi.internal.framework.EquinoxBundle$1.run(EquinoxBundle.java:653)
> at
> org.eclipse.osgi.internal.framework.EquinoxBundle$1.run(EquinoxBundle.java:1)
> at
> java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
> at
> org.eclipse.osgi.internal.framework.EquinoxBundle.getModuleClassLoader(EquinoxBundle.java:646)
> at
> org.eclipse.osgi.internal.framework.EquinoxBundle.getResource(EquinoxBundle.java:588)
> at
> org.apache.servicemix.specs.activation.Activator.register(Activator.java:58)
> at org.apache.servicemix.specs.locator.Activator.start(Activator.java:70)
> at
> org.apache.servicemix.specs.activation.Activator.start(Activator.java:46)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:818)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl$2.run(BundleContextImpl.java:1)
> at
> java.base/java.security.AccessController.doPrivileged(AccessController.java:569)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:810)
> at
> org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:767)
> at
> org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:1032)
> at
> org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:371)
> at org.eclipse.osgi.container.Module.doStart(Module.java:605)
> at org.eclipse.osgi.container.Module.start(Module.java:468)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel$2.run(ModuleContainer.java:1847)
> at
> org.eclipse.osgi.internal.framework.EquinoxContainerAdaptor$1$1.execute(EquinoxContainerAdaptor.java:136)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1840)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1783)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1745)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1667)
> at
> org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1)
> at
> org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:234)
> at
> org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:345)
> Caused by: java.util.zip.ZipException: Invalid CEN header (invalid zip64
> extra data field size)
> at java.base/java.util.zip.ZipFile$Source.zerror(ZipFile.java:1728)
> at
> java.base/java.util.zip.ZipFile$Source.checkExtraFields(ZipFile.java:1261)
> at
> java.base/java.util.zip.ZipFile$Source.checkAndAddEntry(ZipFile.java:1212)
> at java.base/java.util.zip.ZipFile$Source.initCEN(ZipFile.java:1667)
> at java.base/java.util.zip.ZipFile$Source.<init>(ZipFile.java:1445)
> at java.base/java.util.zip.ZipFile$Source.get(ZipFile.java:1407)
> at
> java.base/java.util.zip.ZipFile$CleanableResource.<init>(ZipFile.java:716)
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:250)
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:179)
> at java.base/java.util.zip.ZipFile.<init>(ZipFile.java:193)
> at
> org.eclipse.osgi.framework.util.SecureAction.getZipFile(SecureAction.java:342)
> ... 43 more {code}
> To workaround these exception we had to disable this new JVM feature by
> setting the property {{jdk.util.zip.disableZip64ExtraFieldValidation=true}}
>
> The issue seems to be that the embedded {{geronimo-osgi-locator.jar}} library
> in the bundle has invalid headers.
>
> On my Ubuntu system I could check that this embedded JAR has issues with:
> {code:java}
> $ zip -T geronimo-osgi-locator.jar
> META-INF/MANIFEST.MF bad extra-field entry:
> EF block length (61373 bytes) exceeds remaining EF data (4 bytes)
> test of geronimo-osgi-locator.jar FAILED
> zip error: Zip file invalid, could not spawn unzip, or wrong unzip (original
> files unmodified) {code}
> Another workaround I tried is replacing this bundle with
> {{jakarta.ws.rs:jakarta.ws.rs-api:2.1.6}}
> However that bundle does not provide the {{osgi.contract=JavaJAXRS}}
> capability in its manifest which causes OSGi bundle resolution issues.
>
--
This message was sent by Atlassian Jira
(v8.20.10#820010)