This is an automated email from the ASF dual-hosted git repository. arne-bdt pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/jena.git
commit c76e09f8eb9b4f57efbdb9206240fbda65f20f58 Author: bern-SOPTIM <[email protected]> AuthorDate: Sat May 23 17:48:49 2026 +0200 GH-3939: Workaround for bug in Jetty 12.1.9 Workaround Jetty bug for Windows by using URLResourceFactory for baseResource --- .../org/apache/jena/fuseki/main/FusekiServer.java | 23 +++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java index b2c61d4876..4a23a892a7 100644 --- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java +++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java @@ -25,6 +25,7 @@ import static java.util.Objects.requireNonNull; import static org.apache.jena.atlas.lib.PropertyUtils.loadFromFile; import java.io.IOException; +import java.net.MalformedURLException; import java.nio.file.Path; import java.util.*; import java.util.function.Predicate; @@ -70,15 +71,13 @@ import org.apache.jena.sparql.util.ContextAccumulator; import org.apache.jena.sys.JenaSystem; import org.apache.jena.system.G; import org.apache.jena.system.RDFDataException; -import org.eclipse.jetty.ee11.servlet.DefaultServlet; -import org.eclipse.jetty.ee11.servlet.FilterHolder; -import org.eclipse.jetty.ee11.servlet.ServletContextHandler; -import org.eclipse.jetty.ee11.servlet.ServletHolder; +import org.eclipse.jetty.ee11.servlet.*; import org.eclipse.jetty.ee11.servlet.security.ConstraintSecurityHandler; import org.eclipse.jetty.security.SecurityHandler; import org.eclipse.jetty.security.UserStore; import org.eclipse.jetty.server.*; import org.eclipse.jetty.server.handler.ErrorHandler; +import org.eclipse.jetty.util.resource.Resource; import org.slf4j.Logger; /** @@ -1839,8 +1838,22 @@ public class FusekiServer { if ( staticContentDir != null ) { DefaultServlet staticServlet = new DefaultServlet(); ServletHolder staticContent = new ServletHolder(staticServlet); - staticContent.setInitParameter("baseResource", staticContentDir); //staticContent.setInitParameter("cacheControl", "false"); + if ( staticContentDir.startsWith("jar:") ) { + staticContent.setInitParameter("baseResource", staticContentDir); + } else { + try { + // Use URLResourceFactory instead of ResourceFactory.of(context) (which yields PathResource) + // to work around a Windows bug in Jetty 12.1.9 PathResource.resolve(URI) where + // path.resolve(uri.getPath()) fails for absolute Windows paths. + // See: https://github.com/jetty/jetty.project/pull/15020 + java.net.URL url = Path.of(staticContentDir).toUri().toURL(); + Resource base = new org.eclipse.jetty.util.resource.URLResourceFactory().newResource(url); + context.setBaseResource(base); + } catch (MalformedURLException e) { + staticContent.setInitParameter("baseResource", staticContentDir); + } + } context.addServlet(staticContent, "/"); } else { // Backstop servlet
