From 9eb8428f5ad9d8220d4c06e80292d3b80e9dbf0e Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Tue, 15 Apr 2025 19:13:22 -0700 Subject: [PATCH 1/2] Issue 52855: Extracting remote pipeline resources from labkeyServer.jar doesn't include Servlet API --- .../labkey/embedded/EmbeddedExtractor.java | 21 +++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/server/embedded/src/org/labkey/embedded/EmbeddedExtractor.java b/server/embedded/src/org/labkey/embedded/EmbeddedExtractor.java index 3430496afd..fb7743e29c 100644 --- a/server/embedded/src/org/labkey/embedded/EmbeddedExtractor.java +++ b/server/embedded/src/org/labkey/embedded/EmbeddedExtractor.java @@ -224,7 +224,9 @@ public void extractExecutableJar(File destDirectory, boolean remotePipeline) { try (JarFile jar = new JarFile(verifyJar())) { - boolean foundDistributionZip = false; + boolean missingDistributionZip = true; + boolean missingBootstrapJar = remotePipeline; + boolean missingServletApiJar = remotePipeline; var entries = jar.entries(); while (entries.hasMoreElements()) { @@ -233,7 +235,7 @@ public void extractExecutableJar(File destDirectory, boolean remotePipeline) if ("labkey/distribution.zip".equals(entryName)) { - foundDistributionZip = true; + missingDistributionZip = false; try (var distInputStream = jar.getInputStream(entry)) { extractDistributionZip(distInputStream, destDirectory); @@ -241,14 +243,16 @@ public void extractExecutableJar(File destDirectory, boolean remotePipeline) } if (remotePipeline) { + // Keep this code in sync with org.labkey.pipeline.api.PipelineServiceImpl.extractBootstrapFromEmbedded() if (entry.getName().contains("labkeyBootstrap") && entry.getName().toLowerCase().endsWith(".jar")) { try (var in = jar.getInputStream(entry)) { extractFile(in, new File(destDirectory, "labkeyBootstrap.jar")); } + missingBootstrapJar = false; } - if (entry.getName().contains("tomcat-servlet-api") && entry.getName().toLowerCase().endsWith(".jar")) + if (entry.getName().contains("tomcat-embed-core") && entry.getName().toLowerCase().endsWith(".jar")) { File pipelineLib = new File(destDirectory, "pipeline-lib"); if (!pipelineLib.exists()) @@ -262,11 +266,20 @@ public void extractExecutableJar(File destDirectory, boolean remotePipeline) { extractFile(in, new File(pipelineLib, "servletApi.jar")); } + missingServletApiJar = false; } } } - if (!foundDistributionZip) + if (missingDistributionZip) + { + throw new ConfigException("Unable to find distribution zip required to run LabKey Server."); + } + if (missingBootstrapJar) + { + throw new ConfigException("Unable to find labkeyServer.jar required to run LabKey Server."); + } + if (missingServletApiJar) { throw new ConfigException("Unable to find distribution zip required to run LabKey Server."); } From d118870d412746cad403dce94032310954e7cba7 Mon Sep 17 00:00:00 2001 From: labkey-jeckels Date: Wed, 16 Apr 2025 13:28:41 -0700 Subject: [PATCH 2/2] Improve error messaging --- .../embedded/src/org/labkey/embedded/EmbeddedExtractor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/server/embedded/src/org/labkey/embedded/EmbeddedExtractor.java b/server/embedded/src/org/labkey/embedded/EmbeddedExtractor.java index fb7743e29c..d9449c6864 100644 --- a/server/embedded/src/org/labkey/embedded/EmbeddedExtractor.java +++ b/server/embedded/src/org/labkey/embedded/EmbeddedExtractor.java @@ -277,11 +277,11 @@ public void extractExecutableJar(File destDirectory, boolean remotePipeline) } if (missingBootstrapJar) { - throw new ConfigException("Unable to find labkeyServer.jar required to run LabKey Server."); + throw new ConfigException("Unable to find labkeyServer.jar required to run LabKey Server's remote pipeline code."); } if (missingServletApiJar) { - throw new ConfigException("Unable to find distribution zip required to run LabKey Server."); + throw new ConfigException("Unable to find Servlet API file required to run LabKey Server's remote pipeline code."); } } }