From cee9bca71b8fc98505d99edf566d559691c678e1 Mon Sep 17 00:00:00 2001 From: Jan-Hendrik Spahn Date: Fri, 10 Apr 2026 15:53:08 +0200 Subject: [PATCH] fix: load SPARQL templates from classpath in packaged backend The loader was calling ClassPathResource#getFile(), which which only works when the resource exists as a real filesystem file. In a packaged jar it becomes a nested classpath resource, so getFile() throws a FileNotFoundException. --- .../cim/queries/templates/SparqlTemplateLoader.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/backend/src/main/java/org/rdfarchitect/models/cim/queries/templates/SparqlTemplateLoader.java b/backend/src/main/java/org/rdfarchitect/models/cim/queries/templates/SparqlTemplateLoader.java index 1c7c6e8f..04e0ee40 100644 --- a/backend/src/main/java/org/rdfarchitect/models/cim/queries/templates/SparqlTemplateLoader.java +++ b/backend/src/main/java/org/rdfarchitect/models/cim/queries/templates/SparqlTemplateLoader.java @@ -19,17 +19,24 @@ import org.apache.jena.query.ParameterizedSparqlString; import org.springframework.core.io.ClassPathResource; +import org.springframework.core.io.Resource; +import java.io.IOException; import java.nio.charset.StandardCharsets; -import java.nio.file.Files; public class SparqlTemplateLoader { public static ParameterizedSparqlString loadTemplate(String path) { try { var resource = new ClassPathResource("sparql-templates/" + path + ".sparql"); - return new ParameterizedSparqlString(Files.readString(resource.getFile().toPath(), StandardCharsets.UTF_8)); + return new ParameterizedSparqlString(readTemplate(resource)); } catch (Exception e) { throw new RuntimeException("Failed to load SPARQL template: " + path, e); } } + + static String readTemplate(Resource resource) throws IOException { + try (var inputStream = resource.getInputStream()) { + return new String(inputStream.readAllBytes(), StandardCharsets.UTF_8); + } + } }