Hi, I came across this page ( http://ops4j.github.io/pax/web/SNAPSHOT/User-Guide.html#adding-specialized-contexthandlers) in the Pax-Web documentation on how to configure Jetty to serve up static content.
Trying it with Karaf 4.3.7 works, specifically I take a brand new instance and install the http and webconsole features, and then adding this to jetty.xml allows serving up files in /var/html/test at http://localhost:8181/app/.... <Get name="handler"> <Call name="addHandler"> <Arg> <New class="org.eclipse.jetty.servlet.ServletContextHandler"> <Set name="contextPath">/app</Set> <Set name="resourceBase">/var/html/test</Set> <Call name="addServlet"> <Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg> <Arg>/</Arg> </Call> </New> </Arg> </Call> </Get> However, trying the same thing with 4.4.3 fails. I did it in an instance with a bunch of features already installed and got this warning: 20230223 18:27:19.312 [WARN ] paxweb-config-3-thread-1 (change controller) | 268:org.eclipse.jetty.util:9.4.50.v20221201 | org.eclipse.jetty.xml.XmlConfiguration | Config error at <Call name="addHandler"> <Arg> <New class="org.eclipse.jetty.servlet.ServletContextHandler"> <Set name="contextPath">/app</Set> <Set name="resourceBase">/var/html/test</Set> <Call name="addServlet"> <Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg> <Arg>/</Arg> </Call> </New> </Arg> </Call> 20230223 18:27:19.313 [WARN ] paxweb-config-3-thread-1 (change controller) | 268:org.eclipse.jetty.util:9.4.50.v20221201 | org.eclipse.jetty.xml.XmlConfiguration | Config error at <Get name="handler"> <Call name="addHandler"> <Arg> <New class="org.eclipse.jetty.servlet.ServletContextHandler"> <Set name="contextPath">/app</Set> <Set name="resourceBase">/var/html/test</Set> <Call name="addServlet"> <Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg> <Arg>/</Arg> </Call> </New> </Arg> </Call> </Get> My Karaf 4.3.7 has Jetty 9.4.46 and Pax Web 7.3.25 while Karaf 4.4.3 has Jetty 9.4.50 and Pax Web 8.0.15 Did something change with Jetty config that this is no longer valid? I wouldn't think so with the change from 9.4.46 to 9.4.50 but it clearly doesn't work. I tried changing the section in jetty.xml to this, using insertHandler instead: <Call name="insertHandler"> <Arg> <New class="org.eclipse.jetty.servlet.ServletContextHandler"> <Set name="contextPath">/app</Set> <Set name="resourceBase">/var/html/test</Set> <Call name="addServlet"> <Arg>org.eclipse.jetty.servlet.DefaultServlet</Arg> <Arg>/</Arg> </Call> </New> </Arg> </Call> This doesn't have a config error, but instead fails finding the DefaultServlet class. 20230223 18:48:04.276 [WARN ] paxweb-config-3-thread-1 (change controller) | 268:org.eclipse.jetty.util:9.4.50.v20221201 | org.eclipse.jetty.servlet.BaseHolder | java.lang.ClassNotFoundException: org.eclipse.jetty.servlet.DefaultServlet at java.net.URLClassLoader.findClass(URLClassLoader.java:387) ~[?:1.8.0_352] at java.lang.ClassLoader.loadClass(ClassLoader.java:418) ~[?:1.8.0_352] at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352) ~[?:1.8.0_352] at java.lang.ClassLoader.loadClass(ClassLoader.java:351) ~[?:1.8.0_352] at org.eclipse.jetty.util.Loader.loadClass(Loader.java:64) ~[?:?] at org.eclipse.jetty.servlet.BaseHolder.doStart(BaseHolder.java:89) ~[?:?] at org.eclipse.jetty.servlet.ServletHolder.doStart(ServletHolder.java:369) ~[?:?] at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) ~[?:?] at org.eclipse.jetty.servlet.ServletHandler.lambda$initialize$0(ServletHandler.java:749) ~[?:?] at java.util.stream.SortedOps$SizedRefSortingSink.end(SortedOps.java:357) ~[?:1.8.0_352] at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:483) ~[?:1.8.0_352] at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:472) ~[?:1.8.0_352] at java.util.stream.StreamSpliterators$WrappingSpliterator.forEachRemaining(StreamSpliterators.java:313) ~[?:1.8.0_352] at java.util.stream.Streams$ConcatSpliterator.forEachRemaining(Streams.java:743) ~[?:1.8.0_352] at java.util.stream.ReferencePipeline$Head.forEach(ReferencePipeline.java:647) ~[?:1.8.0_352] at org.eclipse.jetty.servlet.ServletHandler.initialize(ServletHandler.java:774) ~[?:?] at org.eclipse.jetty.servlet.ServletContextHandler.startContext(ServletContextHandler.java:379) ~[?:?] at org.eclipse.jetty.server.handler.ContextHandler.doStart(ContextHandler.java:916) ~[?:?] at org.eclipse.jetty.servlet.ServletContextHandler.doStart(ServletContextHandler.java:288) ~[?:?] at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) ~[?:?] at org.eclipse.jetty.util.component.ContainerLifeCycle.start(ContainerLifeCycle.java:169) ~[?:?] at org.eclipse.jetty.server.Server.start(Server.java:423) ~[?:?] at org.eclipse.jetty.util.component.ContainerLifeCycle.doStart(ContainerLifeCycle.java:110) ~[?:?] at org.eclipse.jetty.server.handler.AbstractHandler.doStart(AbstractHandler.java:97) ~[?:?] at org.eclipse.jetty.server.Server.doStart(Server.java:387) ~[?:?] at org.eclipse.jetty.util.component.AbstractLifeCycle.start(AbstractLifeCycle.java:73) ~[?:?] at org.ops4j.pax.web.service.jetty.internal.JettyServerWrapper.start(JettyServerWrapper.java:623) ~[?:?] at org.ops4j.pax.web.service.jetty.internal.JettyServerController.start(JettyServerController.java:109) ~[?:?] at org.ops4j.pax.web.service.internal.Activator.performConfiguration(Activator.java:555) ~[?:?] at org.ops4j.pax.web.service.internal.Activator.updateController(Activator.java:445) ~[?:?] at org.ops4j.pax.web.service.internal.Activator.lambda$updateServerControllerFactory$1(Activator.java:347) ~[?:?] at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[?:1.8.0_352] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_352] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) ~[?:1.8.0_352] at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) ~[?:1.8.0_352] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) ~[?:1.8.0_352] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) ~[?:1.8.0_352] at java.lang.Thread.run(Thread.java:750) ~[?:1.8.0_352] I had run across an earlier issue with Pax Web 8 missing a package import ( https://github.com/ops4j/org.ops4j.pax.web/issues/1817) so is this another one? Or what is the correct way to configure serving static content in jetty.xml with Karaf 4.4 / Pax Web 8? Thanks, Kevin
