From eab2dff979d1b84a3de2e27837105b75d77701ef Mon Sep 17 00:00:00 2001 From: Pedro Igor Date: Thu, 5 May 2022 10:34:54 -0300 Subject: [PATCH] Loading message bundles using the flat-classpath theme provider (#11711) Closes #11186 --- ...ClasspathThemeResourceProviderFactory.java | 14 ++++++++++++++ ...ClasspathThemeResourceProviderFactory.java | 19 +++++++++++-------- 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/themes/FlatClasspathThemeResourceProviderFactory.java b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/themes/FlatClasspathThemeResourceProviderFactory.java index 6a8b4dc6416..932b0f47b8b 100644 --- a/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/themes/FlatClasspathThemeResourceProviderFactory.java +++ b/quarkus/runtime/src/main/java/org/keycloak/quarkus/runtime/themes/FlatClasspathThemeResourceProviderFactory.java @@ -21,6 +21,8 @@ import java.io.InputStream; import java.net.URL; import java.util.Enumeration; +import java.util.Locale; +import java.util.Properties; import org.keycloak.theme.ClasspathThemeResourceProviderFactory; public class FlatClasspathThemeResourceProviderFactory extends ClasspathThemeResourceProviderFactory { @@ -42,6 +44,18 @@ public InputStream getResourceAsStream(String path) throws IOException { return null; } + @Override + public Properties getMessages(String baseBundlename, Locale locale) throws IOException { + Properties messages = new Properties(); + Enumeration resources = classLoader.getResources(THEME_RESOURCES_MESSAGES + baseBundlename + "_" + locale.toString() + ".properties"); + + while (resources.hasMoreElements()) { + loadMessages(messages, resources.nextElement()); + } + + return messages; + } + @Override public String getId() { return ID; diff --git a/services/src/main/java/org/keycloak/theme/ClasspathThemeResourceProviderFactory.java b/services/src/main/java/org/keycloak/theme/ClasspathThemeResourceProviderFactory.java index fe9bc770748..1d61a7e4a32 100644 --- a/services/src/main/java/org/keycloak/theme/ClasspathThemeResourceProviderFactory.java +++ b/services/src/main/java/org/keycloak/theme/ClasspathThemeResourceProviderFactory.java @@ -63,17 +63,20 @@ protected InputStream getResourceAsStream(String path, URL rootResourceURL) thro @Override public Properties getMessages(String baseBundlename, Locale locale) throws IOException { - Properties m = new Properties(); - InputStream in = classLoader.getResourceAsStream(THEME_RESOURCES_MESSAGES + baseBundlename + "_" + locale.toString() + ".properties"); - if(in != null){ - Charset encoding = PropertiesUtil.detectEncoding(in); + Properties messages = new Properties(); + URL resource = classLoader.getResource(THEME_RESOURCES_MESSAGES + baseBundlename + "_" + locale.toString() + ".properties"); + loadMessages(messages, resource); + return messages; + } + + protected void loadMessages(Properties messages, URL resource) throws IOException { + if (resource != null) { + Charset encoding = PropertiesUtil.detectEncoding(resource.openStream()); // detectEncoding closes the stream - try (Reader reader = new InputStreamReader( - classLoader.getResourceAsStream(THEME_RESOURCES_MESSAGES + baseBundlename + "_" + locale.toString() + ".properties"), encoding)) { - m.load(reader); + try (Reader reader = new InputStreamReader(resource.openStream(), encoding)) { + messages.load(reader); } } - return m; } @Override