Open tkyggit opened 4 months ago
I also encountered this issue (on the same artifiact, only obtained via https://download.eclipse.org/releases/2024-03/).
Adding a com.sonatype.nexus.repository
logger (at TRACE
) level unfortunately didn't yield a more helpful log message:
2024-03-21 13:11:48,048+0100 WARN [qtp1157497352-45492] *UNKNOWN com.sonatype.nexus.repository.p2.orient.internal.proxy.OrientP2ProxyFacet
- Exception java.io.IOException: invalid manifest format checking remote for update, proxy repo p2-eclipse-simrel-2024-03 failed to fetch https://download.eclipse.org/releases/2024-03/202403131000/plugins/org.mortbay.jasper.apache-el_9.0.83.jar, content not in cache.
As this ticket is labelled help wanted, @mrprescott, is there anything else I can do to help debug this? Unfortunately, I cannot even find the code of the nexus p2 plugin (bundle com.sonatype.nexus.plugins:nexus-repository-p2
) anymore, so it is really hard to determine how the manifest format is actually checked. (Cursory inspection of the file in question didn't turn up anything unusual; just the Maven bundle plug-in doing its work.)
Hi, We are also hitting a similar issue in Nexus 3.67.1, this is not an issue in the last version of nexus 2 with it's p2 plugin. Strict Content type validation has been turned off.
The jar URL listed in this stack trace is publicly accessible. The repo mirrored is https://download.eclipse.org/releases/neon/201703231000/
2024-04-24 14:07:06,205+0000 WARN [qtp2132960782-76] *UNKNOWN com.sonatype.nexus.repository.p2.orient.internal.proxy.OrientP2ProxyFacet - Exception java.io.IOException: invalid header field checking remote for update, proxy repo neon-releases failed to fetch https://download.eclipse.org/releases/neon/201703231000/plugins/javax.wsdl_1.5.1.v201012040544.jar, content not in cache.
java.io.IOException: invalid header field
at java.util.jar.Attributes.read(Attributes.java:404)
at java.util.jar.Manifest.read(Manifest.java:234)
at java.util.jar.Manifest.<init>(Manifest.java:81)
at java.util.jar.Manifest.<init>(Manifest.java:73)
at com.sonatype.nexus.repository.p2.internal.util.AttributesParserManifest$1.createSpecificEntity(AttributesParserManifest.java:56)
at com.sonatype.nexus.repository.p2.internal.util.AttributesParserManifest$1.createSpecificEntity(AttributesParserManifest.java:1)
at com.sonatype.nexus.repository.p2.internal.util.JarExtractor.getSpecificEntity(JarExtractor.java:42)
at com.sonatype.nexus.repository.p2.internal.util.AttributesParserManifest.getAttributesFromBlob(AttributesParserManifest.java:67)
at com.sonatype.nexus.repository.p2.util.P2TempBlobUtils.loadAttributesFrom(P2TempBlobUtils.java:59)
at com.sonatype.nexus.repository.p2.util.P2TempBlobUtils.mergeAttributesFromTempBlob(P2TempBlobUtils.java:76)
at com.sonatype.nexus.repository.p2.orient.internal.proxy.OrientP2ProxyFacet.doPutComponent(OrientP2ProxyFacet.java:263)
at com.sonatype.nexus.repository.p2.orient.internal.proxy.OrientP2ProxyFacet.putComponent(OrientP2ProxyFacet.java:253)
at org.sonatype.nexus.transaction.TransactionalWrapper.proceedWithTransaction(TransactionalWrapper.java:58)
at org.sonatype.nexus.transaction.TransactionInterceptor.proceedWithTransaction(TransactionInterceptor.java:66)
at org.sonatype.nexus.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:55)
at com.sonatype.nexus.repository.p2.orient.internal.proxy.OrientP2ProxyFacet.store(OrientP2ProxyFacet.java:139)
at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.doGet(ProxyFacetSupport.java:320)
at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.lambda$1(ProxyFacetSupport.java:285)
at org.sonatype.nexus.common.cooperation2.internal.orient.OrientCooperation2$OrientCooperation2Builder.lambda$1(OrientCooperation2.java:69)
at org.sonatype.nexus.common.io.CooperatingFuture.performCall(CooperatingFuture.java:123)
at org.sonatype.nexus.common.io.CooperatingFuture.call(CooperatingFuture.java:65)
at org.sonatype.nexus.common.io.ScopedCooperationFactorySupport$ScopedCooperation.cooperate(ScopedCooperationFactorySupport.java:99)
at org.sonatype.nexus.common.cooperation2.internal.orient.OrientCooperation2$OrientCooperation2Builder.cooperate(OrientCooperation2.java:64)
at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:295)
at org.sonatype.nexus.repository.proxy.ProxyFacetSupport.get(ProxyFacetSupport.java:278)
at org.sonatype.nexus.repository.proxy.ProxyHandler.handle(ProxyHandler.java:53)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.storage.UnitOfWorkHandler.handle(UnitOfWorkHandler.java:39)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.view.handlers.ContentHeadersHandler.handle(ContentHeadersHandler.java:46)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.http.PartialFetchHandler.handle(PartialFetchHandler.java:59)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.view.handlers.ConditionalRequestHandler.handle(ConditionalRequestHandler.java:67)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.cache.NegativeCacheHandler.handle(NegativeCacheHandler.java:72)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at com.sonatype.nexus.clm.internal.orient.FirewallContributedHandler.handle(FirewallContributedHandler.java:114)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at com.sonatype.analytics.internal.handler.AnalyticsBytesTransferredHandler.handle(AnalyticsBytesTransferredHandler.java:51)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at com.sonatype.analytics.internal.handler.AnalyticsBytesTransferredHandler.handle(AnalyticsBytesTransferredHandler.java:51)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.view.handlers.HandlerContributor.handle(HandlerContributor.java:67)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.view.handlers.ExceptionHandler.handle(ExceptionHandler.java:42)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.routing.internal.RoutingRuleHandler.handle(RoutingRuleHandler.java:68)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.view.handlers.FormatHighAvailabilitySupportHandler.handle(FormatHighAvailabilitySupportHandler.java:53)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at com.sonatype.analytics.internal.LoginsCounterHandler.handle(LoginsCounterHandler.java:87)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.security.SecurityHandler.handle(SecurityHandler.java:64)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at com.sonatype.analytics.internal.handler.AnalyticsMeteringHandler.handle(AnalyticsMeteringHandler.java:69)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.view.handlers.TimingHandler.handle(TimingHandler.java:58)
at org.sonatype.nexus.repository.view.Context.proceed(Context.java:88)
at org.sonatype.nexus.repository.view.Context.start(Context.java:179)
at org.sonatype.nexus.repository.view.Router.dispatch(Router.java:65)
at org.sonatype.nexus.repository.view.ConfigurableViewFacet.dispatch(ConfigurableViewFacet.java:52)
at org.sonatype.nexus.repository.view.ConfigurableViewFacet.dispatch(ConfigurableViewFacet.java:43)
at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.dispatchAndSend(ViewServlet.java:212)
at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.doService(ViewServlet.java:174)
at org.sonatype.nexus.repository.httpbridge.internal.ViewServlet.service(ViewServlet.java:126)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at com.google.inject.servlet.ServletDefinition.doServiceImpl(ServletDefinition.java:293)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:283)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:184)
at com.google.inject.servlet.DynamicServletPipeline.service(DynamicServletPipeline.java:71)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:85)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)
at org.sonatype.nexus.security.SecurityFilter.executeChain(SecurityFilter.java:96)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)
at org.sonatype.nexus.security.SecurityFilter.doFilterInternal(SecurityFilter.java:112)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:112)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:458)
at org.sonatype.nexus.security.SecurityFilter.executeChain(SecurityFilter.java:96)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:373)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:387)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:370)
at org.sonatype.nexus.security.SecurityFilter.doFilterInternal(SecurityFilter.java:112)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at org.sonatype.nexus.repository.httpbridge.internal.ExhaustRequestFilter.doFilter(ExhaustRequestFilter.java:80)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:154)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.sonatype.nexus.licensing.internal.LicensingRedirectFilter.doFilter(LicensingRedirectFilter.java:116)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.codahale.metrics.servlet.AbstractInstrumentedFilter.doFilter(AbstractInstrumentedFilter.java:112)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at org.sonatype.nexus.internal.web.ErrorPageFilter.doFilter(ErrorPageFilter.java:79)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at org.sonatype.nexus.internal.web.EnvironmentFilter.doFilter(EnvironmentFilter.java:101)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at org.sonatype.nexus.internal.web.HeaderPatternFilter.doFilter(HeaderPatternFilter.java:98)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:82)
at com.google.inject.servlet.DynamicFilterPipeline.dispatch(DynamicFilterPipeline.java:104)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:133)
at org.sonatype.nexus.bootstrap.osgi.DelegatingFilter.doFilter(DelegatingFilter.java:73)
at org.eclipse.jetty.servlet.FilterHolder.doFilter(FilterHolder.java:201)
at org.eclipse.jetty.servlet.ServletHandler$Chain.doFilter(ServletHandler.java:1626)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:552)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:600)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1624)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1440)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:505)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1594)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1355)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:239)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:516)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:487)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:732)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:479)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:338)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:315)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:173)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:131)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:409)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:883)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1034)
at java.lang.Thread.run(Thread.java:750)
It looks like the last public release of the p2 repository was https://github.com/sonatype/nexus-public/tree/release-3.32.0-03/plugins/nexus-repository-p2 I believe it is no longer open source.
I expect JarExtractor.getSpecificEntity()
needs to catch the IOException
from the java.util
calls and return an empty Optional
.
Cheers, Liam.
The same issue shows up with 3.68.0 and https://download.eclipse.org/releases/2024-06/...
I expect JarExtractor.getSpecificEntity() needs to catch the IOException from the java.util calls and return an empty Optional.
The manifest itself is fine. It looks more like the class is unable to find the file inside the Jar. Even if the exception is caught, it would still not be possible to proxy the item.
Manifest-Version: 1.0
Automatic-Module-Name: org.mortbay.apache.jasper
Bnd-LastModified: 1702514564879
Build-Jdk-Spec: 11
Bundle-Classpath: .
Bundle-Description: A rebundling of Apache Tomcat Jasper to remove the t
omcat server dependencies, so that the JSP engine can be used by the
Eclipse Jetty project.
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0
Bundle-ManifestVersion: 2
Bundle-Name: Mortbay Jasper
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-SymbolicName: org.mortbay.jasper.apache-jsp
Bundle-Version: 9.0.83
Created-By: Apache Maven Bundle Plugin 5.1.9
Export-Package: org.apache.juli.logging;version="9.0.83",org.apache.tomc
at;version="9.0.83",org.apache.tomcat.util.compat;version="9.0.83",org.
apache.tomcat.util.scan;version="9.0.83",org.apache.tomcat.util.file;ve
rsion="9.0.83",org.apache.tomcat.util.digester;version="9.0.83",org.apa
che.tomcat.util.descriptor.tagplugin;version="9.0.83",org.apache.tomcat
.util.descriptor.tld;version="9.0.83",org.apache.tomcat.util.descriptor
.web;version="9.0.83",org.apache.tomcat.util;version="9.0.83",org.apach
e.tomcat.util.buf;version="9.0.83",org.apache.tomcat.util.res;version="
9.0.83",org.apache.tomcat.util.security;version="9.0.83",javax.servlet.
jsp;version="2.3",javax.servlet.jsp.el;version="2.3",javax.servlet.jsp.
tagext;version="2.3",javax.servlet.jsp.resources;version="2.3",org.apac
he.jasper;version="9.0.83",org.apache.jasper.compiler;version="9.0.83",
org.apache.jasper.compiler.tagplugin;version="9.0.83",org.apache.jasper
.el;version="9.0.83",org.apache.jasper.resources;version="9.0.83",org.a
pache.jasper.runtime;version="9.0.83",org.apache.jasper.security;versio
n="9.0.83",org.apache.jasper.servlet;version="9.0.83",org.apache.jasper
.tagplugins.jstl;version="9.0.83",org.apache.jasper.tagplugins.jstl.cor
e;version="9.0.83",org.apache.jasper.util;version="9.0.83",org.apache.j
asper.xmlparser;version="9.0.83"
Implementation-Version: 9.0.83
Import-Package: javax.el;version="3.0",javax.naming,javax.net.ssl,javax.
servlet;version="4.0.0",javax.servlet.annotation;version="4.0.0",javax.
servlet.descriptor;version="4.0.0",javax.servlet.http;version="4.0.0",j
avax.servlet.resources;version="4.0.0",javax.xml.parsers,org.apache.el.
util;version="[9.0,10)",org.apache.tomcat.util.descriptor;version="9.0.
14";resolution:=optional,org.apache.tomcat.util.descriptor.tagplugin;ve
rsion="9.0.14";resolution:=optional,org.eclipse.jdt.core.compiler,org.e
clipse.jdt.internal.compiler,org.eclipse.jdt.internal.compiler.classfmt
,org.eclipse.jdt.internal.compiler.env,org.eclipse.jdt.internal.compile
r.impl,org.eclipse.jdt.internal.compiler.problem,org.xml.sax,org.xml.sa
x.ext,org.xml.sax.helpers
Require-Capability: osgi.serviceloader;filter:="(osgi.serviceloader=org.
apache.juli.logging.Log)";resolution:=optional;cardinality:=multiple,os
gi.extender;filter:="(osgi.extender=osgi.serviceloader.processor)"
Specification-Version: 2.3
Tool: Bnd-6.3.1.202206071316
My assumption is that the current implementation is still using the JarInputStream, which assumes that the manifest file is the first item in the jar...
Example:
This jar is available in our proxy repository:
PS C:\Users\pzi\Downloads> jar -tvf .\bcpg_1.78.1.jar
54308 Thu Apr 18 14:58:40 CEST 2024 META-INF/MANIFEST.MF
49892 Thu Apr 18 14:58:40 CEST 2024 META-INF/BC2048KE.SF
8717 Thu Apr 18 14:58:40 CEST 2024 META-INF/BC2048KE.DSA
0 Thu Apr 18 04:20:16 CEST 2024 META-INF/
0 Thu Apr 18 04:20:16 CEST 2024 META-INF/versions/
0 Thu Apr 18 04:20:16 CEST 2024 META-INF/versions/9/
0 Thu Apr 18 04:20:16 CEST 2024 META-INF/versions/9/OSGI-INF/
2539 Thu Apr 18 04:20:16 CEST 2024 META-INF/versions/9/OSGI-INF/MANIFEST.MF
797 Thu Apr 18 04:20:16 CEST 2024 META-INF/versions/9/module-info.class
0 Thu Apr 18 04:20:16 CEST 2024 org/
0 Thu Apr 18 04:20:16 CEST 2024 org/bouncycastle/
0 Thu Apr 18 04:20:16 CEST 2024 org/bouncycastle/apache/
0 Thu Apr 18 04:20:16 CEST 2024 org/bouncycastle/apache/bzip2/
491 Thu Apr 18 04:20:16 CEST 2024 org/bouncycastle/apache/bzip2/BZip2Constants.class
...
While this one is not:
PS C:\Users\pzi\Downloads> jar -tvf .\org.mortbay.jasper.apache-el_9.0.83.jar
0 Fri Feb 01 00:00:00 CET 1980 META-INF/
11358 Fri Feb 01 00:00:00 CET 1980 META-INF/LICENSE
167 Fri Feb 01 00:00:00 CET 1980 META-INF/NOTICE
...
1100 Fri Feb 01 00:00:00 CET 1980 javax/el/ValueExpression.class
705 Fri Feb 01 00:00:00 CET 1980 javax/el/ValueReference.class
457 Fri Feb 01 00:00:00 CET 1980 javax/el/VariableMapper.class
1304 Tue Nov 28 01:21:29 CET 2017 META-INF/MANIFEST.MF
Notice how the MANIFEST.MF is the last entry in the jar, rather than the first.
The code tries to merge the "source" attributes with the ones it gets from the MANIFEST, so if reading the MANIFEST fails it should still be able to store the artifact using it's source information.
Maybe that is not enough metadata to allow the artifact to be fetched during builds. But presumably nexus 2 did something like this, or just didn't use JarInputStream
.
Note that nexus 2 doesn't work to mirror newer Eclipse repositories, since around Eclipse 4.30, so nexus 3 must be used.
Is it org.mortbay.jasper.apache-el_9.0.83.jar
causing the issue for eclipse 2024-06, or a jar built by eclipse? If the latter, It may be possible to raise the jar issue with eclipse.
Create URL in p2 repository with the following specification
URL:http://download.eclipse.org/technology/m2e/releases/latest/
setup eclipse, and update via plugin. but some jar cannot download.
plugins/org.mortbay.jasper.apache-jsp_9.0.83.jar is working, but org.mortbay.jasper.apache-el_9.0.83.jar is not working due to following error.
what is 'invalid manifest format ' and how can I resolve this ?