From ad0e9419090a883de79c083e50ef1d43373fa5f1 Mon Sep 17 00:00:00 2001
From: jr-rk <95219754+jr-rk@users.noreply.github.com>
Date: Tue, 11 Aug 2026 15:41:36 +0200
Subject: [PATCH 1/2] fix(rest): make REST root version prefix configurable
(default "DSpace")
RootConverter hardcoded "DSpace " as the version-string prefix that the UI
renders as . The "CLARIN-DSpace " identity introduced
by #985 was dropped in the 7.6.5 merge (#1031); hardcoding it back would
mis-brand the non-customer branches. Instead read the prefix from a new
`dspace.version.prefix` property, defaulting to "DSpace" so nothing changes
unless a deployment opts in (e.g. CLARIN sets "CLARIN-DSpace").
Port of dataquest-dev/dspace-customers#903 (item 6).
Co-Authored-By: Claude Fable 5
---
.../org/dspace/app/rest/converter/RootConverter.java | 3 ++-
.../dspace/app/rest/converter/RootConverterTest.java | 12 ++++++++++++
dspace/config/dspace.cfg | 5 +++++
3 files changed, 19 insertions(+), 1 deletion(-)
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java
index 3675ddf13f0..8e769cf4c27 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java
@@ -44,7 +44,8 @@ public RootRest convert(HttpServletRequest request) {
} else {
rootRest.setDspaceServer(dspaceUrl);
}
- rootRest.setDspaceVersion("DSpace " + getSourceVersion());
+ String versionPrefix = configurationService.getProperty("dspace.version.prefix", "DSpace");
+ rootRest.setDspaceVersion(versionPrefix + " " + getSourceVersion());
rootRest.setBuildVersion(getBuildVersion());
return rootRest;
}
diff --git a/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/RootConverterTest.java b/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/RootConverterTest.java
index 951bedbf47c..53b16fd8cb3 100644
--- a/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/RootConverterTest.java
+++ b/dspace-server-webapp/src/test/java/org/dspace/app/rest/converter/RootConverterTest.java
@@ -45,6 +45,7 @@ public void setUp() throws Exception {
when(configurationService.getProperty("dspace.name")).thenReturn("dspacename");
when(configurationService.getProperty("dspace.server.url")).thenReturn(serverURL);
when(configurationService.getProperty("dspace.server.ssr.url", serverURL)).thenReturn(serverSSRURL);
+ when(configurationService.getProperty("dspace.version.prefix", "DSpace")).thenReturn("DSpace");
}
@@ -85,4 +86,15 @@ public void testCorrectInternalUrlSetFromConfigurationService() throws Exception
assertEquals(serverSSRURL, rootRest.getDspaceServer());
assertEquals("DSpace " + Util.getSourceVersion(), rootRest.getDspaceVersion());
}
+
+ @Test
+ public void testConfigurableVersionPrefix() throws Exception {
+ when(configurationService.getProperty("dspace.version.prefix", "DSpace")).thenReturn("CLARIN-DSpace");
+ request.setScheme("https");
+ request.setServerName("dspace-rest");
+ request.setServerPort(443);
+ request.setRequestURI("/server/api");
+ RootRest rootRest = rootConverter.convert(request);
+ assertEquals("CLARIN-DSpace " + Util.getSourceVersion(), rootRest.getDspaceVersion());
+ }
}
diff --git a/dspace/config/dspace.cfg b/dspace/config/dspace.cfg
index add4564d547..4359ea7d6cc 100644
--- a/dspace/config/dspace.cfg
+++ b/dspace/config/dspace.cfg
@@ -42,6 +42,11 @@ dspace.ui.url = http://localhost:4000
dspace.name = DSpace at My University
dspace.shortname = DSpace
+# Prefix for the version string exposed at the REST root (/server/api), rendered by the UI as
+# the HTML value. Defaults to "DSpace" when unset; CLARIN/customer
+# deployments may set e.g. "CLARIN-DSpace".
+# dspace.version.prefix = DSpace
+
# Assetstore configurations have moved to config/modules/assetstore.cfg
# and config/spring/api/bitstore.xml.
# Additional storage options (e.g. Amazon S3) are available in `assetstore.cfg`
From 6fe6678ccf313ef2b83542646a320ba804ca0164 Mon Sep 17 00:00:00 2001
From: jr-rk <95219754+jr-rk@users.noreply.github.com>
Date: Wed, 12 Aug 2026 15:57:05 +0200
Subject: [PATCH 2/2] fix(rest): fall back to default when
dspace.version.prefix is blank
configurationService.getProperty(key, default) only returns the default
when the key is absent; a present-but-empty value returned "" and produced
a malformed version string (leading space) at the REST root. Guard with
StringUtils.defaultIfBlank so both missing and blank collapse to "DSpace".
Co-Authored-By: Claude Opus 4.8
---
.../main/java/org/dspace/app/rest/converter/RootConverter.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java
index 8e769cf4c27..3b8b1ec1136 100644
--- a/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java
+++ b/dspace-server-webapp/src/main/java/org/dspace/app/rest/converter/RootConverter.java
@@ -44,7 +44,8 @@ public RootRest convert(HttpServletRequest request) {
} else {
rootRest.setDspaceServer(dspaceUrl);
}
- String versionPrefix = configurationService.getProperty("dspace.version.prefix", "DSpace");
+ String versionPrefix = StringUtils.defaultIfBlank(
+ configurationService.getProperty("dspace.version.prefix", "DSpace"), "DSpace");
rootRest.setDspaceVersion(versionPrefix + " " + getSourceVersion());
rootRest.setBuildVersion(getBuildVersion());
return rootRest;