I tested Karaf 4.2.8 staging and created a custom distribution.
Pax Web 7.2.13 is used on runtime.
Jetty 9.4.22.v20191022 is used on runtime.
I am still running into the NCDFE.
Should this really be working now?
java.lang.NoClassDefFoundError:
org/eclipse/jetty/util/MultiPartInputStreamParser
at
org.eclipse.jetty.server.MultiParts$MultiPartsUtilParser.<init>(MultiParts.java:104)
~[?:?]
at org.eclipse.jetty.server.Request.newMultiParts(Request.java:2402)
~[?:?]
at org.eclipse.jetty.server.Request.getParts(Request.java:2324) ~[?:?]
at org.eclipse.jetty.server.Request.getParts(Request.java:2310) ~[?:?]
at ....UploadServlet.handleUpload(UploadServlet.java:189) ~[?:?]
at ....UploadServlet.doPost(UploadServlet.java:152) ~[?:?]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
~[!/:3.1.0]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
~[!/:3.1.0]
at
org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:760)
~[?:?]
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617)
~[?:?]
at
org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:226)
~[?:?]
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
~[?:?]
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545)
~[?:?]
at
org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71)
~[?:?]
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536)
~[?:?]
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1592)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1296)
~[!/:9.4.22.v20191022]
at
org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:298)
~[?:?]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485)
~[?:?]
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1562)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1211)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
~[!/:9.4.22.v20191022]
at
org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80)
~[?:?]
at
org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:717)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
~[!/:9.4.22.v20191022]
at org.eclipse.jetty.server.Server.handle(Server.java:500)
~[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:386)
~[!/:9.4.22.v20191022]
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:562)
~[!/:9.4.22.v20191022]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378)
[!/:9.4.22.v20191022]
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:270)
[!/:9.4.22.v20191022]
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
[!/:9.4.22.v20191022]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
[!/:9.4.22.v20191022]
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
[!/:9.4.22.v20191022]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
[!/:9.4.22.v20191022]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
[!/:9.4.22.v20191022]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
[!/:9.4.22.v20191022]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
[!/:9.4.22.v20191022]
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:388)
[!/:9.4.22.v20191022]
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
[!/:9.4.22.v20191022]
at
org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
[!/:9.4.22.v20191022]
at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212]
Caused by: java.lang.ClassNotFoundException:
org.eclipse.jetty.util.MultiPartInputStreamParser
at
org.apache.felix.framework.BundleWiringImpl.getClassByDelegation(BundleWiringImpl.java:1401)
~[?:?]
at
org.apache.felix.framework.BundleWiringImpl.searchImports(BundleWiringImpl.java:1660)
~[?:?]
at
org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1590)
~[?:?]
at
org.apache.felix.framework.BundleWiringImpl.access$200(BundleWiringImpl.java:80)
~[?:?]
at
org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:2053)
~[?:?]
at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_212]
... 47 more
Am Di., 14. Jan. 2020 um 18:07 Uhr schrieb Jean-Baptiste Onofré
<[email protected]>:
>
> Hi Markus,
>
> it should be done on Jetty connector, so basically in Pax Web.
>
> Regards
> JB
>
> On 14/01/2020 16:12, Markus Rathgeb wrote:
> > Do you know about a method that can I call in my bundle code (e.g. in
> > its init method) to get it running on 4.2.7?
> > Any change to call "setMultiPartFormDataCompliance" in the servlet
> > implementation?
> > Or adding a configuration to config admin, ...?
> >
> > Am Di., 14. Jan. 2020 um 16:01 Uhr schrieb Jean-Baptiste Onofré
> > <[email protected]>:
> >>
> >> It should be fixed on 4.2.8.
> >>
> >> See https://ops4j1.jira.com/browse/PAXWEB-1246 for details.
> >>
> >> Regards
> >> JB
> >>
> >> On 14/01/2020 15:55, Markus Rathgeb wrote:
> >>> Hi,
> >>>
> >>> I updated a product using a custom distribution from 4.2.6 to 4.2.7.
> >>> Because of this in the runtime the following versions has been changed:
> >>> * Pax Web: 7.2.10 to 7.2.11
> >>> * Jetty: from 9.4.18.v20190429 to 9.4.20.v20190813
> >>>
> >>> There is a bundle that contains a HTTP servlet for a fie upload.
> >>>
> >>> The POST request is handled by a method that takes the
> >>> HttpServletRequest "request" and the HttpServletResponse "response".
> >>> At the beginning it calls:
> >>> final Collection<Part> parts = request.getParts();
> >>>
> >>> After that it handles the parts.
> >>>
> >>> This worked before but does not anymore.
> >>>
> >>> An exception is raised.
> >>>
> >>> java.lang.NoClassDefFoundError:
> >>> org/eclipse/jetty/util/MultiPartInputStreamParser
> >>> at
> >>> org.eclipse.jetty.server.MultiParts$MultiPartsUtilParser.<init>(MultiParts.java:104)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.Request.newMultiParts(Request.java:2295)
> >>> ~[!/:9.4.20.v20190813]
> >>> at org.eclipse.jetty.server.Request.getParts(Request.java:2217)
> >>> ~[!/:9.4.20.v20190813]
> >>> at org.eclipse.jetty.server.Request.getParts(Request.java:2203)
> >>> ~[!/:9.4.20.v20190813]
> >>> at ....UploadServlet.doPost(UploadServlet.java:152) ~[?:?]
> >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
> >>> ~[!/:3.1.0]
> >>> at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
> >>> ~[!/:3.1.0]
> >>> at
> >>> org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:852)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:226)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1591)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:542)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:71)
> >>> ~[!/:?]
> >>> at
> >>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1581)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1307)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:293)
> >>> ~[!/:?]
> >>> at
> >>> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:482)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1549)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1204)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:80)
> >>> ~[!/:?]
> >>> at
> >>> org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:722)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
> >>> ~[!/:9.4.20.v20190813]
> >>> at org.eclipse.jetty.server.Server.handle(Server.java:494)
> >>> ~[!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:374)
> >>> [!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:268)
> >>> [!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
> >>> [!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
> >>> [!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
> >>> [!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:782)
> >>> [!/:9.4.20.v20190813]
> >>> at
> >>> org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:918)
> >>> [!/:9.4.20.v20190813]
> >>> at java.lang.Thread.run(Thread.java:748) [?:1.8.0_212]
> >>>
> >>> I do not use the "MultiPartInputStreamParser" myself just call
> >>> "request.getParts()" in line 152 of the UploadServlet.java file.
> >>>
> >>> I assume the Jetty bundle misses some import for that specific util.
> >>> But this does not seems to be the case...
> >>>
> >>> karaf@root()> bundle:list -t 0 -l | grep jetty | grep server
> >>> 192 (0x Active │ 30 │ 9.4.20.v20190813 │
> >>> mvn:org.eclipse.jetty/jetty-server/9.4.20.v20190813
> >>> 202 (0x Active │ 30 │ 9.4.20.v20190813 │
> >>> mvn:org.eclipse.jetty.websocket/javax-websocket-server-impl/9.4.20.v20190813
> >>> 203 (0x Active │ 30 │ 9.4.20.v20190813 │
> >>> mvn:org.eclipse.jetty.websocket/websocket-server/9.4.20.v20190813
> >>>
> >>> The command "bundle:headers 192" shows:
> >>>
> >>> Import-Package =
> >>> ...
> >>> org.eclipse.jetty.util;version="[9.4.20,10)",
> >>> ...
> >>>
> >>> There is also only one util bundle (except the additional ajax one):
> >>>
> >>> karaf@root()> bundle:list -t 0 -l | grep jetty | grep util
> >>> 195 (0x Active │ 30 │ 9.4.20.v20190813 │
> >>> mvn:org.eclipse.jetty/jetty-util/9.4.20.v20190813
> >>> 196 (0x Active │ 30 │ 9.4.20.v20190813 │
> >>> mvn:org.eclipse.jetty/jetty-util-ajax/9.4.20.v20190813
> >>>
> >>> For me the following command shows the class is exported:
> >>>
> >>> karaf@root()> bundle:classes 195 | grep MultiPartInputStreamParser
> >>> org/eclipse/jetty/util/MultiPartInputStreamParser$1.class | exported: true
> >>> org/eclipse/jetty/util/MultiPartInputStreamParser$Base64InputStream.class
> >>> | exported: true
> >>> org/eclipse/jetty/util/MultiPartInputStreamParser$MultiPart.class |
> >>> exported: true
> >>> org/eclipse/jetty/util/MultiPartInputStreamParser$NonCompliance.class
> >>> | exported: true
> >>> org/eclipse/jetty/util/MultiPartInputStreamParser.class | exported: true
> >>>
> >>> What's wrong?
> >>>
> >>>
> >>>
> >>> I assume it is not relevant, but let's not loose any information:
> >>> There is an init method of the http servlet implementation class that
> >>> looks like:
> >>> ===
> >>> @Override
> >>> public void init() throws ServletException {
> >>> /*
> >>> * @MultipartConfig annotation for the class does not seem to work.
> >>> * So let's configure it programmatically.
> >>> */
> >>> final MultipartConfigElement mc = new
> >>> MultipartConfigElement(tempDir.getAbsolutePath(), MAX_FILE_SIZE,
> >>> MAX_REQUEST_SIZE, FILE_SIZE_THRESHOLD);
> >>>
> >>> for (final Entry<String, ? extends ServletRegistration> entry :
> >>> getServletContext().getServletRegistrations()
> >>> .entrySet()) {
> >>> final ServletRegistration reg = entry.getValue();
> >>> if (reg == null) {
> >>> continue;
> >>> }
> >>>
> >>> if (reg instanceof ServletRegistration.Dynamic) {
> >>> final ServletRegistration.Dynamic regDyn =
> >>> (ServletRegistration.Dynamic) reg;
> >>> regDyn.setMultipartConfig(mc);
> >>> }
> >>> }
> >>> }
> >>> ===
> >>>
> >>
> >> --
> >> Jean-Baptiste Onofré
> >> [email protected]
> >> http://blog.nanthrax.net
> >> Talend - http://www.talend.com
>
> --
> Jean-Baptiste Onofré
> [email protected]
> http://blog.nanthrax.net
> Talend - http://www.talend.com