From 1d6ae29d8797d9a957448bc74b69fe576bb0db5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Fri, 12 Sep 2025 11:28:34 +0200 Subject: [PATCH 1/2] XWIKI-23523: Livedata crash with NPE when used with custom data source --- .../internal/DefaultLiveDataConfigurationResolver.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/main/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolver.java b/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/main/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolver.java index 24c90debefbe..a4f11563ff9f 100644 --- a/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/main/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolver.java +++ b/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/main/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolver.java @@ -116,7 +116,11 @@ private LiveDataConfiguration mergeBaseConfig(LiveDataConfiguration config) thro // Prevent null values (make the configuration explicit). mergedConfig.initialize(); - handleLayouts(config.getMeta().getLayouts(), mergedConfig.getMeta()); + Collection layout = null; + if (config.getMeta() != null) { + layout = config.getMeta().getLayouts(); + } + handleLayouts(layout, mergedConfig.getMeta()); handlePageSizes(mergedConfig); // Translate using the context locale. From 3253233f79e8edc9e5b34bdcfdfa70862a664cef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josu=C3=A9=20Tille?= Date: Wed, 15 Oct 2025 09:48:04 +0200 Subject: [PATCH 2/2] XWIKI-23523: Livedata crash with NPE when used with custom data source * Add test to avoid regression --- ...DefaultLiveDataConfigurationResolverTest.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/test/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolverTest.java b/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/test/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolverTest.java index 930ff531cef0..1ad8b1578d7a 100644 --- a/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/test/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolverTest.java +++ b/xwiki-platform-core/xwiki-platform-livedata/xwiki-platform-livedata-api/src/test/java/org/xwiki/livedata/internal/DefaultLiveDataConfigurationResolverTest.java @@ -176,6 +176,22 @@ void withInitialize() throws Exception this.resolver.resolve(this.resolver.resolve(config))); } + /** + * Test to avoid regression on XWIKI-23523. + * We need to ensure that we can resolve a configuration with meta=null. + */ + @Test + void withMetaNull() throws Exception + { + LiveDataConfiguration config = new LiveDataConfiguration(); + config.initialize(); + config.setMeta(null); + String expected = FileUtils.readFileToString(new File("src/test/resources/withInitialize.json"), + Charset.defaultCharset()); + assertEquals(this.objectMapper.readValue(expected, LiveDataConfiguration.class), + this.resolver.resolve(this.resolver.resolve(config))); + } + private static Stream getTestData() throws Exception { return DATA_PROVIDER.getTestData(new File("src/test/resources/DefaultLiveDataConfigurationResolver.test"));