From 65cdc6769b56c09d5b40f49c91191771a6e93a00 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 7 Jun 2024 07:47:13 +0100 Subject: [PATCH 001/171] JCR-5067: branch Jackrabbit 2.22 - update trunk version --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 6 +++--- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index 723b82d0889..19198f51684 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 9ae65ce2d36..5c3a26bd093 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index a1eaaa58320..bc1b689084b 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index 3dd4b0b468b..51f2e3e1938 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index c25b31bd109..8b390fc797d 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index a1275783538..f2a414f2245 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index c7230e8bccc..8bb9d94ebd2 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index e77160aa379..5a9e95b2af9 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index b02b2476ee5..bb27fdbd375 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index e9d769dcfcf..d53654a6f0e 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index 74fa2a3c30d..2ed1283f791 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index 8b66758433e..a4058c7a12a 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index cc7617c4777..7582b51b9a7 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT pom @@ -47,7 +47,7 @@ scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git https://github.com/apache/jackrabbit/tree/${project.scm.tag} - jackrabbit-2.21.26-beta + jackrabbit-2.23.0-beta @@ -76,7 +76,7 @@ 0.0 - 1717331862 + 1717742788 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index b8a9511b2a6..ede63b40134 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index ad9f80c260b..33f0cf4dc6d 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index 0868d7505f6..a191d5d2bd8 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index 379f04a0184..0c02a845f10 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index ff367477d84..59222410d00 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index 0c1c5edcaef..962fd3680b8 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index b910efeeb4a..6d5c61a7434 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 7c3a23184c0..4aa3b3e1242 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index f3daf3399e4..d1c7c62ea33 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index cebd0a85f3b..0531091eaa2 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.21.28-beta-SNAPSHOT + 2.23.0-beta-SNAPSHOT jackrabbit-parent/pom.xml From 7f9888f69d6340c9d2da1cec9f4a9b50ef15603b Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 10 Jun 2024 15:06:44 +0100 Subject: [PATCH 002/171] JCR-5073: core: avoid varargs related compiler warnings in tests --- .../org/apache/jackrabbit/core/AbstractConcurrencyTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java index d3706f58726..ddcd61abc67 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AbstractConcurrencyTest.java @@ -153,11 +153,11 @@ protected long getOneYearAhead() { */ protected static void dumpStacks(Thread[] threads) { try { - Method m = Thread.class.getMethod("getStackTrace", null); + Method m = Thread.class.getMethod("getStackTrace", (Class[]) null); StringBuffer dumps = new StringBuffer(); for (int t = 0; t < threads.length; t++) { StackTraceElement[] elements = (StackTraceElement[]) m.invoke( - threads[t], null); + threads[t], (Object[]) null); dumps.append(threads[t].toString()).append('\n'); for (int i = 0; i < elements.length; i++) { dumps.append("\tat " + elements[i]).append('\n'); From b7a84c819d922044c5658e087510a62de9733f40 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 14 Jun 2024 17:12:42 +0200 Subject: [PATCH 003/171] JCR-5075: set baseline comparisonVersion to latest stable (2.22.0) (#193) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 7582b51b9a7..1fd3959015a 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -383,7 +383,7 @@ - 2.20.16 + 2.22.0 From 6313b0502a13c623410e95dc918ba84558b3531a Mon Sep 17 00:00:00 2001 From: kevan Jahanshahi Date: Wed, 3 Jul 2024 13:15:27 +0200 Subject: [PATCH 004/171] JCR-5076: use scope test fot dependency of type: test-jar (#194) --- jackrabbit-aws-ext/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index 19198f51684..ccc83c8f85a 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -61,6 +61,7 @@ jackrabbit-data ${project.version} test-jar + test org.slf4j From c5447c23c4b5dbec28b6b9edae2069610257826d Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 11 Jul 2024 06:12:03 +0200 Subject: [PATCH 005/171] JCR-5077: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.66.0 (#196) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 1fd3959015a..d76cba105c9 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.64.0 + 1.66.0 1.22.20 9.4.53.v20231009 From e9e0ae2500b3af2d7b6dc3cf6a121706839738c2 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 15 Jul 2024 12:09:46 +0200 Subject: [PATCH 006/171] JCR-5078: update Apache parent pom to version 33 (#197) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index d76cba105c9..8cd8de16d17 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -27,7 +27,7 @@ org.apache apache - 32 + 33 From df83cbab2f3da9b0fe76caf3c241a24eb5724ef5 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 15 Jul 2024 12:43:04 +0200 Subject: [PATCH 007/171] JCR-5079: Update tomcat dependency to 9.0.91 (#198) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 4aa3b3e1242..b97b64e0838 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.89 + 9.0.81 From 62944682709a40e0c97b6b1be6169b9b1d3ae6ed Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 15 Jul 2024 12:11:09 +0100 Subject: [PATCH 008/171] JCR-5079: Update tomcat dependency to 9.0.91 --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index b97b64e0838..4c54c998384 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.81 + 9.0.91 From 1305cf9785dc922fb6b7d44a69417c79041f5bd2 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 15 Jul 2024 13:50:23 +0200 Subject: [PATCH 009/171] JCR-5080: Update easymock dependency to 5.3.0 (#200) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 8cd8de16d17..4cbd26232d2 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -616,7 +616,7 @@ org.easymock easymock - 5.2.0 + 5.3.0 junit From dac8dea1eec9f735a4fa472865a85914f62f889c Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 16 Jul 2024 10:27:36 +0200 Subject: [PATCH 010/171] JCR-5081: update aws java sdk version to 1.12.761 (#201) --- jackrabbit-aws-ext/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index ccc83c8f85a..fe4a493575b 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -49,7 +49,7 @@ com.amazonaws aws-java-sdk-s3 - 1.12.730 + 1.12.761 org.apache.jackrabbit From cd862214fb98783944dd3204a528d083e356d4ce Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 16 Jul 2024 11:38:30 +0200 Subject: [PATCH 011/171] JCR-5082: update Jetty to 9.4.55.v20240627 (#202) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 4cbd26232d2..185b4ba82b5 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -58,7 +58,7 @@ 1.66.0 1.22.20 - 9.4.53.v20231009 + 9.4.55.v20240627 2.4.1 ${project.build.sourceEncoding} 1.7.36 From 96aa13504a6cc7d419d1cb234b73800705c5d20e Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 16 Jul 2024 12:02:08 +0200 Subject: [PATCH 012/171] JCR-5083: Update maven-jar-plugin to 3.4.2 (#203) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 185b4ba82b5..c7ee832e764 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -343,7 +343,7 @@ maven-jar-plugin - 3.4.1 + 3.4.2 maven-rar-plugin From 1c799ec13964f519dd8fd325b8bef4171c5fe246 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 16 Jul 2024 13:09:57 +0200 Subject: [PATCH 013/171] JCR-5084: Update pmd-plugin dependency to 3.24.0 (#204) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index c7ee832e764..0e2ab2f55c3 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -420,7 +420,7 @@ org.apache.maven.plugins maven-pmd-plugin - 3.22.0 + 3.24.0 ${java.version} From 804d7076062f757faf1548c2cc029ba7b9dfaab3 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 16 Jul 2024 13:59:38 +0200 Subject: [PATCH 014/171] JCR-5085: update checkstyle-plugin dependency to 3.4.0 (#205) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 0e2ab2f55c3..5785d089b30 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -415,7 +415,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.3.1 + 3.4.0 org.apache.maven.plugins From 2da22f422a8c1317eb56a3c8317d883c0b22dadd Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 16 Jul 2024 14:42:47 +0200 Subject: [PATCH 015/171] JCR-5086: Update spotbugs-maven-plugin to 4.8.6.2 (#206) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 5785d089b30..9c7ff14aefe 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -428,7 +428,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.5.0 + 4.8.6.2 From 2cf6f5cc67cff592c189c0bb8d156a5c504617fc Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 16 Jul 2024 18:06:42 +0100 Subject: [PATCH 016/171] JCR-5087: Release Jackrabbit 2.23.0-beta: Candidate Release Notes --- RELEASE-NOTES.txt | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 713529ec7a1..bdaaab6c747 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,44 +1,34 @@ -Release Notes -- Apache Jackrabbit -- Version 2.21.27-beta +Release Notes -- Apache Jackrabbit -- Version 2.23.0-beta Introduction ------------ -This is Apache Jackrabbit(TM) 2.21.27-beta, a fully compliant implementation of the +This is Apache Jackrabbit(TM) 2.23.0-beta, a fully compliant implementation of the Content Repository for Java(TM) Technology API, version 2.0 (JCR 2.0) as specified in the Java Specification Request 283 (JSR 283). -Apache Jackrabbit 2.21.27-beta is an unstable release cut directly from +Apache Jackrabbit 2.23.0-beta is an unstable release cut directly from Jackrabbit trunk, with a focus on new features and other improvements. For production use we recommend the latest stable 2.20.x release. -Changes in Jackrabbit 2.21.27-beta +Changes in Jackrabbit 2.23.0-beta ---------------------------------- Task - [JCR-4972] - Remove RMI support - [JCR-5028] - jackrabbit-jcr-rmi: remove - [JCR-5042] - jackrabbit-jcr-servlet: remove RMI support - [JCR-5044] - Update tomcat dependency to 9.0.87 - [JCR-5045] - Update commons-io dependency to 2.16.0 - [JCR-5046] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.62.0 - [JCR-5047] - Update to jacoco version 0.8.12 - [JCR-5052] - Update commons-io dependency to 2.16.1 - [JCR-5053] - Update commons-cli dependency to 1.7.0 - [JCR-5054] - vfs-ext: update hadoop-hdfs-client dependency to 3.4.0 - [JCR-5055] - update Apache parent pom to version 32 - [JCR-5056] - Update maven-jar-plugin to 3.4.1 - [JCR-5057] - Update pmd-plugin dependency to 3.22.0 - [JCR-5058] - Update spotbugs-maven-plugin to 4.8.5.0 - [JCR-5059] - set baseline comparisonVersion to latest stable (2.20.16) - [JCR-5060] - Update oak-jackrabbit-api.version.used in trunk and 2.20 to Oak 1.22.20 - [JCR-5063] - Update build-helper-maven-plugin to version 3.6.0 - [JCR-5064] - Update mockito dependency to 5.12.0 - [JCR-5068] - update aws java sdk version to 1.12.730 - [JCR-5069] - Update commons-cli dependency to 1.8.0 - [JCR-5070] - Update tomcat dependency to 9.0.89 - [JCR-5071] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.64.0 + [JCR-5073] - core: avoid varargs related compiler warnings in tests + [JCR-5075] - set baseline comparisonVersion to latest stable (2.22.0) + [JCR-5076] - Use correctly test scope for dependencies of type: test-jar + [JCR-5077] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.66.0 + [JCR-5078] - update Apache parent pom to version 33 + [JCR-5079] - Update tomcat dependency to 9.0.91 + [JCR-5080] - Update easymock dependency to 5.3.0 + [JCR-5081] - update aws java sdk version to 1.12.761 + [JCR-5082] - update Jetty to 9.4.55.v20240627 + [JCR-5083] - Update maven-jar-plugin to 3.4.2 + [JCR-5084] - Update pmd-plugin dependency to 3.24.0 + [JCR-5086] - Update spotbugs-maven-plugin to 4.8.6.2 For more detailed information about all the changes in this and other From b94047fcda958c3c009703bc09b012898a826e0d Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 17 Jul 2024 16:45:39 +0200 Subject: [PATCH 017/171] [maven-release-plugin] prepare release jackrabbit-2.23.0-beta --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 4 ++-- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 24 insertions(+), 24 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index fe4a493575b..86fbde60e5c 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 5c3a26bd093..d0e0407c360 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index bc1b689084b..470c5ceb0a1 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index 51f2e3e1938..af0f451c547 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index 8b390fc797d..e9e09463c9d 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index f2a414f2245..1625f5621e4 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index 8bb9d94ebd2..719f9b515af 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 5a9e95b2af9..78938a0e8da 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index bb27fdbd375..5b7235df57d 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index d53654a6f0e..db5183bf07e 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index 2ed1283f791..6237220725a 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index a4058c7a12a..d2005e39931 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 9c7ff14aefe..5325e1f90f6 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.0-beta-SNAPSHOT + 2.23.0-beta pom @@ -76,7 +76,7 @@ 0.0 - 1717742788 + 1721226539 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index ede63b40134..1ffe8d1d154 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index 33f0cf4dc6d..d2cc98e682d 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index a191d5d2bd8..736d6d50940 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index 0c02a845f10..f84661e0043 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 59222410d00..fe4b20f8a2b 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index 962fd3680b8..0ec7fac871a 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index 6d5c61a7434..11260b7034d 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 4c54c998384..5ae21f91da0 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index d1c7c62ea33..fdf5f8a06b2 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index 0531091eaa2..1eaf3d91f13 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta-SNAPSHOT + 2.23.0-beta jackrabbit-parent/pom.xml From 1b605836bdbd183a79c5a4db536be10b7bcc6844 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 17 Jul 2024 16:45:48 +0200 Subject: [PATCH 018/171] [maven-release-plugin] prepare for next development iteration --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 4 ++-- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 24 insertions(+), 24 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index 86fbde60e5c..e2ac772b351 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index d0e0407c360..58ab9a284e5 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index 470c5ceb0a1..8db1c255af1 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index af0f451c547..c92d0988e37 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index e9e09463c9d..67d93389994 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index 1625f5621e4..71ddc4c2dd6 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index 719f9b515af..5ca50204f20 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 78938a0e8da..5fe9210f413 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index 5b7235df57d..4d607938135 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index db5183bf07e..249edab9d97 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index 6237220725a..76851d8ca51 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index d2005e39931..3ae901c2f59 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 5325e1f90f6..881258215d4 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.0-beta + 2.23.1-beta-SNAPSHOT pom @@ -76,7 +76,7 @@ 0.0 - 1721226539 + 1721227548 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index 1ffe8d1d154..6ec57ac0638 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index d2cc98e682d..bd6bb30b6c1 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index 736d6d50940..27a693440c3 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index f84661e0043..c29b8910174 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index fe4b20f8a2b..1c25db0d1ad 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index 0ec7fac871a..b2872b8ea63 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index 11260b7034d..8e5974ab10a 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 5ae21f91da0..cdfea7a376b 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index fdf5f8a06b2..57ac2122a6c 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index 1eaf3d91f13..e8c4a9a62ac 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.0-beta + 2.23.1-beta-SNAPSHOT jackrabbit-parent/pom.xml From 64278e0d593e6ee37e13d99409fab8851c9e0d83 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 18 Jul 2024 16:02:25 +0200 Subject: [PATCH 019/171] JCR-5088: remove warnings about missing @deprecated annotations (#207) --- .../java/org/apache/jackrabbit/core/HierarchyManager.java | 1 + .../main/java/org/apache/jackrabbit/core/ItemManager.java | 2 ++ .../src/main/java/org/apache/jackrabbit/core/NodeImpl.java | 2 ++ .../java/org/apache/jackrabbit/core/cluster/LockRecord.java | 1 + .../org/apache/jackrabbit/core/config/RepositoryConfig.java | 3 +++ .../jackrabbit/core/fs/db/JNDIDatabaseFileSystem.java | 1 + .../org/apache/jackrabbit/core/journal/DatabaseJournal.java | 2 ++ .../apache/jackrabbit/core/journal/JNDIDatabaseJournal.java | 1 + .../core/persistence/pool/BundleDbPersistenceManager.java | 2 ++ .../apache/jackrabbit/core/query/AbstractQueryHandler.java | 1 + .../apache/jackrabbit/core/query/lucene/NodeIndexer.java | 5 +++++ .../apache/jackrabbit/core/query/lucene/SearchIndex.java | 3 +++ .../org/apache/jackrabbit/core/security/AccessManager.java | 5 +++++ .../core/security/authentication/AbstractLoginModule.java | 4 ++++ .../security/authentication/CryptedSimpleCredentials.java | 1 + .../authentication/token/TokenBasedAuthentication.java | 1 + .../security/authorization/AbstractCompiledPermissions.java | 2 ++ .../core/security/authorization/CompiledPermissions.java | 1 + .../core/security/authorization/PrivilegeRegistry.java | 6 ++++++ .../apache/jackrabbit/core/security/user/UserConstants.java | 2 ++ .../jackrabbit/core/security/user/UserManagerImpl.java | 1 + .../org/apache/jackrabbit/core/util/RepositoryLock.java | 1 + .../core/version/InternalFrozenVersionHistory.java | 1 + .../jackrabbit/core/virtual/VirtualItemStateProvider.java | 1 + .../org/apache/jackrabbit/core/data/db/DbDataStore.java | 4 +++- .../apache/jackrabbit/core/fs/RandomAccessOutputStream.java | 1 + .../org/apache/jackrabbit/commons/flat/FilterIterator.java | 1 + .../org/apache/jackrabbit/commons/flat/SizedIterator.java | 1 + .../java/org/apache/jackrabbit/webdav/jcr/JcrValueType.java | 1 + .../jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java | 1 + .../java/org/apache/jackrabbit/spi/commons/EventImpl.java | 1 + .../org/apache/jackrabbit/spi/commons/ItemInfoImpl.java | 1 + .../org/apache/jackrabbit/spi/commons/LockInfoImpl.java | 1 + .../org/apache/jackrabbit/spi/commons/NodeInfoImpl.java | 1 + .../org/apache/jackrabbit/spi/commons/PropertyInfoImpl.java | 1 + .../apache/jackrabbit/spi/commons/iterator/Iterators.java | 1 + .../apache/jackrabbit/spi/commons/iterator/Predicate.java | 1 + .../apache/jackrabbit/spi/commons/iterator/Predicates.java | 1 + .../java/org/apache/jackrabbit/spi/commons/lock/Locked.java | 1 + .../spi/commons/namespace/AbstractNamespaceResolver.java | 1 + .../jackrabbit/spi/commons/namespace/NamespaceListener.java | 1 + .../apache/jackrabbit/spi/commons/query/OrderQueryNode.java | 3 +++ .../jackrabbit/spi/commons/query/TextsearchQueryNode.java | 2 ++ .../jackrabbit/spi/commons/query/sql/SimpleCharStream.java | 4 ++-- .../apache/jackrabbit/spi/commons/query/sql2/Parser.java | 1 + .../spi/commons/query/xpath/SimpleCharStream.java | 4 ++-- .../src/main/java/org/apache/jackrabbit/spi/NodeInfo.java | 1 + .../java/org/apache/jackrabbit/spi/RepositoryService.java | 2 ++ .../apache/jackrabbit/webdav/property/PropContainer.java | 1 + .../apache/jackrabbit/webdav/version/WorkspaceResource.java | 1 + .../main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java | 1 + 51 files changed, 85 insertions(+), 5 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/HierarchyManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/HierarchyManager.java index 7ba4245b5a0..f5b3c222ae5 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/HierarchyManager.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/HierarchyManager.java @@ -49,6 +49,7 @@ public interface HierarchyManager { * if there's no item at path. * @throws RepositoryException if an error occurs */ + @Deprecated ItemId resolvePath(Path path) throws RepositoryException; /** diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java index dbd40a4c8c1..322e9d699c7 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/ItemManager.java @@ -467,6 +467,7 @@ private boolean canRead(ItemData parent, ItemId childId) throws RepositoryExcept * @param path path to the item to be checked * @return true if the specified item exists */ + @Deprecated public boolean itemExists(Path path) { try { sanityCheck(); @@ -544,6 +545,7 @@ NodeImpl getRootNode() throws RepositoryException { * @throws AccessDeniedException * @throws RepositoryException */ + @Deprecated public ItemImpl getItem(Path path) throws PathNotFoundException, AccessDeniedException, RepositoryException { ItemId id = hierMgr.resolvePath(path); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java index 3519d9211d6..7f59ef4bb56 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NodeImpl.java @@ -565,6 +565,7 @@ protected synchronized NodeImpl createChildNode(Name name, * @throws RepositoryException * @deprecated use #renameChildNode(NodeId, Name, boolean) */ + @Deprecated protected void renameChildNode(Name oldName, int index, NodeId id, Name newName) throws RepositoryException { @@ -3072,6 +3073,7 @@ public boolean isLocked() throws RepositoryException { * @throws RepositoryException if some other error occurs * @deprecated */ + @Deprecated protected void checkLock() throws LockException, RepositoryException { if (isNew()) { // a new node needs no check diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/LockRecord.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/LockRecord.java index e29c3cf7f96..94dd49ca128 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/LockRecord.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/cluster/LockRecord.java @@ -166,6 +166,7 @@ public boolean isDeep() { * @return user id * @deprecated User {@link #getOwner()} instead. */ + @Deprecated public String getUserId() { return lockOwner; } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java index 7801c01dacd..d0c78d61793 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/RepositoryConfig.java @@ -933,6 +933,7 @@ public FileSystem getFileSystem() throws RepositoryException { * @return repository name * @deprecated Use {@link SecurityConfig#getAppName()} instead. */ + @Deprecated public String getAppName() { return sec.getAppName(); } @@ -943,6 +944,7 @@ public String getAppName() { * @return access manager configuration * @deprecated Use {@link SecurityConfig#getAccessManagerConfig()} instead. */ + @Deprecated public AccessManagerConfig getAccessManagerConfig() { return sec.getAccessManagerConfig(); } @@ -954,6 +956,7 @@ public AccessManagerConfig getAccessManagerConfig() { * JAAS mechanism should be used. * @deprecated Use {@link SecurityConfig#getLoginModuleConfig()} instead. */ + @Deprecated public LoginModuleConfig getLoginModuleConfig() { return sec.getLoginModuleConfig(); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/fs/db/JNDIDatabaseFileSystem.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/fs/db/JNDIDatabaseFileSystem.java index 7d21a066fe5..93eb6698c0d 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/fs/db/JNDIDatabaseFileSystem.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/fs/db/JNDIDatabaseFileSystem.java @@ -35,6 +35,7 @@ * for the entire lifetime of the file system instance. The configured data * source should be prepared for this. */ +@Deprecated public class JNDIDatabaseFileSystem extends DatabaseFileSystem { /** diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java index 786c92c1e60..2a0b71d7496 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/DatabaseJournal.java @@ -651,6 +651,7 @@ public String getDatabaseType() { * * @return the database type */ + @Deprecated public String getSchema() { return databaseType; } @@ -706,6 +707,7 @@ public void setDatabaseType(String databaseType) { * * @param databaseType the database type */ + @Deprecated public void setSchema(String databaseType) { this.databaseType = databaseType; } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/JNDIDatabaseJournal.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/JNDIDatabaseJournal.java index fa4a0d24743..48b149fae60 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/JNDIDatabaseJournal.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/journal/JNDIDatabaseJournal.java @@ -38,6 +38,7 @@ * for the entire lifetime of the journal instance. The configured data * source should be prepared for this. */ +@Deprecated public class JNDIDatabaseJournal extends DatabaseJournal { /** diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java index 8d5a6cd0de8..86fdc7304aa 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/persistence/pool/BundleDbPersistenceManager.java @@ -296,6 +296,7 @@ public void setSchemaObjectPrefix(String schemaObjectPrefix) { * * @return the database type name. */ + @Deprecated public String getSchema() { return databaseType; } @@ -317,6 +318,7 @@ public String getDatabaseType() { * * @param databaseType database type name */ + @Deprecated public void setSchema(String databaseType) { this.databaseType = databaseType; } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java index 40502b033e9..7fc6088e8b1 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/AbstractQueryHandler.java @@ -183,6 +183,7 @@ public String getQueryClass() { * * @param idleTime the query handler idle time. */ + @Deprecated public void setIdleTime(String idleTime) { log.warn("Parameter 'idleTime' is not supported anymore. " + "Please use 'maxIdleTime' in the repository configuration."); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java index efc3c253abb..47d76cb40bf 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/NodeIndexer.java @@ -665,6 +665,7 @@ protected void addURIValue(Document doc, String fieldName, URI internalValue) { * @deprecated Use {@link #addStringValue(Document, String, String, boolean) * addStringValue(Document, String, Object, boolean)} instead. */ + @Deprecated protected void addStringValue(Document doc, String fieldName, String internalValue) { addStringValue(doc, fieldName, internalValue, true, true, DEFAULT_BOOST, true); } @@ -702,6 +703,7 @@ protected void addStringValue(Document doc, String fieldName, * @param boost the boost value for this string field. * @deprecated use {@link #addStringValue(Document, String, String, boolean, boolean, float, boolean)} instead. */ + @Deprecated protected void addStringValue(Document doc, String fieldName, String internalValue, boolean tokenized, boolean includeInNodeIndex, float boost) { @@ -791,6 +793,7 @@ protected void addNameValue(Document doc, String fieldName, Name internalValue) * @return a lucene field. * @deprecated use {@link #createFulltextField(String, boolean, boolean, boolean)} instead. */ + @Deprecated protected Field createFulltextField(String value) { return createFulltextField(value, supportHighlighting, supportHighlighting); } @@ -804,6 +807,7 @@ protected Field createFulltextField(String value) { * @return a lucene field. * @deprecated use {@link #createFulltextField(String, boolean, boolean, boolean)} instead. */ + @Deprecated protected Field createFulltextField(String value, boolean store, boolean withOffsets) { @@ -855,6 +859,7 @@ protected Field createFulltextField(String value, * @return a lucene field. * @deprecated use {@link #createFulltextField(InternalValue, Metadata, boolean)} instead. */ + @Deprecated protected Fieldable createFulltextField( InternalValue value, Metadata metadata) { return createFulltextField(value, metadata, true); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java index 6baef1fdbe7..8e4db22cc2e 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java @@ -177,6 +177,7 @@ public class SearchIndex extends AbstractQueryHandler { * @deprecated this value is not used anymore. Instead the default value * is calculated as follows: 2 * Runtime.getRuntime().availableProcessors(). */ + @Deprecated public static final int DEFAULT_EXTRACTOR_POOL_SIZE = 0; /** @@ -2101,6 +2102,7 @@ public int getMaxExtractLength() { * @param filterClasses comma separated list of class names * @deprecated */ + @Deprecated public void setTextFilterClasses(String filterClasses) { log.warn("The textFilterClasses configuration parameter has" + " been deprecated, and the configured value will" @@ -2114,6 +2116,7 @@ public void setTextFilterClasses(String filterClasses) { * @return class names of the text filters in use. * @deprecated */ + @Deprecated public String getTextFilterClasses() { return "deprectated"; } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AccessManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AccessManager.java index 3343bafe4d0..cc3f5cb6c1a 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AccessManager.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/AccessManager.java @@ -36,18 +36,21 @@ public interface AccessManager { * READ permission constant * @deprecated */ + @Deprecated int READ = 1; /** * WRITE permission constant * @deprecated */ + @Deprecated int WRITE = 2; /** * REMOVE permission constant * @deprecated */ + @Deprecated int REMOVE = 4; /** @@ -102,6 +105,7 @@ void init(AMContext context, AccessControlProvider acProvider, * @throws RepositoryException it an error occurs * @deprecated */ + @Deprecated void checkPermission(ItemId id, int permissions) throws AccessDeniedException, ItemNotFoundException, RepositoryException; @@ -145,6 +149,7 @@ void checkPermission(ItemId id, int permissions) * @throws RepositoryException if another error occurs * @deprecated */ + @Deprecated boolean isGranted(ItemId id, int permissions) throws ItemNotFoundException, RepositoryException; diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/AbstractLoginModule.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/AbstractLoginModule.java index d2b5237d491..767c3da6b20 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/AbstractLoginModule.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/AbstractLoginModule.java @@ -77,6 +77,7 @@ public abstract class AbstractLoginModule implements LoginModule { * deprecated and will no longer be supported in a subsequent release. * See also JCR-3293 */ + @Deprecated private static final String PRE_AUTHENTICATED_ATTRIBUTE_OPTION = "trust_credentials_attribute"; private String principalProviderClassName; @@ -95,6 +96,7 @@ public abstract class AbstractLoginModule implements LoginModule { * has been deprecated and will no longer be available in a subsequent release. * See also JCR-3293 */ + @Deprecated private String preAuthAttributeName; @@ -759,6 +761,7 @@ public void setPrincipalProvider(String principalProvider) { * has been deprecated and will no longer be available in a subsequent release. * See also JCR-3293 */ + @Deprecated protected final String getPreAuthAttributeName() { return preAuthAttributeName; } @@ -783,6 +786,7 @@ protected final String getPreAuthAttributeName() { * has been deprecated and will no longer be available in a subsequent release. * See also JCR-3293 */ + @Deprecated protected boolean isPreAuthenticated(final Credentials creds) { final String preAuthAttrName = getPreAuthAttributeName(); boolean isPreAuth = preAuthAttrName != null diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/CryptedSimpleCredentials.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/CryptedSimpleCredentials.java index c4370edb0db..8d5bd048361 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/CryptedSimpleCredentials.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/CryptedSimpleCredentials.java @@ -51,6 +51,7 @@ public class CryptedSimpleCredentials implements Credentials { * @throws UnsupportedEncodingException * @deprecated */ + @Deprecated public CryptedSimpleCredentials(SimpleCredentials credentials) throws NoSuchAlgorithmException, UnsupportedEncodingException { userId = credentials.getUserID(); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenBasedAuthentication.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenBasedAuthentication.java index d578d217727..60409e1d928 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenBasedAuthentication.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authentication/token/TokenBasedAuthentication.java @@ -58,6 +58,7 @@ public class TokenBasedAuthentication implements Authentication { * behavior of the {@code TokenBasedAuthentication}. Note that as of OAK 1.0 * this flag will no be supported. */ + @Deprecated public static final String PARAM_COMPAT = "TokenCompatMode"; private final TokenInfo tokenInfo; diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AbstractCompiledPermissions.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AbstractCompiledPermissions.java index fcb6d3d5ce0..939c5bed560 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AbstractCompiledPermissions.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/AbstractCompiledPermissions.java @@ -159,6 +159,7 @@ public static class Result { /** * @deprecated */ + @Deprecated public Result(int allows, int denies, int allowPrivileges, int denyPrivileges) { this(allows, denies, PrivilegeBits.getInstance(allowPrivileges), PrivilegeBits.getInstance(denyPrivileges)); } @@ -178,6 +179,7 @@ public boolean grants(int permissions) { /** * @deprecated jackrabbit 2.3 (throws UnsupportedOperationException, use getPrivilegeBits instead) */ + @Deprecated public int getPrivileges() { throw new UnsupportedOperationException("use #getPrivilegeBits instead."); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/CompiledPermissions.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/CompiledPermissions.java index 57b9e92dd2d..cad868392bb 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/CompiledPermissions.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/CompiledPermissions.java @@ -62,6 +62,7 @@ public interface CompiledPermissions { * @throws RepositoryException if an error occurs * @deprecated Use {@link #getPrivilegeSet(Path)} instead. */ + @Deprecated int getPrivileges(Path absPath) throws RepositoryException; /** diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeRegistry.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeRegistry.java index 0114df4fe5c..8aa0d71273d 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeRegistry.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/authorization/PrivilegeRegistry.java @@ -183,6 +183,7 @@ public PrivilegeRegistry(NamespaceRegistry namespaceRegistry, FileSystem fs) * @deprecated Use {@link org.apache.jackrabbit.api.security.authorization.PrivilegeManager} instead. * @see org.apache.jackrabbit.api.JackrabbitWorkspace#getPrivilegeManager() */ + @Deprecated public PrivilegeRegistry(NameResolver resolver) { cacheDefinitions(createBuiltInPrivilegeDefinitions()); @@ -225,6 +226,7 @@ public void setEventChannel(PrivilegeEventChannel eventChannel) { * @return all registered privileges. * @deprecated Use {@link org.apache.jackrabbit.api.security.authorization.PrivilegeManager#getRegisteredPrivileges()} instead. */ + @Deprecated public Privilege[] getRegisteredPrivileges() { try { return new PrivilegeManagerImpl(this, resolver).getRegisteredPrivileges(); @@ -243,6 +245,7 @@ public Privilege[] getRegisteredPrivileges() { * @throws RepositoryException If another error occurs. * @deprecated Use {@link org.apache.jackrabbit.api.security.authorization.PrivilegeManager#getPrivilege(String)} instead. */ + @Deprecated public Privilege getPrivilege(String privilegeName) throws AccessControlException, RepositoryException { return new PrivilegeManagerImpl(this, resolver).getPrivilege(privilegeName); } @@ -258,6 +261,7 @@ public Privilege getPrivilege(String privilegeName) throws AccessControlExceptio * @see #getBits(Privilege[]) * @deprecated Use {@link PrivilegeManagerImpl#getPrivileges(PrivilegeBits)} instead. */ + @Deprecated public Privilege[] getPrivileges(int bits) { Set prvs = new PrivilegeManagerImpl(this, resolver).getPrivileges(PrivilegeBits.getInstance(bits)); return prvs.toArray(new Privilege[prvs.size()]); @@ -274,6 +278,7 @@ public Privilege[] getPrivileges(int bits) { * @see #getPrivileges(int) * @deprecated Use {@link PrivilegeManagerImpl#getBits(javax.jcr.security.Privilege...)} instead. */ + @Deprecated public static int getBits(Privilege[] privileges) throws AccessControlException { if (privileges == null || privileges.length == 0) { throw new AccessControlException("Privilege array is empty or null."); @@ -346,6 +351,7 @@ public static int calculatePermissions(PrivilegeBits privs, PrivilegeBits parent * @return the permissions granted evaluating the given privileges. * @deprecated Use {@link #calculatePermissions(PrivilegeBits, PrivilegeBits, boolean, boolean)} instead. */ + @Deprecated public static int calculatePermissions(int privs, int parentPrivs, boolean isAllow, boolean protectsPolicy) { return calculatePermissions((long) privs, (long) parentPrivs, isAllow, protectsPolicy); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserConstants.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserConstants.java index a5d994d278d..7eecd91db74 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserConstants.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserConstants.java @@ -52,6 +52,7 @@ interface UserConstants { * rep:userId property redundant. It has been removed from the node type * definition. */ + @Deprecated Name P_USERID = NF.create(Name.NS_REP_URI, "userId"); Name P_PASSWORD = NF.create(Name.NS_REP_URI, "password"); Name P_DISABLED = NF.create(Name.NS_REP_URI, "disabled"); @@ -60,6 +61,7 @@ interface UserConstants { * @deprecated As of 2.0 group membership is stored with the group node. * @see #P_MEMBERS */ + @Deprecated Name P_GROUPS = NF.create(Name.NS_REP_URI, "groups"); Name P_MEMBERS = NF.create(Name.NS_REP_URI, "members"); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java index cc50a886f43..7c415683f27 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/user/UserManagerImpl.java @@ -190,6 +190,7 @@ public class UserManagerImpl extends ProtectedItemModifier /** * @deprecated Use {@link #PARAM_COMPATIBLE_JR16} instead. */ + @Deprecated public static final String PARAM_COMPATIBILE_JR16 = "compatibleJR16"; /** diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/RepositoryLock.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/RepositoryLock.java index d9268a7c5a7..5f100a2916d 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/RepositoryLock.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/RepositoryLock.java @@ -98,6 +98,7 @@ public RepositoryLock() { * @throws RepositoryException if the canonical path of the directory * can not be determined */ + @Deprecated public RepositoryLock(String path) throws RepositoryException { init(path); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalFrozenVersionHistory.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalFrozenVersionHistory.java index 05d3c22ff94..df812e9253c 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalFrozenVersionHistory.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/version/InternalFrozenVersionHistory.java @@ -55,6 +55,7 @@ InternalVersionHistory getVersionHistory() /** * @deprecated use {@link #getBaseVersion()} instead */ + @Deprecated InternalVersion getBaseVesion() throws VersionException; /** diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/VirtualItemStateProvider.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/VirtualItemStateProvider.java index 26bdc9c9081..c2339f045e9 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/VirtualItemStateProvider.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/virtual/VirtualItemStateProvider.java @@ -45,6 +45,7 @@ public interface VirtualItemStateProvider extends ItemStateManager { * @return the id of the root node of the virtual tree. * @deprecated use {@link #getVirtualRootIds()} instead. */ + @Deprecated NodeId getVirtualRootId(); /** diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java index be80f83e3cb..fff2cb8d8cd 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbDataStore.java @@ -930,6 +930,7 @@ protected synchronized MessageDigest getDigest() throws DataStoreException { * @deprecated * @return the maximum number of connections. */ + @Deprecated public int getMaxConnections() { return -1; } @@ -938,9 +939,10 @@ public int getMaxConnections() { * Set the maximum number of concurrent connections in the pool. * At least 3 connections are required if the garbage collection process is used. * - *@deprecated + * @deprecated * @param maxConnections the new value */ + @Deprecated public void setMaxConnections(int maxConnections) { // no effect } diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/RandomAccessOutputStream.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/RandomAccessOutputStream.java index fd7c7bedd31..b5409086712 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/RandomAccessOutputStream.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/RandomAccessOutputStream.java @@ -26,6 +26,7 @@ * * @deprecated this class should no longer be used */ +@Deprecated public abstract class RandomAccessOutputStream extends OutputStream { /** diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/FilterIterator.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/FilterIterator.java index 8b18b423ae9..417b0e44d76 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/FilterIterator.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/FilterIterator.java @@ -26,6 +26,7 @@ * @param * @deprecated use {@link org.apache.jackrabbit.commons.iterator.FilterIterator} */ +@Deprecated public class FilterIterator extends org.apache.jackrabbit.commons.iterator.FilterIterator { /** diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java index da083efcd24..364f1701973 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/flat/SizedIterator.java @@ -23,5 +23,6 @@ * @param the type of elements of this iterator * @deprecated use {@link org.apache.jackrabbit.commons.iterator.SizedIterator} */ +@Deprecated public interface SizedIterator extends org.apache.jackrabbit.commons.iterator.SizedIterator { } diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrValueType.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrValueType.java index 9d941c551d5..5f119377ee1 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrValueType.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/JcrValueType.java @@ -20,6 +20,7 @@ * * @deprecated As of Jackrabbit 2.2. Please Use {@link org.apache.jackrabbit.commons.webdav.JcrValueType} instead. */ +@Deprecated public final class JcrValueType extends org.apache.jackrabbit.commons.webdav.JcrValueType { } \ No newline at end of file diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java index 210c11ee103..5c551656ebe 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/nodetype/EffectiveNodeType.java @@ -106,6 +106,7 @@ public void checkAddNodeConstraints(Name name, QNodeTypeDefinition nodeTypeDefin * @deprecated Use {@link #hasRemoveNodeConstraint(Name)} and * {@link #hasRemovePropertyConstraint(Name)} respectively. */ + @Deprecated public void checkRemoveItemConstraints(Name name) throws ConstraintViolationException; /** diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java index 2baa3c8baa7..8edd58bf38a 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/EventImpl.java @@ -81,6 +81,7 @@ public class EventImpl implements Event, Serializable { * Creates a new serializable event. * @deprecated */ + @Deprecated public EventImpl(int type, Path path, ItemId itemId, NodeId parentId, Name primaryNodeTypeName, Name[] mixinTypeNames, String userId) { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/ItemInfoImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/ItemInfoImpl.java index 0c8b0edef58..4ba735b1305 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/ItemInfoImpl.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/ItemInfoImpl.java @@ -50,6 +50,7 @@ public abstract class ItemInfoImpl implements ItemInfo, Serializable { * parentId is not used any more and the corresponding getter has been * removed. */ + @Deprecated public ItemInfoImpl(NodeId parentId, Name name, Path path, boolean isNode) { this(path, isNode); } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/LockInfoImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/LockInfoImpl.java index 04906cad5d9..c9f5c161f91 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/LockInfoImpl.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/LockInfoImpl.java @@ -72,6 +72,7 @@ public class LockInfoImpl implements LockInfo, Serializable { * @param nodeId the node id of the locked node. * @deprecated Use {@link #LockInfoImpl(String, String, boolean, boolean, long, boolean, NodeId)} instaed. */ + @Deprecated public LockInfoImpl(String lockToken, String lockOwner, boolean isDeep, boolean isSessionScoped, NodeId nodeId) { this(lockToken, lockOwner, isDeep, isSessionScoped, Long.MAX_VALUE, lockToken != null, nodeId); diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/NodeInfoImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/NodeInfoImpl.java index c4c0f8319c8..1d4ab8c3242 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/NodeInfoImpl.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/NodeInfoImpl.java @@ -149,6 +149,7 @@ public void remove() { * @deprecated Use {@link #NodeInfoImpl(Path, NodeId, int, Name, Name[], Iterator, Iterator, Iterator)} * instead. The parentId is not used any more. */ + @Deprecated public NodeInfoImpl(NodeId parentId, Name name, Path path, NodeId id, int index, Name primaryTypeName, Name[] mixinNames, Iterator references, Iterator propertyIds, diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/PropertyInfoImpl.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/PropertyInfoImpl.java index 8abf38b66ec..fd78d4b3b69 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/PropertyInfoImpl.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/PropertyInfoImpl.java @@ -87,6 +87,7 @@ public static PropertyInfo createSerializablePropertyInfo( * @deprecated Use {@link #PropertyInfoImpl(Path, PropertyId, int, boolean, QValue[])} * instead. The parentId is not used any more. */ + @Deprecated public PropertyInfoImpl(NodeId parentId, Name name, Path path, PropertyId id, int type, boolean isMultiValued, QValue[] values) { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Iterators.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Iterators.java index 88301d098ff..4acdf65fad9 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Iterators.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Iterators.java @@ -121,6 +121,7 @@ public static Iterator arrayIterator(T[] values, int from, int to) { * @return * @deprecated use {@link #filterIterator(Iterator, java.util.function.Predicate)} instead */ + @Deprecated public static Iterator filterIterator(Iterator iterator, final Predicate predicate) { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Predicate.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Predicate.java index b94bcbd3bfc..18c788bd236 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Predicate.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Predicate.java @@ -22,6 +22,7 @@ * @param type of values this predicate is defined on * @deprecated use {@link java.util.function.Predicate} instead */ +@Deprecated public interface Predicate { /** diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Predicates.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Predicates.java index be81d1110b7..b6880a282dc 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Predicates.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/iterator/Predicates.java @@ -21,6 +21,7 @@ * Utility class containing pre defined {@link Predicate}s * @deprecated use instances of {@link java.util.function.Predicate} instead */ +@Deprecated public final class Predicates { /** diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/lock/Locked.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/lock/Locked.java index b9447957c5c..29e0ae1246c 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/lock/Locked.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/lock/Locked.java @@ -78,6 +78,7 @@ * * @deprecated Use org.apache.jackrabbit.util.Locked instead. */ +@Deprecated public abstract class Locked { /** diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/AbstractNamespaceResolver.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/AbstractNamespaceResolver.java index bdcb95227c4..6b74d015770 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/AbstractNamespaceResolver.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/AbstractNamespaceResolver.java @@ -35,6 +35,7 @@ * * @deprecated https://issues.apache.org/jira/browse/JCR-1700 */ +@Deprecated public abstract class AbstractNamespaceResolver implements NamespaceResolver { private final Set listeners; diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceListener.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceListener.java index a3ee219e596..e3203996bc1 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceListener.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/NamespaceListener.java @@ -21,6 +21,7 @@ * * @deprecated https://issues.apache.org/jira/browse/JCR-1700 */ +@Deprecated public interface NamespaceListener { /** diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/OrderQueryNode.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/OrderQueryNode.java index f5a1d244073..542d1933b49 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/OrderQueryNode.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/OrderQueryNode.java @@ -135,6 +135,7 @@ public boolean isValid() { * ordered ascending; descending if false. * @deprecated use {@link #addOrderSpec(Path , boolean)} instead. */ + @Deprecated public void addOrderSpec(Name property, boolean ascending) { addOrderSpec(createPath(property), ascending); } @@ -232,6 +233,7 @@ public static final class OrderSpec { * ascending, otherwise descending. * @deprecated use {@link OrderSpec#OrderSpec(Path, boolean)} instead. */ + @Deprecated public OrderSpec(Name property, boolean ascending) { this(createPath(property), ascending); } @@ -254,6 +256,7 @@ public OrderSpec(Path property, boolean ascending) { * @return the name of the property. * @deprecated use {@link #getPropertyPath()} instead. */ + @Deprecated public Name getProperty() { return property.getName(); } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/TextsearchQueryNode.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/TextsearchQueryNode.java index 15d1686e64f..3c2fe14ce82 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/TextsearchQueryNode.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/TextsearchQueryNode.java @@ -98,6 +98,7 @@ public String getQuery() { * @return property name or null. * @deprecated Use {@link #getRelativePath()} instead. */ + @Deprecated public Name getPropertyName() { return relPath == null ? null : relPath.getName(); } @@ -108,6 +109,7 @@ public Name getPropertyName() { * @param property the name of the property. * @deprecated Use {@link #setRelativePath(Path)} instead. */ + @Deprecated public void setPropertyName(Name property) { PathBuilder builder = new PathBuilder(); builder.addLast(property); diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/SimpleCharStream.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/SimpleCharStream.java index 2e085993bd7..9df5d742496 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/SimpleCharStream.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql/SimpleCharStream.java @@ -218,7 +218,7 @@ public char readChar() throws java.io.IOException * @deprecated * @see #getEndColumn */ - + @Deprecated public int getColumn() { return bufcolumn[bufpos]; } @@ -227,7 +227,7 @@ public int getColumn() { * @deprecated * @see #getEndLine */ - + @Deprecated public int getLine() { return bufline[bufpos]; } diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java index d8603db6197..22500e701f8 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/sql2/Parser.java @@ -25,6 +25,7 @@ * @deprecated use {@link org.apache.jackrabbit.commons.query.sql2.Parser} * instead. */ +@Deprecated public class Parser extends org.apache.jackrabbit.commons.query.sql2.Parser { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/SimpleCharStream.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/SimpleCharStream.java index 1547afa8cb8..1d7f294d0e0 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/SimpleCharStream.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/query/xpath/SimpleCharStream.java @@ -202,7 +202,7 @@ public char readChar() throws java.io.IOException * @deprecated * @see #getEndColumn */ - + @Deprecated public int getColumn() { return bufcolumn[bufpos]; } @@ -211,7 +211,7 @@ public int getColumn() { * @deprecated * @see #getEndLine */ - + @Deprecated public int getLine() { return bufline[bufpos]; } diff --git a/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/NodeInfo.java b/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/NodeInfo.java index da56567d520..13c454b3c32 100644 --- a/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/NodeInfo.java +++ b/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/NodeInfo.java @@ -71,6 +71,7 @@ public interface NodeInfo extends ItemInfo { * @see PropertyInfo#getId() * @deprecated Use {@link RepositoryService#getReferences(SessionInfo, NodeId, Name, boolean)} instead. */ + @Deprecated public PropertyId[] getReferences(); /** diff --git a/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java b/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java index a01385bec7b..09e6841766e 100644 --- a/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java +++ b/jackrabbit-spi/src/main/java/org/apache/jackrabbit/spi/RepositoryService.java @@ -302,6 +302,7 @@ public SessionInfo obtain(SessionInfo sessionInfo, String workspaceName) * @see javax.jcr.version.Version#getContainingHistory() * @deprecated Use {@link #getItemInfos(SessionInfo, ItemId)} */ + @Deprecated public NodeInfo getNodeInfo(SessionInfo sessionInfo, NodeId nodeId) throws ItemNotFoundException, RepositoryException; /** @@ -382,6 +383,7 @@ public SessionInfo obtain(SessionInfo sessionInfo, String workspaceName) * @see javax.jcr.Node#getProperty(String) * @deprecated Use {@link #getItemInfos(SessionInfo, ItemId)} */ + @Deprecated public PropertyInfo getPropertyInfo(SessionInfo sessionInfo, PropertyId propertyId) throws ItemNotFoundException, RepositoryException; //-----------------------------------------------< general modification >--- diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropContainer.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropContainer.java index a86e55fea36..63d3b81be63 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropContainer.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/property/PropContainer.java @@ -42,6 +42,7 @@ public abstract class PropContainer implements XmlSerializable, DavConstants { * @return true if the object could be added; false otherwise * @deprecated Use {@link #addContent(PropEntry)} instead. */ + @Deprecated public boolean addContent(Object contentEntry) { if (contentEntry instanceof PropEntry) { return addContent((PropEntry) contentEntry); diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/WorkspaceResource.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/WorkspaceResource.java index bfbbe5ff6e1..a5e6e309e28 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/WorkspaceResource.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/WorkspaceResource.java @@ -56,6 +56,7 @@ public interface WorkspaceResource extends DeltaVResource { /** * @deprecated Use {@link #CURRENT_ACTIVITY_SET} instead. */ + @Deprecated public static final DavPropertyName CUURENT_ACTIVITY_SET = DavPropertyName.create("current-activity-set", DeltaVConstants.NAMESPACE); /** diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java index 07a603fa5d6..86d19133a6a 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/xml/DomUtil.java @@ -736,6 +736,7 @@ public static Element hrefToXml(String href, Document factory) { * is called Expanded Name. * */ + @Deprecated public static String getQualifiedName(String localName, Namespace namespace) { return getExpandedName(localName, namespace); } From 01cc9acd4999decaa2797abe207359d41b4b0fc9 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 19 Jul 2024 15:47:20 +0200 Subject: [PATCH 020/171] JCR-5089: avoid use of deprecated junit.framework.Assert (#208) --- .../jackrabbit/core/cluster/DbClusterTestJCR3162.java | 3 +-- .../jackrabbit/core/query/lucene/ComparableArrayTest.java | 2 +- .../apache/jackrabbit/test/api/SysViewContentHandler.java | 3 +-- .../org/apache/jackrabbit/test/api/TreeComparator.java | 6 ++++-- .../jackrabbit/acl/AccessControlListImplTest.java | 7 +++---- .../org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java | 3 +-- 6 files changed, 11 insertions(+), 13 deletions(-) diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/DbClusterTestJCR3162.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/DbClusterTestJCR3162.java index 93d36aeab05..c80d8725bbb 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/DbClusterTestJCR3162.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/DbClusterTestJCR3162.java @@ -30,14 +30,13 @@ import javax.jcr.query.Query; import javax.jcr.query.RowIterator; -import junit.framework.Assert; - import org.apache.commons.io.FileUtils; import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.commons.JcrUtils; import org.apache.jackrabbit.core.RepositoryImpl; import org.apache.jackrabbit.core.config.RepositoryConfig; import org.apache.jackrabbit.test.JUnitTest; +import org.junit.Assert; /** * Test for JCR3162 diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/ComparableArrayTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/ComparableArrayTest.java index 49507d6b796..368bad8fadd 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/ComparableArrayTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/ComparableArrayTest.java @@ -16,7 +16,7 @@ */ package org.apache.jackrabbit.core.query.lucene; -import static junit.framework.Assert.assertEquals; +import static org.junit.Assert.assertEquals; import javax.jcr.RepositoryException; diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SysViewContentHandler.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SysViewContentHandler.java index ca3e88a1c95..46af661eea4 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SysViewContentHandler.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/SysViewContentHandler.java @@ -20,6 +20,7 @@ import org.xml.sax.Attributes; import org.xml.sax.SAXException; import org.apache.jackrabbit.test.AbstractJCRTest; +import org.junit.Assert; import javax.jcr.nodetype.NodeType; import javax.jcr.Session; @@ -45,8 +46,6 @@ import java.util.Iterator; import java.util.Map; -import junit.framework.Assert; - /** * ContentHandler implementation which checks if the system view export of * a node tree is compliant to the specification. diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java index 590819a6861..0b8daba3328 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/TreeComparator.java @@ -28,12 +28,14 @@ import javax.jcr.Value; import javax.jcr.PathNotFoundException; import javax.jcr.nodetype.NodeTypeManager; + +import org.junit.Assert; + import javax.jcr.nodetype.NodeTypeIterator; import javax.jcr.nodetype.NodeType; import java.util.Calendar; -import java.io.ByteArrayInputStream; -import junit.framework.Assert; +import java.io.ByteArrayInputStream; /** * TreeComparator compares two trees. This allows re-use for diff --git a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImplTest.java b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImplTest.java index 9c6a9789d71..f0fe19ed5ee 100644 --- a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImplTest.java +++ b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/security/authorization/jackrabbit/acl/AccessControlListImplTest.java @@ -28,7 +28,6 @@ import javax.jcr.security.AccessControlList; import javax.jcr.security.Privilege; -import junit.framework.Assert; import org.apache.jackrabbit.api.security.JackrabbitAccessControlList; import org.apache.jackrabbit.spi.Name; import org.apache.jackrabbit.spi.QValueFactory; @@ -36,6 +35,7 @@ import org.apache.jackrabbit.spi.commons.conversion.NamePathResolver; import org.apache.jackrabbit.spi.commons.value.QValueFactoryImpl; import org.apache.jackrabbit.test.api.security.AbstractAccessControlTest; +import org.junit.Assert; /** * Tests the functionality of the JCR AccessControlList API implementation. The @@ -97,15 +97,14 @@ public void testAddingDifferentEntries() throws Exception { // four different entries Assert.assertEquals(4, acl.size()); - + // UnknownPrincipal entries AccessControlEntry[] pentries = getEntries(acl, unknownPrincipal); Assert.assertEquals(2, pentries.length); - + // secondPrincipal entries AccessControlEntry[] sentries = getEntries(acl, knownPrincipal); Assert.assertEquals(2, sentries.length); - } public void testMultipleEntryEffect() throws Exception { diff --git a/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java b/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java index c8c89d2162a..869223a31f8 100644 --- a/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java +++ b/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java @@ -32,14 +32,13 @@ import org.apache.commons.vfs2.provider.sftp.SftpFileSystemConfigBuilder; import org.apache.jackrabbit.core.data.CachingDataStore; import org.apache.jackrabbit.core.data.TestCaseBase; +import org.junit.Assert; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.xml.sax.InputSource; -import junit.framework.Assert; - /** * Test {@link CachingDataStore} with VFSBackend with a VFS file system (local file system) by default. *

From 885a0f93071cab85839f7e2b571aa35e416faa5d Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 29 Jul 2024 16:11:10 +0200 Subject: [PATCH 021/171] JCR-5092: jackrabbit-jcr2spi: switch to commons-collections4 4.5.0-M2 (#210) --- .../hierarchy/CopyOfAbstractLinkedList.java | 1123 ----------------- .../jcr2spi/hierarchy/LinkedEntries.java | 3 +- jackrabbit-parent/pom.xml | 2 +- 3 files changed, 3 insertions(+), 1125 deletions(-) delete mode 100644 jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/CopyOfAbstractLinkedList.java diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/CopyOfAbstractLinkedList.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/CopyOfAbstractLinkedList.java deleted file mode 100644 index 2b45bb7a475..00000000000 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/CopyOfAbstractLinkedList.java +++ /dev/null @@ -1,1123 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.jcr2spi.hierarchy; - -/* - * This is a copy of org.apache.commons.collections4.list.AbstractLinkedList - * with dependencies inlined and two methods changed for JDK 21 conformance; - * see https://issues.apache.org/jira/browse/COLLECTIONS-842 and https://issues.apache.org/jira/browse/JCR-4940 - */ - -import java.io.IOException; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.lang.reflect.Array; -import java.util.AbstractList; -import java.util.Collection; -import java.util.ConcurrentModificationException; -import java.util.Iterator; -import java.util.List; -import java.util.ListIterator; -import java.util.NoSuchElementException; -import java.util.Objects; - -/** - * An abstract implementation of a linked list which provides numerous points for - * subclasses to override. - *

- * Overridable methods are provided to change the storage node and to change how - * nodes are added to and removed. Hopefully, all you need for unusual subclasses - * is here. - *

- * - * @param the type of elements in this list - * @since 3.0 - */ -abstract class CopyOfAbstractLinkedList implements List { - - /* - * Implementation notes: - * - a standard circular doubly-linked list - * - a marker node is stored to mark the start and the end of the list - * - node creation and removal always occurs through createNode() and - * removeNode(). - * - a modification count is kept, with the same semantics as - * {@link java.util.LinkedList}. - * - respects {@link AbstractList#modCount} - */ - - /** - * A {@link Node} which indicates the start and end of the list and does not - * hold a value. The value of {@code next} is the first item in the - * list. The value of {@code previous} is the last item in the list. - */ - transient Node header; - - /** The size of the list */ - transient int size; - - /** Modification count for iterators */ - transient int modCount; - - /** - * Constructor that does nothing (intended for deserialization). - *

- * If this constructor is used by a serializable subclass then the init() - * method must be called. - */ - protected CopyOfAbstractLinkedList() { - } - - /** - * Constructs a list copying data from the specified collection. - * - * @param coll the collection to copy - */ - protected CopyOfAbstractLinkedList(final Collection coll) { - init(); - addAll(coll); - } - - /** - * The equivalent of a default constructor, broken out so it can be called - * by any constructor and by {@code readObject}. - * Subclasses which override this method should make sure they call super, - * so the list is initialized properly. - */ - protected void init() { - header = createHeaderNode(); - } - - - @Override - public int size() { - return size; - } - - @Override - public boolean isEmpty() { - return size() == 0; - } - - @Override - public E get(final int index) { - final Node node = getNode(index, false); - return node.getValue(); - } - - - @Override - public Iterator iterator() { - return listIterator(); - } - - @Override - public ListIterator listIterator() { - return new LinkedListIterator<>(this, 0); - } - - @Override - public ListIterator listIterator(final int fromIndex) { - return new LinkedListIterator<>(this, fromIndex); - } - - - @Override - public int indexOf(final Object value) { - int i = 0; - for (Node node = header.next; node != header; node = node.next) { - if (isEqualValue(node.getValue(), value)) { - return i; - } - i++; - } - return INDEX_NOT_FOUND; - } - - @Override - public int lastIndexOf(final Object value) { - int i = size - 1; - for (Node node = header.previous; node != header; node = node.previous) { - if (isEqualValue(node.getValue(), value)) { - return i; - } - i--; - } - return INDEX_NOT_FOUND; - } - - @Override - public boolean contains(final Object value) { - return indexOf(value) != -1; - } - - @Override - public boolean containsAll(final Collection coll) { - for (final Object o : coll) { - if (!contains(o)) { - return false; - } - } - return true; - } - - - @Override - public Object[] toArray() { - return toArray(new Object[size]); - } - - @Override - @SuppressWarnings("unchecked") - public T[] toArray(T[] array) { - // Extend the array if needed - if (array.length < size) { - final Class componentType = array.getClass().getComponentType(); - array = (T[]) Array.newInstance(componentType, size); - } - // Copy the values into the array - int i = 0; - for (Node node = header.next; node != header; node = node.next, i++) { - array[i] = (T) node.getValue(); - } - // Set the value after the last value to null - if (array.length > size) { - array[size] = null; - } - return array; - } - - /** - * Gets a sublist of the main list. - * - * @param fromIndexInclusive the index to start from - * @param toIndexExclusive the index to end at - * @return the new sublist - */ - @Override - public List subList(final int fromIndexInclusive, final int toIndexExclusive) { - return new LinkedSubList<>(this, fromIndexInclusive, toIndexExclusive); - } - - - @Override - public boolean add(final E value) { - addLast(value); - return true; - } - - @Override - public void add(final int index, final E value) { - final Node node = getNode(index, true); - addNodeBefore(node, value); - } - - @Override - public boolean addAll(final Collection coll) { - return addAll(size, coll); - } - - @Override - public boolean addAll(final int index, final Collection coll) { - final Node node = getNode(index, true); - for (final E e : coll) { - addNodeBefore(node, e); - } - return true; - } - - - @Override - public E remove(final int index) { - final Node node = getNode(index, false); - final E oldValue = node.getValue(); - removeNode(node); - return oldValue; - } - - @Override - public boolean remove(final Object value) { - for (Node node = header.next; node != header; node = node.next) { - if (isEqualValue(node.getValue(), value)) { - removeNode(node); - return true; - } - } - return false; - } - - /** - * {@inheritDoc} - *

- * This implementation iterates over the elements of this list, checking each element in - * turn to see if it's contained in {@code coll}. If it's contained, it's removed - * from this list. As a consequence, it is advised to use a collection type for - * {@code coll} that provides a fast (e.g. O(1)) implementation of - * {@link Collection#contains(Object)}. - */ - @Override - public boolean removeAll(final Collection coll) { - boolean modified = false; - final Iterator it = iterator(); - while (it.hasNext()) { - if (coll.contains(it.next())) { - it.remove(); - modified = true; - } - } - return modified; - } - - - /** - * {@inheritDoc} - *

- * This implementation iterates over the elements of this list, checking each element in - * turn to see if it's contained in {@code coll}. If it's not contained, it's removed - * from this list. As a consequence, it is advised to use a collection type for - * {@code coll} that provides a fast (e.g. O(1)) implementation of - * {@link Collection#contains(Object)}. - */ - @Override - public boolean retainAll(final Collection coll) { - boolean modified = false; - final Iterator it = iterator(); - while (it.hasNext()) { - if (!coll.contains(it.next())) { - it.remove(); - modified = true; - } - } - return modified; - } - - @Override - public E set(final int index, final E value) { - final Node node = getNode(index, false); - final E oldValue = node.getValue(); - updateNode(node, value); - return oldValue; - } - - @Override - public void clear() { - removeAllNodes(); - } - - - public E getFirst() { - final Node node = header.next; - if (node == header) { - throw new NoSuchElementException(); - } - return node.getValue(); - } - - public E getLast() { - final Node node = header.previous; - if (node == header) { - throw new NoSuchElementException(); - } - return node.getValue(); - } - - public void addFirst(final E o) { - addNodeAfter(header, o); - } - - public void addLast(final E o) { - addNodeBefore(header, o); - } - - public E removeFirst() { - final Node node = header.next; - if (node == header) { - throw new NoSuchElementException(); - } - final E oldValue = node.getValue(); - removeNode(node); - return oldValue; - } - - public E removeLast() { - final Node node = header.previous; - if (node == header) { - throw new NoSuchElementException(); - } - final E oldValue = node.getValue(); - removeNode(node); - return oldValue; - } - - @Override - public boolean equals(final Object obj) { - if (obj == this) { - return true; - } - if (!(obj instanceof List)) { - return false; - } - final List other = (List) obj; - if (other.size() != size()) { - return false; - } - final ListIterator it1 = listIterator(); - final ListIterator it2 = other.listIterator(); - while (it1.hasNext() && it2.hasNext()) { - if (!Objects.equals(it1.next(), it2.next())) { - return false; - } - } - return !(it1.hasNext() || it2.hasNext()); - } - - @Override - public int hashCode() { - int hashCode = 1; - for (final E e : this) { - hashCode = 31 * hashCode + (e == null ? 0 : e.hashCode()); - } - return hashCode; - } - - @Override - public String toString() { - if (isEmpty()) { - return "[]"; - } - final StringBuilder buf = new StringBuilder(16 * size()); - buf.append(DEFAULT_TOSTRING_PREFIX); - - final Iterator it = iterator(); - boolean hasNext = it.hasNext(); - while (hasNext) { - final Object value = it.next(); - buf.append(value == this ? "(this Collection)" : value); - hasNext = it.hasNext(); - if (hasNext) { - buf.append(", "); - } - } - buf.append(DEFAULT_TOSTRING_SUFFIX); - return buf.toString(); - } - - /** - * Compares two values for equals. - * This implementation uses the equals method. - * Subclasses can override this to match differently. - * - * @param value1 the first value to compare, may be null - * @param value2 the second value to compare, may be null - * @return true if equal - */ - protected boolean isEqualValue(final Object value1, final Object value2) { - return Objects.equals(value1, value2); - } - - /** - * Updates the node with a new value. - * This implementation sets the value on the node. - * Subclasses can override this to record the change. - * - * @param node node to update - * @param value new value of the node - */ - protected void updateNode(final Node node, final E value) { - node.setValue(value); - } - - /** - * Creates a new node with previous, next and element all set to null. - * This implementation creates a new empty Node. - * Subclasses can override this to create a different class. - * - * @return newly created node - */ - protected Node createHeaderNode() { - return new Node<>(); - } - - /** - * Creates a new node with the specified properties. - * This implementation creates a new Node with data. - * Subclasses can override this to create a different class. - * - * @param value value of the new node - * @return a new node containing the value - */ - protected Node createNode(final E value) { - return new Node<>(value); - } - - /** - * Creates a new node with the specified object as its - * {@code value} and inserts it before {@code node}. - *

- * This implementation uses {@link #createNode(Object)} and - * {@link #addNode(CopyOfAbstractLinkedList.Node,CopyOfAbstractLinkedList.Node)}. - * - * @param node node to insert before - * @param value value of the newly added node - * @throws NullPointerException if {@code node} is null - */ - protected void addNodeBefore(final Node node, final E value) { - final Node newNode = createNode(value); - addNode(newNode, node); - } - - /** - * Creates a new node with the specified object as its - * {@code value} and inserts it after {@code node}. - *

- * This implementation uses {@link #createNode(Object)} and - * {@link #addNode(CopyOfAbstractLinkedList.Node,CopyOfAbstractLinkedList.Node)}. - * - * @param node node to insert after - * @param value value of the newly added node - * @throws NullPointerException if {@code node} is null - */ - protected void addNodeAfter(final Node node, final E value) { - final Node newNode = createNode(value); - addNode(newNode, node.next); - } - - /** - * Inserts a new node into the list. - * - * @param nodeToInsert new node to insert - * @param insertBeforeNode node to insert before - * @throws NullPointerException if either node is null - */ - protected void addNode(final Node nodeToInsert, final Node insertBeforeNode) { - Objects.requireNonNull(nodeToInsert, "nodeToInsert"); - Objects.requireNonNull(insertBeforeNode, "insertBeforeNode"); - nodeToInsert.next = insertBeforeNode; - nodeToInsert.previous = insertBeforeNode.previous; - insertBeforeNode.previous.next = nodeToInsert; - insertBeforeNode.previous = nodeToInsert; - size++; - modCount++; - } - - /** - * Removes the specified node from the list. - * - * @param node the node to remove - * @throws NullPointerException if {@code node} is null - */ - protected void removeNode(final Node node) { - Objects.requireNonNull(node, "node"); - node.previous.next = node.next; - node.next.previous = node.previous; - size--; - modCount++; - } - - /** - * Removes all nodes by resetting the circular list marker. - */ - protected void removeAllNodes() { - header.next = header; - header.previous = header; - size = 0; - modCount++; - } - - /** - * Gets the node at a particular index. - * - * @param index the index, starting from 0 - * @param endMarkerAllowed whether or not the end marker can be returned if - * startIndex is set to the list's size - * @return the node at the given index - * @throws IndexOutOfBoundsException if the index is less than 0; equal to - * the size of the list and endMakerAllowed is false; or greater than the - * size of the list - */ - protected Node getNode(final int index, final boolean endMarkerAllowed) throws IndexOutOfBoundsException { - // Check the index is within the bounds - if (index < 0) { - throw new IndexOutOfBoundsException("Couldn't get the node: " + - "index (" + index + ") less than zero."); - } - if (!endMarkerAllowed && index == size) { - throw new IndexOutOfBoundsException("Couldn't get the node: " + - "index (" + index + ") is the size of the list."); - } - if (index > size) { - throw new IndexOutOfBoundsException("Couldn't get the node: " + - "index (" + index + ") greater than the size of the " + - "list (" + size + ")."); - } - // Search the list and get the node - Node node; - if (index < size / 2) { - // Search forwards - node = header.next; - for (int currentIndex = 0; currentIndex < index; currentIndex++) { - node = node.next; - } - } else { - // Search backwards - node = header; - for (int currentIndex = size; currentIndex > index; currentIndex--) { - node = node.previous; - } - } - return node; - } - - /** - * Creates an iterator for the sublist. - * - * @param subList the sublist to get an iterator for - * @return a new iterator on the given sublist - */ - protected Iterator createSubListIterator(final LinkedSubList subList) { - return createSubListListIterator(subList, 0); - } - - /** - * Creates a list iterator for the sublist. - * - * @param subList the sublist to get an iterator for - * @param fromIndex the index to start from, relative to the sublist - * @return a new list iterator on the given sublist - */ - protected ListIterator createSubListListIterator(final LinkedSubList subList, final int fromIndex) { - return new LinkedSubListIterator<>(subList, fromIndex); - } - - /** - * Serializes the data held in this object to the stream specified. - *

- * The first serializable subclass must call this method from - * {@code writeObject}. - * - * @param outputStream the stream to write the object to - * @throws IOException if anything goes wrong - */ - protected void doWriteObject(final ObjectOutputStream outputStream) throws IOException { - // Write the size so we know how many nodes to read back - outputStream.writeInt(size()); - for (final E e : this) { - outputStream.writeObject(e); - } - } - - /** - * Deserializes the data held in this object to the stream specified. - *

- * The first serializable subclass must call this method from - * {@code readObject}. - * - * @param inputStream the stream to read the object from - * @throws IOException if any error occurs while reading from the stream - * @throws ClassNotFoundException if a class read from the stream can not be loaded - */ - @SuppressWarnings("unchecked") - protected void doReadObject(final ObjectInputStream inputStream) throws IOException, ClassNotFoundException { - init(); - final int size = inputStream.readInt(); - for (int i = 0; i < size; i++) { - add((E) inputStream.readObject()); - } - } - - /** - * A node within the linked list. - *

- * From Commons Collections 3.1, all access to the {@code value} property - * is via the methods on this class. - */ - protected static class Node { - - /** A pointer to the node before this node */ - protected Node previous; - /** A pointer to the node after this node */ - protected Node next; - /** The object contained within this node */ - protected E value; - - /** - * Constructs a new header node. - */ - protected Node() { - previous = this; - next = this; - } - - /** - * Constructs a new node. - * - * @param value the value to store - */ - protected Node(final E value) { - this.value = value; - } - - /** - * Constructs a new node. - * - * @param previous the previous node in the list - * @param next the next node in the list - * @param value the value to store - */ - protected Node(final Node previous, final Node next, final E value) { - this.previous = previous; - this.next = next; - this.value = value; - } - - /** - * Gets the value of the node. - * - * @return the value - * @since 3.1 - */ - protected E getValue() { - return value; - } - - /** - * Sets the value of the node. - * - * @param value the value - * @since 3.1 - */ - protected void setValue(final E value) { - this.value = value; - } - - /** - * Gets the previous node. - * - * @return the previous node - * @since 3.1 - */ - protected Node getPreviousNode() { - return previous; - } - - /** - * Sets the previous node. - * - * @param previous the previous node - * @since 3.1 - */ - protected void setPreviousNode(final Node previous) { - this.previous = previous; - } - - /** - * Gets the next node. - * - * @return the next node - * @since 3.1 - */ - protected Node getNextNode() { - return next; - } - - /** - * Sets the next node. - * - * @param next the next node - * @since 3.1 - */ - protected void setNextNode(final Node next) { - this.next = next; - } - } - - /** - * A list iterator over the linked list. - * - * @param the type of elements in this iterator. - */ - protected static class LinkedListIterator implements ListIterator, CopyOfOrderedIterator { - - /** The parent list */ - protected final CopyOfAbstractLinkedList parent; - - /** - * The node that will be returned by {@link #next()}. If this is equal - * to {@link CopyOfAbstractLinkedList#header} then there are no more values to return. - */ - protected Node next; - - /** - * The index of {@link #next}. - */ - protected int nextIndex; - - /** - * The last node that was returned by {@link #next()} or {@link - * #previous()}. Set to {@code null} if {@link #next()} or {@link - * #previous()} haven't been called, or if the node has been removed - * with {@link #remove()} or a new node added with {@link #add(Object)}. - * Should be accessed through {@link #getLastNodeReturned()} to enforce - * this behavior. - */ - protected Node current; - - /** - * The modification count that the list is expected to have. If the list - * doesn't have this count, then a - * {@link java.util.ConcurrentModificationException} may be thrown by - * the operations. - */ - protected int expectedModCount; - - /** - * Create a ListIterator for a list. - * - * @param parent the parent list - * @param fromIndex the index to start at - * @throws IndexOutOfBoundsException if fromIndex is less than 0 or greater than the size of the list - */ - protected LinkedListIterator(final CopyOfAbstractLinkedList parent, final int fromIndex) - throws IndexOutOfBoundsException { - this.parent = parent; - this.expectedModCount = parent.modCount; - this.next = parent.getNode(fromIndex, true); - this.nextIndex = fromIndex; - } - - /** - * Checks the modification count of the list is the value that this - * object expects. - * - * @throws ConcurrentModificationException If the list's modification - * count isn't the value that was expected. - */ - protected void checkModCount() { - if (parent.modCount != expectedModCount) { - throw new ConcurrentModificationException(); - } - } - - /** - * Gets the last node returned. - * - * @return the last node returned - * @throws IllegalStateException If {@link #next()} or {@link #previous()} haven't been called, - * or if the node has been removed with {@link #remove()} or a new node added with {@link #add(Object)}. - */ - protected Node getLastNodeReturned() throws IllegalStateException { - if (current == null) { - throw new IllegalStateException(); - } - return current; - } - - @Override - public boolean hasNext() { - return next != parent.header; - } - - @Override - public E next() { - checkModCount(); - if (!hasNext()) { - throw new NoSuchElementException("No element at index " + nextIndex + "."); - } - final E value = next.getValue(); - current = next; - next = next.next; - nextIndex++; - return value; - } - - @Override - public boolean hasPrevious() { - return next.previous != parent.header; - } - - @Override - public E previous() { - checkModCount(); - if (!hasPrevious()) { - throw new NoSuchElementException("Already at start of list."); - } - next = next.previous; - final E value = next.getValue(); - current = next; - nextIndex--; - return value; - } - - @Override - public int nextIndex() { - return nextIndex; - } - - @Override - public int previousIndex() { - // not normally overridden, as relative to nextIndex() - return nextIndex() - 1; - } - - @Override - public void remove() { - checkModCount(); - if (current == next) { - // remove() following previous() - next = next.next; - parent.removeNode(getLastNodeReturned()); - } else { - // remove() following next() - parent.removeNode(getLastNodeReturned()); - nextIndex--; - } - current = null; - expectedModCount++; - } - - @Override - public void set(final E obj) { - checkModCount(); - getLastNodeReturned().setValue(obj); - } - - @Override - public void add(final E obj) { - checkModCount(); - parent.addNodeBefore(next, obj); - current = null; - nextIndex++; - expectedModCount++; - } - - } - - /** - * A list iterator over the linked sub list. - * - * @param the type of elements in this iterator. - */ - protected static class LinkedSubListIterator extends LinkedListIterator { - - /** The sub list */ - protected final LinkedSubList sub; - - protected LinkedSubListIterator(final LinkedSubList sub, final int startIndex) { - super(sub.parent, startIndex + sub.offset); - this.sub = sub; - } - - @Override - public boolean hasNext() { - return nextIndex() < sub.size; - } - - @Override - public boolean hasPrevious() { - return previousIndex() >= 0; - } - - @Override - public int nextIndex() { - return super.nextIndex() - sub.offset; - } - - @Override - public void add(final E obj) { - super.add(obj); - sub.expectedModCount = parent.modCount; - sub.size++; - } - - @Override - public void remove() { - super.remove(); - sub.expectedModCount = parent.modCount; - sub.size--; - } - } - - /** - * The sublist implementation for CopyOfAbstractLinkedList. - * - * @param the type of elements in this list. - */ - protected static class LinkedSubList extends AbstractList { - /** The main list */ - CopyOfAbstractLinkedList parent; - /** Offset from the main list */ - int offset; - /** Sublist size */ - int size; - /** Sublist modCount */ - int expectedModCount; - - protected LinkedSubList(final CopyOfAbstractLinkedList parent, final int fromIndex, final int toIndex) { - if (fromIndex < 0) { - throw new IndexOutOfBoundsException("fromIndex = " + fromIndex); - } - if (toIndex > parent.size()) { - throw new IndexOutOfBoundsException("toIndex = " + toIndex); - } - if (fromIndex > toIndex) { - throw new IllegalArgumentException("fromIndex(" + fromIndex + ") > toIndex(" + toIndex + ")"); - } - this.parent = parent; - this.offset = fromIndex; - this.size = toIndex - fromIndex; - this.expectedModCount = parent.modCount; - } - - @Override - public int size() { - checkModCount(); - return size; - } - - @Override - public E get(final int index) { - rangeCheck(index, size); - checkModCount(); - return parent.get(index + offset); - } - - @Override - public void add(final int index, final E obj) { - rangeCheck(index, size + 1); - checkModCount(); - parent.add(index + offset, obj); - expectedModCount = parent.modCount; - size++; - modCount++; - } - - @Override - public E remove(final int index) { - rangeCheck(index, size); - checkModCount(); - final E result = parent.remove(index + offset); - expectedModCount = parent.modCount; - size--; - modCount++; - return result; - } - - @Override - public boolean addAll(final Collection coll) { - return addAll(size, coll); - } - - @Override - public boolean addAll(final int index, final Collection coll) { - rangeCheck(index, size + 1); - final int cSize = coll.size(); - if (cSize == 0) { - return false; - } - - checkModCount(); - parent.addAll(offset + index, coll); - expectedModCount = parent.modCount; - size += cSize; - modCount++; - return true; - } - - @Override - public E set(final int index, final E obj) { - rangeCheck(index, size); - checkModCount(); - return parent.set(index + offset, obj); - } - - @Override - public void clear() { - checkModCount(); - final Iterator it = iterator(); - while (it.hasNext()) { - it.next(); - it.remove(); - } - } - - @Override - public Iterator iterator() { - checkModCount(); - return parent.createSubListIterator(this); - } - - @Override - public ListIterator listIterator(final int index) { - rangeCheck(index, size + 1); - checkModCount(); - return parent.createSubListListIterator(this, index); - } - - @Override - public List subList(final int fromIndexInclusive, final int toIndexExclusive) { - return new LinkedSubList<>(parent, fromIndexInclusive + offset, toIndexExclusive + offset); - } - - protected void rangeCheck(final int index, final int beyond) { - if (index < 0 || index >= beyond) { - throw new IndexOutOfBoundsException("Index '" + index + "' out of bounds for size '" + size + "'"); - } - } - - protected void checkModCount() { - if (parent.modCount != expectedModCount) { - throw new ConcurrentModificationException(); - } - } - } - - // inlined dependencies from commons-collections - - private interface CopyOfOrderedIterator extends Iterator { - - /** - * Checks to see if there is a previous element that can be iterated to. - * - * @return {@code true} if the iterator has a previous element - */ - boolean hasPrevious(); - - /** - * Gets the previous element from the container. - * - * @return the previous element in the iteration - * @throws java.util.NoSuchElementException if the iteration is finished - */ - E previous(); - - } - - /** - * The index value when an element is not found in a collection or array: {@code -1}. - */ - private static final int INDEX_NOT_FOUND = -1; - - /** - * Default prefix used while converting an Iterator to its String representation. - */ - private static final String DEFAULT_TOSTRING_PREFIX = "["; - - /** - * Default suffix used while converting an Iterator to its String representation. - */ - private static final String DEFAULT_TOSTRING_SUFFIX = "]"; -} diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/LinkedEntries.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/LinkedEntries.java index 67c5b154a6e..e8e877d45d8 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/LinkedEntries.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/LinkedEntries.java @@ -22,6 +22,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; +import org.apache.commons.collections4.list.AbstractLinkedListForJava21; import org.apache.jackrabbit.spi.Name; import org.apache.jackrabbit.spi.Path; @@ -30,7 +31,7 @@ * LinkNode which links the entries of the list. */ @SuppressWarnings("rawtypes") -class LinkedEntries extends CopyOfAbstractLinkedList { +class LinkedEntries extends AbstractLinkedListForJava21 { private Node header; private volatile int modCount; diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 881258215d4..1898d002e77 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -454,7 +454,7 @@ org.apache.commons commons-collections4 - 4.4 + 4.5.0-M2 commons-io From bfa0187b685fbdc00b05a14ffb034f4ef6ee520e Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Sun, 4 Aug 2024 11:16:53 +0200 Subject: [PATCH 022/171] JCR-5093 Remove Commons IO dependency from JCR2SPI (#211) --- jackrabbit-jcr2spi/pom.xml | 4 ---- .../org/apache/jackrabbit/jcr2spi/BinaryTest.java | 13 +++++++------ .../jackrabbit/jcr2spi/CopyMoveToJsonTest.java | 15 +++++++++++---- 3 files changed, 18 insertions(+), 14 deletions(-) diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index 3ae901c2f59..3100aeccef2 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -128,10 +128,6 @@ org.apache.commons commons-collections4 - - commons-io - commons-io - concurrent concurrent diff --git a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/BinaryTest.java b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/BinaryTest.java index a01d8209baa..11651c78470 100644 --- a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/BinaryTest.java +++ b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/BinaryTest.java @@ -16,19 +16,18 @@ */ package org.apache.jackrabbit.jcr2spi; -import java.util.Random; - import static org.junit.Assert.assertArrayEquals; import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.Random; +import javax.jcr.Binary; import javax.jcr.Node; -import javax.jcr.Session; import javax.jcr.Property; -import javax.jcr.Binary; +import javax.jcr.Session; import javax.jcr.ValueFormatException; -import org.apache.commons.io.IOUtils; import org.apache.jackrabbit.jcr2spi.state.PropertyState; import org.apache.jackrabbit.spi.QValue; import org.apache.jackrabbit.test.AbstractJCRTest; @@ -186,7 +185,9 @@ public void testStreamIntegrity() throws Exception { // check the binaries are indeed the same (JCR-4154) byte[] result = new byte[bytes.length]; - IOUtils.readFully(p.getBinary().getStream(), result); + try (InputStream in = p.getBinary().getStream()) { + result = in.readAllBytes(); + } assertArrayEquals(bytes, result); } finally { s.logout(); diff --git a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/CopyMoveToJsonTest.java b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/CopyMoveToJsonTest.java index 9b7e6c26b4d..2ac41fee50c 100755 --- a/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/CopyMoveToJsonTest.java +++ b/jackrabbit-jcr2spi/src/test/java/org/apache/jackrabbit/jcr2spi/CopyMoveToJsonTest.java @@ -17,14 +17,15 @@ package org.apache.jackrabbit.jcr2spi; import java.io.ByteArrayInputStream; +import java.io.InputStream; import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.RepositoryException; import javax.jcr.Session; -import org.apache.commons.io.IOUtils; import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.test.AbstractJCRTest; @@ -39,7 +40,9 @@ public void testCreateJson() throws Exception { try { Property p = s.getNode(testRoot).getNode("test.json").getNode(JcrConstants.JCR_CONTENT) .getProperty(JcrConstants.JCR_DATA); - assertEquals(jsondata, IOUtils.toString(p.getBinary().getStream(), "UTF-8")); + try (InputStream in = p.getBinary().getStream()) { + assertEquals(jsondata, new String(in.readAllBytes(), StandardCharsets.UTF_8)); + } } finally { s.logout(); } @@ -53,7 +56,9 @@ public void testCopyJson() throws Exception { try { Property p = s.getNode(testRoot).getNode("target.json").getNode(JcrConstants.JCR_CONTENT) .getProperty(JcrConstants.JCR_DATA); - assertEquals(jsondata, IOUtils.toString(p.getBinary().getStream(), "UTF-8")); + try (InputStream in = p.getBinary().getStream()) { + assertEquals(jsondata, new String(in.readAllBytes(), StandardCharsets.UTF_8)); + } } finally { s.logout(); } @@ -67,7 +72,9 @@ public void testMoveJson() throws Exception { try { Property p = s.getNode(testRoot).getNode("target.json").getNode(JcrConstants.JCR_CONTENT) .getProperty(JcrConstants.JCR_DATA); - assertEquals(jsondata, IOUtils.toString(p.getBinary().getStream(), "UTF-8")); + try (InputStream in = p.getBinary().getStream()) { + assertEquals(jsondata, new String(in.readAllBytes(), StandardCharsets.UTF_8)); + } } finally { s.logout(); } From 71443c90788153f02c0f99034f72840f7a6302d8 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 5 Aug 2024 09:08:49 +0200 Subject: [PATCH 023/171] JCR-5094: webapp: bump htmlunit to 4.4.0 (#212) * JCR-5094: webapp: bump htmlunit to 4.4.0 --- jackrabbit-webapp/pom.xml | 4 ++-- .../test/java/org/apache/jackrabbit/j2ee/TomcatIT.java | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index cdfea7a376b..8b3384d7d4d 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -102,9 +102,9 @@ test - net.sourceforge.htmlunit + org.htmlunit htmlunit - 2.70.0 + 4.4.0 test diff --git a/jackrabbit-webapp/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java b/jackrabbit-webapp/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java index b7d4b27aed4..bf2e57a157d 100644 --- a/jackrabbit-webapp/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java +++ b/jackrabbit-webapp/src/test/java/org/apache/jackrabbit/j2ee/TomcatIT.java @@ -30,11 +30,11 @@ import org.apache.tomcat.util.scan.StandardJarScanner; import org.slf4j.bridge.SLF4JBridgeHandler; -import com.gargoylesoftware.htmlunit.WebClient; -import com.gargoylesoftware.htmlunit.html.HtmlElement; -import com.gargoylesoftware.htmlunit.html.HtmlForm; -import com.gargoylesoftware.htmlunit.html.HtmlInput; -import com.gargoylesoftware.htmlunit.html.HtmlPage; +import org.htmlunit.WebClient; +import org.htmlunit.html.HtmlElement; +import org.htmlunit.html.HtmlForm; +import org.htmlunit.html.HtmlInput; +import org.htmlunit.html.HtmlPage; public class TomcatIT extends TestCase { From a4a3c7c38b1159472110b80d087549b146eeb54a Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Mon, 5 Aug 2024 17:41:12 +0200 Subject: [PATCH 024/171] JCR-5095 Improve exception handling in TokenBasedLoginTest (#213) --- .../token/TokenBasedLoginTest.java | 263 +++++++++--------- 1 file changed, 125 insertions(+), 138 deletions(-) diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authentication/token/TokenBasedLoginTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authentication/token/TokenBasedLoginTest.java index 78d8194e3ea..2e54684e526 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authentication/token/TokenBasedLoginTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authentication/token/TokenBasedLoginTest.java @@ -16,6 +16,23 @@ */ package org.apache.jackrabbit.core.security.authentication.token; +import java.lang.Thread.UncaughtExceptionHandler; +import java.security.Principal; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; + +import javax.jcr.LoginException; +import javax.jcr.Node; +import javax.jcr.Repository; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.SimpleCredentials; + import org.apache.jackrabbit.api.JackrabbitSession; import org.apache.jackrabbit.api.security.authentication.token.TokenCredentials; import org.apache.jackrabbit.api.security.principal.ItemBasedPrincipal; @@ -26,18 +43,6 @@ import org.apache.jackrabbit.test.NotExecutableException; import org.apache.jackrabbit.test.RepositoryStub; -import javax.jcr.LoginException; -import javax.jcr.Node; -import javax.jcr.Repository; -import javax.jcr.RepositoryException; -import javax.jcr.Session; -import javax.jcr.SimpleCredentials; -import java.security.Principal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Set; - /** * TokenBasedLoginTest... */ @@ -230,120 +235,69 @@ public void testLogin() throws RepositoryException { * Tests concurrent login on the Repository including token creation. * Test copied and slightly adjusted from org.apache.jackrabbit.core.ConcurrentLoginTest */ - public void testConcurrentLogin() throws RepositoryException, NotExecutableException { - final Exception[] exception = new Exception[1]; - List testRunner = new ArrayList(); - for (int i = 0; i < 10; i++) { - testRunner.add(new Thread(new Runnable() { - public void run() { - for (int i = 0; i < 100; i++) { - try { - SimpleCredentials sc = new SimpleCredentials(testuser.getID(), testuser.getID().toCharArray()); - sc.setAttribute(TokenBasedAuthentication.TOKEN_ATTRIBUTE, ""); - - Session s = getHelper().getRepository().login(sc); - try { - Set tcs = ((SessionImpl) s).getSubject().getPublicCredentials(TokenCredentials.class); - assertFalse(tcs.isEmpty()); - } finally { - s.logout(); - } - } catch (Exception e) { - exception[0] = e; - break; - } + public void testConcurrentLogin() throws Throwable { + assertParallelExecutionSucceeds(10, new JcrRunnable() { + public void run() throws RepositoryException { + for (int i = 0; i < 100; i++) { + SimpleCredentials sc = new SimpleCredentials(testuser.getID(), testuser.getID().toCharArray()); + sc.setAttribute(TokenBasedAuthentication.TOKEN_ATTRIBUTE, ""); + + Session s = getHelper().getRepository().login(sc); + try { + Set tcs = ((SessionImpl) s).getSubject().getPublicCredentials(TokenCredentials.class); + assertFalse(tcs.isEmpty()); + } finally { + s.logout(); } } - })); - } - - // start threads - for (Object aTestRunner : testRunner) { - ((Thread) aTestRunner).start(); - } - - // join threads - for (Object aTestRunner : testRunner) { - try { - ((Thread) aTestRunner).join(); - } catch (InterruptedException e) { - fail(e.toString()); } - } + }); - if (exception[0] != null) { - fail(exception[0].toString()); - } } /** * Tests concurrent login of 3 different users on the Repository including * token creation. * Test copied and slightly adjusted from org.apache.jackrabbit.core.ConcurrentLoginTest + * @throws InterruptedException */ - public void testConcurrentLoginOfDifferentUsers() throws RepositoryException, NotExecutableException { - final Exception[] exception = new Exception[1]; - List testRunner = new ArrayList(); - for (int i = 0; i < 10; i++) { - testRunner.add(new Thread(new Runnable() { - public void run() { - for (int i = 0; i < 100; i++) { - try { - SimpleCredentials c; - double rand = 3 * Math.random(); - int index = (int) Math.floor(rand); - switch (index) { - case 0: - c = new SimpleCredentials(testuser.getID(), testuser.getID().toCharArray()); - break; - case 1: - c = new SimpleCredentials(getHelper().getProperty(RepositoryStub.PROP_PREFIX + "." + RepositoryStub.PROP_SUPERUSER_NAME), getHelper().getProperty(RepositoryStub.PROP_PREFIX + "." + RepositoryStub.PROP_SUPERUSER_PWD).toCharArray()); - break; - default: - c = new SimpleCredentials(getHelper().getProperty(RepositoryStub.PROP_PREFIX + "." + RepositoryStub.PROP_READONLY_NAME), getHelper().getProperty(RepositoryStub.PROP_PREFIX + "." + RepositoryStub.PROP_READONLY_PWD).toCharArray()); - break; - } - c.setAttribute(TokenBasedAuthentication.TOKEN_ATTRIBUTE, ""); - Session s = getHelper().getRepository().login(c); - try { - Set tcs = ((SessionImpl) s).getSubject().getPublicCredentials(TokenCredentials.class); - assertFalse(tcs.isEmpty()); - } finally { - s.logout(); - } - } catch (Exception e) { - exception[0] = e; + public void testConcurrentLoginOfDifferentUsers() throws InterruptedException { + assertParallelExecutionSucceeds(10, new JcrRunnable() { + public void run() throws RepositoryException { + for (int i = 0; i < 100; i++) { + SimpleCredentials c; + double rand = 3 * Math.random(); + int index = (int) Math.floor(rand); + switch (index) { + case 0: + c = new SimpleCredentials(testuser.getID(), testuser.getID().toCharArray()); + break; + case 1: + c = new SimpleCredentials(getHelper().getProperty(RepositoryStub.PROP_PREFIX + "." + RepositoryStub.PROP_SUPERUSER_NAME), getHelper().getProperty(RepositoryStub.PROP_PREFIX + "." + RepositoryStub.PROP_SUPERUSER_PWD).toCharArray()); break; - } + default: + c = new SimpleCredentials(getHelper().getProperty(RepositoryStub.PROP_PREFIX + "." + RepositoryStub.PROP_READONLY_NAME), getHelper().getProperty(RepositoryStub.PROP_PREFIX + "." + RepositoryStub.PROP_READONLY_PWD).toCharArray()); + break; + } + c.setAttribute(TokenBasedAuthentication.TOKEN_ATTRIBUTE, ""); + Session s = getHelper().getRepository().login(c); + try { + Set tcs = ((SessionImpl) s).getSubject().getPublicCredentials(TokenCredentials.class); + assertFalse(tcs.isEmpty()); + } finally { + s.logout(); } } - })); - } - - // start threads - for (Object aTestRunner : testRunner) { - ((Thread) aTestRunner).start(); - } - - // join threads - for (Object aTestRunner : testRunner) { - try { - ((Thread) aTestRunner).join(); - } catch (InterruptedException e) { - fail(e.toString()); } - } - - if (exception[0] != null) { - fail(exception[0].toString()); - } + }); } /** * Tests concurrent login on the Repository including token creation. * Test copied and slightly adjusted from org.apache.jackrabbit.core.ConcurrentLoginTest + * @throws InterruptedException */ - public void testConcurrentLoginDifferentWorkspaces() throws RepositoryException, NotExecutableException { + public void testConcurrentLoginDifferentWorkspaces() throws RepositoryException, NotExecutableException, InterruptedException { final String testID = testuser.getID(); // check if test is executable @@ -367,53 +321,86 @@ public void testConcurrentLoginDifferentWorkspaces() throws RepositoryException, } } - final Exception[] exception = new Exception[1]; + assertParallelExecutionSucceeds(10, new JcrRunnable() { + public void run() throws RepositoryException { + for (int i = 0; i < 100; i++) { + double rand = wspNames.size() * Math.random(); + int index = (int) Math.floor(rand); + String wspName = wspNames.get(index); + + SimpleCredentials sc = new SimpleCredentials(testID, testID.toCharArray()); + sc.setAttribute(TokenBasedAuthentication.TOKEN_ATTRIBUTE, ""); + + Session s = getHelper().getRepository().login(sc, wspName); + try { + Set tcs = ((SessionImpl) s).getSubject().getPublicCredentials(TokenCredentials.class); + assertFalse(tcs.isEmpty()); + } finally { + s.logout(); + } + } + } + }); + } + + static class UncheckedRepositoryException extends RuntimeException { + private static final long serialVersionUID = 1L; + + public UncheckedRepositoryException(RepositoryException e) { + super(e); + } + } + + /** + * Similar to {@link Runnable} but allows to throw {@link RepositoryException} in its {@link #run()} method. + */ + static interface JcrRunnable { + public void run() throws RepositoryException; + } + + private static void assertParallelExecutionSucceeds(int numThreads, JcrRunnable runnable) throws InterruptedException { List testRunner = new ArrayList(); - for (int i = 0; i < 10; i++) { + for (int i = 0; i < numThreads; i++) { testRunner.add(new Thread(new Runnable() { public void run() { - for (int i = 0; i < 100; i++) { - try { - double rand = wspNames.size() * Math.random(); - int index = (int) Math.floor(rand); - String wspName = wspNames.get(index); - - SimpleCredentials sc = new SimpleCredentials(testID, testID.toCharArray()); - sc.setAttribute(TokenBasedAuthentication.TOKEN_ATTRIBUTE, ""); - - Session s = getHelper().getRepository().login(sc, wspName); - try { - Set tcs = ((SessionImpl) s).getSubject().getPublicCredentials(TokenCredentials.class); - assertFalse(tcs.isEmpty()); - } finally { - s.logout(); - } - - } catch (Exception e) { - exception[0] = e; - break; - } + try { + runnable.run(); + } catch (RepositoryException e) { + throw new UncheckedRepositoryException(e); } } })); } + assertThreadExecutionSucceeds(testRunner); + } + /** + * Executes all given threads and waits for them to finish. Exception in any of the thread will make the calling thread die with an exception as well + * @param testRunner the threads to execute + * @throws InterruptedException + */ + private static void assertThreadExecutionSucceeds(Collection testRunner) throws InterruptedException { + Map threadExceptions = new ConcurrentHashMap<>(); // start threads - for (Object aTestRunner : testRunner) { - ((Thread) aTestRunner).start(); + for (Thread aTestRunner : testRunner) { + aTestRunner.setUncaughtExceptionHandler(new UncaughtExceptionHandler() { + public void uncaughtException(Thread t, Throwable e) { + threadExceptions.put(t.getName() + " (id " + t.getId() +")", e); + } + } ); + aTestRunner.start(); } // join threads - for (Object aTestRunner : testRunner) { - try { - ((Thread) aTestRunner).join(); - } catch (InterruptedException e) { - fail(e.toString()); - } + for (Thread aTestRunner : testRunner) { + aTestRunner.join(); } - if (exception[0] != null) { - fail(exception[0].toString()); + // only rethrow one exception (put the other ones as suppressed) + IllegalStateException mainException = threadExceptions.entrySet().stream().findFirst().map(e -> new IllegalStateException("Thread " + e.getKey() + " failed", e.getValue())).orElse(null); + if (mainException != null) { + threadExceptions.entrySet().stream().skip(1).forEach(e -> mainException.addSuppressed(new IllegalStateException("Thread " + e.getKey() + " failed", e.getValue()))); + throw mainException; } } } \ No newline at end of file From bda59c786545cfa839ff8f82d6a88d244e035398 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Tue, 6 Aug 2024 09:52:51 +0200 Subject: [PATCH 025/171] trivial: Remove prerequisites from POM Those only matter for maven plugins, all other packagings need to use maven-enforcer instead for build time prerequisites --- jackrabbit-parent/pom.xml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 1898d002e77..36a3325c8c6 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -94,10 +94,6 @@ - - 3.2.1 - - javadoc From 85e5d0cca855a2a4c43972fb2f97042a6b81e7e3 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 7 Aug 2024 15:22:48 +0200 Subject: [PATCH 026/171] JCR-5096: JcrConstants: refer to the constants in javax.jcr.Property and javax.jcr.nodetype.NodeType (#214) --- .../java/org/apache/jackrabbit/JcrConstants.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java index 3b15c90d876..d66c1313e65 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java @@ -19,11 +19,19 @@ import javax.jcr.Session; /** - * This Interface defines some of the item names that are defined in the - * jcr spec 1.0, using the default prefixes 'jcr', 'nt' and 'mix'. Please note - * that those prefixes can by redefined by an application using the + * This interface defines some of the item names that are defined in the JCR Specification 1.0, using + * the default prefixes 'jcr', 'nt' and 'mix'. + *

+ * Please note that those prefixes can by redefined by an application using the * {@link Session#setNamespacePrefix(String, String)} method. As a result, the * constants may not refer to the respective items. + *

+ * On the other hand, the constants in {@link javax.jcr.nodetype.NodeType} and + * {@link javax.jcr.Property} are more complete (covering + * JCR 2.0 as well) and also + * define names using expanded form, which is immune to session local + * remappings. */ public interface JcrConstants { /** From 0f914f161e694028d5e21dbb5eb0c0a1ddce9e71 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 19 Aug 2024 07:28:19 +0100 Subject: [PATCH 027/171] JCR-5097: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.68.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 36a3325c8c6..a354ee389f8 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.66.0 + 1.68.0 1.22.20 9.4.55.v20240627 From befd56032c285be4159520bda70d4d04fbd1e654 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 20 Aug 2024 08:49:15 +0100 Subject: [PATCH 028/171] JCR-5096: JcrConstants: refer to the constants in javax.jcr.Property and javax.jcr.nodetype.NodeType - fix broken Javadoc --- .../src/main/java/org/apache/jackrabbit/JcrConstants.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java index d66c1313e65..e5160ca6cd7 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java @@ -20,7 +20,7 @@ /** * This interface defines some of the item names that are defined in the JCR Specification 1.0, using + * href="https://s.apache.org/jcr-1.0-javadoc/">JCR Specification 1.0, using * the default prefixes 'jcr', 'nt' and 'mix'. *

* Please note that those prefixes can by redefined by an application using the From 6bdc43966272cbcc9b3dc56889e9c0ec1a259248 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 20 Aug 2024 10:40:32 +0100 Subject: [PATCH 029/171] JCR-5098: jackrabbit-jcr-server: Java 24 javadoc errors --- .../jackrabbit/webdav/jcr/property/LengthsProperty.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java index fb1ef82a90b..ebd1b9bce12 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/jcr/property/LengthsProperty.java @@ -23,7 +23,7 @@ import org.w3c.dom.Element; /** - * LengthsProperty extends {@link org.apache.jackrabbit.webdav.property.DavProperty} providing + * {@code LengthsProperty} extends {@link org.apache.jackrabbit.webdav.property.DavProperty} providing * utilities to handle the multiple lengths of the property item represented * by this resource. */ @@ -32,7 +32,7 @@ public class LengthsProperty extends AbstractDavProperty implements Item private final long[] value; /** - * Create a new LengthsProperty from the given long array. + * Create a new {@code LengthsProperty} from the given long array. * * @param lengths as retrieved from the JCR property */ @@ -42,10 +42,10 @@ public LengthsProperty(long[] lengths) { } /** - * Returns an array of {@link long}s representing the value of this + * Returns an array of {@code long}s representing the value of this * property. * - * @return an array of {@link long}s + * @return an array of {@code long}s */ public long[] getValue() { return value; From 7dc978018d9321d4c4ee0f2b40e99965e7c22450 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 3 Sep 2024 05:30:59 +0200 Subject: [PATCH 030/171] JCR-5099: Update Logback version to 1.2.13 (#215) --- .../src/test/java/org/apache/jackrabbit/osgi/OSGiIT.java | 4 ++-- jackrabbit-parent/pom.xml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/OSGiIT.java b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/OSGiIT.java index 066656f8517..fb8b0f803b2 100644 --- a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/OSGiIT.java +++ b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/OSGiIT.java @@ -66,8 +66,8 @@ public Option[] configuration() throws IOException, URISyntaxException { mavenBundle("org.apache.felix", "org.apache.felix.fileinstall", "3.2.6"), mavenBundle("org.slf4j", "slf4j-api", "1.7.36"), mavenBundle("commons-logging", "commons-logging", "1.2"), - mavenBundle("ch.qos.logback", "logback-core", "1.2.11"), - mavenBundle("ch.qos.logback", "logback-classic", "1.2.11"), + mavenBundle("ch.qos.logback", "logback-core", "1.2.13"), + mavenBundle("ch.qos.logback", "logback-classic", "1.2.13"), frameworkProperty("repository.home").value("target"), systemProperties( systemProperty("logback.configurationFile") diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index a354ee389f8..4188b3f3be7 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -63,7 +63,7 @@ ${project.build.sourceEncoding} 1.7.36 1.7.36 - 1.2.11 + 1.2.13 11 From 4e97260ff3c062014a652a714d058734834d6dc1 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 5 Sep 2024 14:53:54 +0100 Subject: [PATCH 031/171] JCR-5100: Update commons-cli dependency to 1.9.0 --- jackrabbit-standalone-components/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 1c25db0d1ad..3afa6f0f33c 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -134,7 +134,7 @@ commons-cli commons-cli - 1.8.0 + 1.9.0 commons-chain From 901d44344e2cd24b875cf84b3cd796e6aa6b5eda Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 5 Sep 2024 16:05:11 +0100 Subject: [PATCH 032/171] JCR-5101: Update easymock dependency to 5.4.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 4188b3f3be7..79526f6bde3 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -612,7 +612,7 @@ org.easymock easymock - 5.3.0 + 5.4.0 junit From 6fa88a1e020c47b75e9755c40de61c4c31586dd3 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 5 Sep 2024 16:36:32 +0100 Subject: [PATCH 033/171] JCR-5102: Update mockito dependency to 5.13.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 79526f6bde3..416bbec8fe9 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -622,7 +622,7 @@ org.mockito mockito-core - 5.12.0 + 5.13.0 From ca98beccef5d4cd57d3a6a73db515ed5fcb9185e Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 12 Sep 2024 15:13:13 +0100 Subject: [PATCH 034/171] JCR-5103: Update oak-jackrabbit-api.version.used to Oak 1.22.21 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 416bbec8fe9..6795c301261 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -57,7 +57,7 @@ 1.68.0 - 1.22.20 + 1.22.21 9.4.55.v20240627 2.4.1 ${project.build.sourceEncoding} From 545ca83d78970a81683c791d92d16c1cc44dc82d Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 1 Oct 2024 10:07:04 +0200 Subject: [PATCH 035/171] JCR-5104: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.70.0 (#216) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 6795c301261..1dbb71f581f 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.68.0 + 1.70.0 1.22.21 9.4.55.v20240627 From 81491e777e2b2204c308a427c3cb2500966719f9 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 3 Oct 2024 17:11:48 +0100 Subject: [PATCH 036/171] JCR-5106: core tests: improve diagnostics in DBDataStoreTest --- .../apache/jackrabbit/core/data/DBDataStoreTest.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/DBDataStoreTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/DBDataStoreTest.java index 8152d197afa..d1b2c835249 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/DBDataStoreTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/DBDataStoreTest.java @@ -74,7 +74,9 @@ public void testGetRecord() throws Exception { try { assertNotNull(stream); for (int j = 0; j < data.length; j++) { - assertEquals((data[j]) & 0xff, stream.read()); + int b = stream.read(); + assertTrue("early EOF at position " + j + " of stream #" + i, b >= 0); + assertEquals("data should be equal on read of stream #" + i + " at position " + j, (data[j]) & 0xff, b); } assertEquals(-1, stream.read()); } finally { @@ -103,7 +105,7 @@ public void testDbInputStreamReset() throws Exception { // test integrity of replayed bytes byte[] replayedBytes = new byte[data.length]; int length = in.read(replayedBytes); - assertEquals(length, data.length); + assertEquals(data.length, length); for (int i = 0; i < data.length; i++) { log.append(i + " data: " + data[i] + " replayed: " + replayedBytes[i] + "\n"); @@ -175,7 +177,9 @@ public void testConcurrentRead() throws Exception { // verify the contents of all the streams, reading them in parallel for (int i = 0; i < data.length; i++) { for (int j = 0; j < streams.length; j++) { - assertEquals((data[i]) & 0xff, streams[j].read()); + int b = streams[j].read(); + assertTrue("early EOF at position " + i + " of stream #" + j, b >= 0); + assertEquals((data[i]) & 0xff, b); } } From 577da037c0014d0ae024510cc15be70aaed56d0f Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 3 Oct 2024 18:52:12 +0100 Subject: [PATCH 037/171] JCR-5107: DbInputStream makes incorrect assumptions about commons-io internals --- .../jackrabbit/core/data/db/DbInputStream.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbInputStream.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbInputStream.java index 3bc2f0c50b4..99a482c5760 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbInputStream.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/data/db/DbInputStream.java @@ -18,6 +18,7 @@ import java.io.EOFException; import java.io.IOException; +import java.io.InputStream; import java.sql.ResultSet; import org.apache.commons.io.input.AutoCloseInputStream; @@ -40,6 +41,7 @@ public class DbInputStream extends AutoCloseInputStream { protected boolean endOfStream; protected ResultSet rs; + private InputStream initialStream; /** * Create a database input stream for the given identifier. @@ -52,6 +54,7 @@ protected DbInputStream(DbDataStore store, DataIdentifier identifier) { super(null); this.store = store; this.identifier = identifier; + this.initialStream = super.in; } /** @@ -63,13 +66,11 @@ protected void openStream() throws IOException { if (endOfStream) { throw new EOFException(); } - if (in == null) { + if (in == initialStream) { try { in = store.openStream(this, identifier); } catch (DataStoreException e) { - IOException e2 = new IOException(e.getMessage()); - e2.initCause(e); - throw e2; + throw new IOException(e.getMessage(), e); } } } @@ -121,9 +122,9 @@ public int read(byte[] b, int off, int len) throws IOException { * When the stream is consumed, the database objects held by the instance are closed. */ public void close() throws IOException { - if (in != null) { + if (in != initialStream) { in.close(); - in = null; + in = initialStream; // some additional database objects // may need to be closed if (rs != null) { From 8837e8ed71bd1a5879d51cad1c769051738ee734 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 3 Oct 2024 19:35:56 +0100 Subject: [PATCH 038/171] JCR-5105: Update commons-io dependency to 2.17.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 1dbb71f581f..4af0172f70c 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -455,7 +455,7 @@ commons-io commons-io - 2.16.1 + 2.17.0 javax.transaction From 5adf0602bbe8ee688ab170a2ab02f2255e245eb5 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 09:46:00 +0100 Subject: [PATCH 039/171] JCR-5108: remove commons-collections4 version-specific dependency from jackrabbit-standalone --- jackrabbit-standalone-components/pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 3afa6f0f33c..63554a9a2c7 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -150,7 +150,6 @@ org.apache.commons commons-collections4 - 4.4 commons-digester From a4ecbfc1b91212eefe3a24b2b373251a60f60dd5 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 11:09:58 +0100 Subject: [PATCH 040/171] JCR-5102: Update mockito dependency to 5.14.1 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 4af0172f70c..9d04ca54dc3 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -622,7 +622,7 @@ org.mockito mockito-core - 5.13.0 + 5.14.1 From c439f3c82788cf756487f8395fbd1bbfafafdd10 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 11:38:59 +0100 Subject: [PATCH 041/171] JCR-5109: Update tomcat dependency to 9.0.95 --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 8b3384d7d4d..30a35f1d79e 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.91 + 9.0.95 From c7812ca323dcd7b81e3601ebc27e6b3dbfe6a44b Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 12:13:11 +0100 Subject: [PATCH 042/171] JCR-5110: update aws java sdk version to 1.12.773 --- jackrabbit-aws-ext/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index e2ac772b351..c82908ee57a 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -49,7 +49,7 @@ com.amazonaws aws-java-sdk-s3 - 1.12.761 + 1.12.773 org.apache.jackrabbit From 790dd67089710e57ec3d6f6fb61de24f275e94cf Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 12:37:56 +0100 Subject: [PATCH 043/171] JCR-5111: update kotlin-stdlib dependency to 1.9.25 --- jackrabbit-vfs-ext/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index 8e5974ab10a..c00d470277f 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -73,7 +73,7 @@ org.jetbrains.kotlin kotlin-stdlib - 1.9.0 + 1.9.25 org.apache.commons From fd5ceab87417a220aa37b9972dc683cb2e18c7ba Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 13:19:37 +0100 Subject: [PATCH 044/171] JCR-5112: update Jetty to 9.4.56.v20240826 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 9d04ca54dc3..e60852f85ff 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -58,7 +58,7 @@ 1.70.0 1.22.21 - 9.4.55.v20240627 + 9.4.56.v20240826 2.4.1 ${project.build.sourceEncoding} 1.7.36 From 30f05ab19e6cc2afb5dd3cfce3ddc73832a1657b Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 13:48:28 +0100 Subject: [PATCH 045/171] JCR-5113: Update pmd-plugin dependency to 3.25.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index e60852f85ff..c4148247f17 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -416,7 +416,7 @@ org.apache.maven.plugins maven-pmd-plugin - 3.24.0 + 3.25.0 ${java.version} From 98e413cafac194690c495d397d3c8a325beb51e0 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 14:14:41 +0100 Subject: [PATCH 046/171] JCR-5114: update checkstyle-plugin dependency to 3.5.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index c4148247f17..d41f9e1cf8f 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -411,7 +411,7 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.4.0 + 3.5.0 org.apache.maven.plugins From df0335953b283fb692eaa751877fccc6bc690eff Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 14:35:10 +0100 Subject: [PATCH 047/171] JCR-5115: Update spotbugs-maven-plugin to 4.8.6.4 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index d41f9e1cf8f..5fd90424c40 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -424,7 +424,7 @@ com.github.spotbugs spotbugs-maven-plugin - 4.8.6.2 + 4.8.6.4 From e8655fe8a314712fec8aa85a2538a0ffdd2d2ec7 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 4 Oct 2024 14:42:04 +0100 Subject: [PATCH 048/171] JCR-5116: Release Jackrabbit 2.23.1-beta - Candidate Release Notes --- RELEASE-NOTES.txt | 53 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 37 insertions(+), 16 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index bdaaab6c747..eedb68ca538 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,34 +1,55 @@ -Release Notes -- Apache Jackrabbit -- Version 2.23.0-beta +Release Notes -- Apache Jackrabbit -- Version 2.23.1-beta Introduction ------------ -This is Apache Jackrabbit(TM) 2.23.0-beta, a fully compliant implementation of the +This is Apache Jackrabbit(TM) 2.23.1-beta, a fully compliant implementation of the Content Repository for Java(TM) Technology API, version 2.0 (JCR 2.0) as specified in the Java Specification Request 283 (JSR 283). -Apache Jackrabbit 2.23.0-beta is an unstable release cut directly from +Apache Jackrabbit 2.23.1-beta is an unstable release cut directly from Jackrabbit trunk, with a focus on new features and other improvements. For production use we recommend the latest stable 2.20.x release. -Changes in Jackrabbit 2.23.0-beta +Changes in Jackrabbit 2.23.1-beta ---------------------------------- +Bug + + [JCR-5107] - DbInputStream makes incorrect assumptions about commons-io internals + +Improvement + + [JCR-5093] - jcr2spi: get rid of Commons IO dependency + [JCR-5106] - core tests: improve diagnostics in DBDataStoreTest + +Test + + [JCR-5098] - jackrabbit-jcr-server: Java 24 javadoc errors + Task - [JCR-5073] - core: avoid varargs related compiler warnings in tests - [JCR-5075] - set baseline comparisonVersion to latest stable (2.22.0) - [JCR-5076] - Use correctly test scope for dependencies of type: test-jar - [JCR-5077] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.66.0 - [JCR-5078] - update Apache parent pom to version 33 - [JCR-5079] - Update tomcat dependency to 9.0.91 - [JCR-5080] - Update easymock dependency to 5.3.0 - [JCR-5081] - update aws java sdk version to 1.12.761 - [JCR-5082] - update Jetty to 9.4.55.v20240627 - [JCR-5083] - Update maven-jar-plugin to 3.4.2 - [JCR-5084] - Update pmd-plugin dependency to 3.24.0 - [JCR-5086] - Update spotbugs-maven-plugin to 4.8.6.2 + [JCR-5088] - remove warnings about missing @deprecated annotations + [JCR-5089] - avoid use of deprecated junit.framework.Assert + [JCR-5094] - webapp: bump htmlunit to 4.4.0 + [JCR-5096] - JcrConstants: refer to the constants in javax.jcr.Property and javax.jcr.nodetype.NodeType + [JCR-5097] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.68.0 + [JCR-5099] - Update Logback version to 1.2.13 + [JCR-5100] - Update commons-cli dependency to 1.9.0 + [JCR-5101] - Update easymock dependency to 5.4.0 + [JCR-5102] - Update mockito dependency to 5.14.1 + [JCR-5103] - Update oak-jackrabbit-api.version.used to Oak 1.22.21 + [JCR-5104] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.70.0 + [JCR-5105] - Update commons-io dependency to 2.17.0 + [JCR-5108] - remove commons-collections4 version-specific dependency from jackrabbit-standalone + [JCR-5109] - Update tomcat dependency to 9.0.95 + [JCR-5110] - update aws java sdk version to 1.12.773 + [JCR-5111] - update kotlin-stdlib dependency to 1.9.25 + [JCR-5112] - update Jetty to 9.4.56.v20240826 + [JCR-5113] - Update pmd-plugin dependency to 3.25.0 + [JCR-5114] - update checkstyle-plugin dependency to 3.5.0 + [JCR-5115] - Update spotbugs-maven-plugin to 4.8.6.4 For more detailed information about all the changes in this and other From cae1e7851c99599547d5af992ea56357f50d05a2 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 8 Oct 2024 11:21:12 +0200 Subject: [PATCH 049/171] [maven-release-plugin] prepare release jackrabbit-2.23.1-beta --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 6 +++--- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index c82908ee57a..36e3169c075 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 58ab9a284e5..023e40bdb0d 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index 8db1c255af1..db63f36211b 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index c92d0988e37..44ae59d334b 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index 67d93389994..184872aceb4 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index 71ddc4c2dd6..75d9cc2d52d 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index 5ca50204f20..3407bebfecc 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 5fe9210f413..6222700eb23 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index 4d607938135..906f2de27f4 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index 249edab9d97..5a6f43ef938 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index 76851d8ca51..a718845d206 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index 3100aeccef2..7dac390b518 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 5fd90424c40..c0d55775dc3 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.1-beta-SNAPSHOT + 2.23.1-beta pom @@ -47,7 +47,7 @@ scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git https://github.com/apache/jackrabbit/tree/${project.scm.tag} - jackrabbit-2.23.0-beta + jackrabbit-2.23.1-beta @@ -76,7 +76,7 @@ 0.0 - 1721227548 + 1728373871 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index 6ec57ac0638..557a546d4d7 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index bd6bb30b6c1..4cb10cc672e 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index 27a693440c3..21a9315b90e 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index c29b8910174..a106ab30135 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 63554a9a2c7..aefd61daf09 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index b2872b8ea63..7e6d6882106 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index c00d470277f..5eb4d43fd2d 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 30a35f1d79e..99425a5d73e 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index 57ac2122a6c..cebe1c2bf22 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index e8c4a9a62ac..528a014ca4f 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta-SNAPSHOT + 2.23.1-beta jackrabbit-parent/pom.xml From dae69e7c2444e13e93a11d384aa4c4d430373903 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 8 Oct 2024 11:21:21 +0200 Subject: [PATCH 050/171] [maven-release-plugin] prepare for next development iteration --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 4 ++-- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 24 insertions(+), 24 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index 36e3169c075..c16d7718e3a 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 023e40bdb0d..ecfaf6740a5 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index db63f36211b..2dc8d48acea 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index 44ae59d334b..db8ff449df2 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index 184872aceb4..1366162bf85 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index 75d9cc2d52d..e84ce8ce709 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index 3407bebfecc..b249bb00f91 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 6222700eb23..929f5c3aaa9 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index 906f2de27f4..715c6e7d588 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index 5a6f43ef938..a829311864f 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index a718845d206..15ca9a62f68 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index 7dac390b518..d87b86cac90 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index c0d55775dc3..0d52f3a7596 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.1-beta + 2.23.2-beta-SNAPSHOT pom @@ -76,7 +76,7 @@ 0.0 - 1728373871 + 1728379281 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index 557a546d4d7..f16b4e33442 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index 4cb10cc672e..7c7d7b86da6 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index 21a9315b90e..4f5935aeaf9 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index a106ab30135..eaa313deb1d 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index aefd61daf09..4391f69058e 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index 7e6d6882106..fa8e011c8e6 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index 5eb4d43fd2d..fe7841ee9f6 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 99425a5d73e..e0a2e6492d5 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index cebe1c2bf22..7c27ec28da3 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index 528a014ca4f..20726f32c97 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.1-beta + 2.23.2-beta-SNAPSHOT jackrabbit-parent/pom.xml From 27cb78632128593ce6cc4cdfd9736839db0ff9e3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Hoh?= Date: Thu, 14 Nov 2024 09:01:28 +0100 Subject: [PATCH 051/171] JCR-5118 Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.72.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 0d52f3a7596..0a5da7a7e74 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.70.0 + 1.72.0 1.22.21 9.4.56.v20240826 From 0a9867ebc5a346703253c23b6c0a2dc4c29c0abd Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 9 Dec 2024 13:56:41 +0100 Subject: [PATCH 052/171] JCR-5119: webapp: bump htmlunit to 4.7.0 --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index e0a2e6492d5..62b410fcc3e 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -104,7 +104,7 @@ org.htmlunit htmlunit - 4.4.0 + 4.7.0 test From 99daff23d437ee91e519ec0c31cb0b8bafb3080f Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 9 Dec 2024 15:27:24 +0100 Subject: [PATCH 053/171] JCR-5120: webapp: update tomcat dependency to 9.0.97 --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 62b410fcc3e..53a568512b6 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.95 + 9.0.97 From 71e2080f5534945bb2e5b33131e3c09d27d4ff3d Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 16 Jan 2025 09:31:11 +0100 Subject: [PATCH 054/171] JCR-5128: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.74.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 0a5da7a7e74..0eb3eb76b99 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.72.0 + 1.74.0 1.22.21 9.4.56.v20240826 From 5586c6493f791843c01b1c6a14183eddb784472b Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Fri, 7 Feb 2025 12:23:44 +0100 Subject: [PATCH 055/171] JCR-5127 Explicitly link to constants in expanded form in JCR (#221) 2.0 API Highlight where expanded form names should be used instead --- .../org/apache/jackrabbit/JcrConstants.java | 149 +++++++++--------- 1 file changed, 74 insertions(+), 75 deletions(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java index e5160ca6cd7..539705a671a 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java @@ -20,210 +20,209 @@ /** * This interface defines some of the item names that are defined in the JCR Specification 1.0, using - * the default prefixes 'jcr', 'nt' and 'mix'. + * href="https://s.apache.org/jcr-1.0-javadoc/">JCR Specification 1.0 in the qualified form, + * using the default prefixes {@code jcr}, {@code nt} and {@code mix}. *

* Please note that those prefixes can by redefined by an application using the * {@link Session#setNamespacePrefix(String, String)} method. As a result, the * constants may not refer to the respective items. *

- * On the other hand, the constants in {@link javax.jcr.nodetype.NodeType} and - * {@link javax.jcr.Property} are more complete (covering - * JCR 2.0 as well) and also - * define names using expanded form, which is immune to session local - * remappings. + * On the other hand, the constants in {@link javax.jcr.nodetype.NodeType}, + * {@link javax.jcr.Nodex}, {@link javax.jcr.Property} and {@link javax.jcr.Workspace} + * are more complete (covering JCR 2.0 + * as well) and also define names using expanded form, which is immune to session local + * remappings, so it is recommended to use those constants instead whenever possible. */ public interface JcrConstants { /** - * jcr:autoCreated + * Use {@link javax.jcr.Property#JCR_AUTOCREATED} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_AUTOCREATED = "jcr:autoCreated"; /** - * jcr:baseVersion + * Use {@link javax.jcr.Property#JCR_BASE_VERSION} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_BASEVERSION = "jcr:baseVersion"; - /** - * jcr:child - */ + public static final String JCR_CHILD = "jcr:child"; /** - * jcr:childNodeDefinition + * Use {@link javax.jcr.Node#JCR_CHILD_NODE_DEFINITION} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_CHILDNODEDEFINITION = "jcr:childNodeDefinition"; /** - * jcr:content + * Use {@link javax.jcr.Node#JCR_CONTENT} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_CONTENT = "jcr:content"; /** - * jcr:created + * Use {@link javax.jcr.Property#JCR_CREATED} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_CREATED = "jcr:created"; /** - * jcr:data + * Use {@link javax.jcr.Property#JCR_DATA} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_DATA = "jcr:data"; /** - * jcr:defaultPrimaryType + * Use {@link javax.jcr.Property#JCR_DEFAULT_PRIMARY_TYPE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_DEFAULTPRIMARYTYPE = "jcr:defaultPrimaryType"; /** - * jcr:defaultValues + * Use {@link javax.jcr.Property#JCR_DEFAULT_VALUES} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_DEFAULTVALUES = "jcr:defaultValues"; /** - * jcr:encoding + * Use {@link javax.jcr.Property#JCR_ENCODING} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_ENCODING = "jcr:encoding"; /** - * jcr:frozenMixinTypes + * Use {@link javax.jcr.Property#JCR_FROZEN_MIXIN_TYPES} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_FROZENMIXINTYPES = "jcr:frozenMixinTypes"; /** - * jcr:frozenNode + * Use {@link javax.jcr.Node#JCR_FROZEN_NODE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_FROZENNODE = "jcr:frozenNode"; /** - * jcr:frozenPrimaryType + * Use {@link javax.jcr.Property#JCR_FROZEN_PRIMARY_TYPE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_FROZENPRIMARYTYPE = "jcr:frozenPrimaryType"; /** - * jcr:frozenUuid + * Use {@link javax.jcr.Property#JCR_FROZEN_UUID} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_FROZENUUID = "jcr:frozenUuid"; /** - * jcr:hasOrderableChildNodes + * Use {@link javax.jcr.Property#JCR_HAS_ORDERABLE_CHILD_NODES} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_HASORDERABLECHILDNODES = "jcr:hasOrderableChildNodes"; /** - * jcr:isCheckedOut + * Use {@link javax.jcr.Property#JCR_IS_CHECKED_OUT} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_ISCHECKEDOUT = "jcr:isCheckedOut"; /** - * jcr:isMixin + * Use {@link javax.jcr.Property#JCR_IS_MIXIN} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_ISMIXIN = "jcr:isMixin"; /** - * jcr:language + * Use {@link javax.jcr.Property#JCR_LANGUAGE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_LANGUAGE = "jcr:language"; /** - * jcr:lastModified + * Use {@link javax.jcr.Property#JCR_LAST_MODIFIED} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_LASTMODIFIED = "jcr:lastModified"; /** - * jcr:lockIsDeep + * Use {@link javax.jcr.Property#JCR_LOCK_IS_DEEP} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_LOCKISDEEP = "jcr:lockIsDeep"; /** - * jcr:lockOwner + * Use {@link javax.jcr.Property#JCR_LOCK_OWNER} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_LOCKOWNER = "jcr:lockOwner"; /** - * jcr:mandatory + * Use {@link javax.jcr.Property#JCR_MANDATORY} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_MANDATORY = "jcr:mandatory"; /** - * jcr:mergeFailed + * Use {@link javax.jcr.Property#JCR_MERGE_FAILED} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_MERGEFAILED = "jcr:mergeFailed"; /** - * jcr:mimeType + * Use {@link javax.jcr.Property#JCR_MIME_TYPE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_MIMETYPE = "jcr:mimeType"; /** - * jcr:mixinTypes + * Use {@link javax.jcr.Property#JCR_MIXIN_TYPES} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_MIXINTYPES = "jcr:mixinTypes"; /** - * jcr:multiple + * Use {@link javax.jcr.Property#JCR_MULTIPLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_MULTIPLE = "jcr:multiple"; /** - * jcr:name + * Use {@link javax.jcr.Property#JCR_NAME} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_NAME = "jcr:name"; /** - * jcr:nodeTypeName + * Use {@link javax.jcr.Property#JCR_NODE_TYPE_NAME} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_NODETYPENAME = "jcr:nodeTypeName"; /** - * jcr:onParentVersion + * Use {@link javax.jcr.Property#JCR_ON_PARENT_VERSION} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_ONPARENTVERSION = "jcr:onParentVersion"; /** - * jcr:predecessors + * Use {@link javax.jcr.Property#JCR_PREDECESSORS} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_PREDECESSORS = "jcr:predecessors"; /** - * jcr:primaryItemName + * Use {@link javax.jcr.Property#JCR_PRIMARY_ITEM_NAME} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_PRIMARYITEMNAME = "jcr:primaryItemName"; /** - * jcr:primaryType + * Use {@link javax.jcr.Property#JCR_PRIMARY_TYPE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_PRIMARYTYPE = "jcr:primaryType"; /** - * jcr:propertyDefinition + * Use {@link javax.jcr.Node#JCR_PROPERTY_DEFINITION} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_PROPERTYDEFINITION = "jcr:propertyDefinition"; /** - * jcr:protected + * Use {@link javax.jcr.Property#JCR_PROTECTED} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_PROTECTED = "jcr:protected"; /** - * jcr:requiredPrimaryTypes + * Use {@link javax.jcr.Property#JCR_REQUIRED_PRIMARY_TYPES} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_REQUIREDPRIMARYTYPES = "jcr:requiredPrimaryTypes"; /** - * jcr:requiredType + * Use {@link javax.jcr.Property#JCR_REQUIRED_TYPE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_REQUIREDTYPE = "jcr:requiredType"; /** - * jcr:rootVersion + * Use {@link javax.jcr.Node#JCR_ROOT_VERSION} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_ROOTVERSION = "jcr:rootVersion"; /** * jcr:sameNameSiblings + * Use {@link javax.jcr.Property#JCR_SAME_NAME_SIBLINGS} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_SAMENAMESIBLINGS = "jcr:sameNameSiblings"; /** - * jcr:statement + * Use {@link javax.jcr.Property#JCR_STATEMENT} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_STATEMENT = "jcr:statement"; /** - * jcr:successors + * Use {@link javax.jcr.Property#JCR_SUCCESSORS} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_SUCCESSORS = "jcr:successors"; /** - * jcr:supertypes + * Use {@link javax.jcr.Property#JCR_SUPERTYPES} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_SUPERTYPES = "jcr:supertypes"; /** - * jcr:system + * Use {@link javax.jcr.Workspace#NAME_SYSTEM_NODE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_SYSTEM = "jcr:system"; /** - * jcr:uuid + * Use {@link javax.jcr.Property#JCR_UUID} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_UUID = "jcr:uuid"; /** - * jcr:valueConstraints + * Use {@link javax.jcr.Property#JCR_VALUE_CONSTRAINTS} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_VALUECONSTRAINTS = "jcr:valueConstraints"; /** - * jcr:versionHistory + * Use {@link javax.jcr.Property#JCR_VERSION_HISTORY} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_VERSIONHISTORY = "jcr:versionHistory"; /** - * jcr:versionLabels + * Use {@link javax.jcr.Node#JCR_VERSION_LABELS} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_VERSIONLABELS = "jcr:versionLabels"; /** - * jcr:versionStorage + * Use {@link javax.jcr.Workspace#NAME_VERSION_STORAGE_NODE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_VERSIONSTORAGE = "jcr:versionStorage"; /** - * jcr:versionableUuid + * Use {@link javax.jcr.Property#JCR_VERSIONABLE_UUID} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_VERSIONABLEUUID = "jcr:versionableUuid"; @@ -237,75 +236,75 @@ public interface JcrConstants { public static final String JCR_SCORE = "jcr:score"; /** - * mix:lockable + * Use {@link javax.jcr.nodetype.NodeType#MIX_LOCKABLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String MIX_LOCKABLE = "mix:lockable"; /** - * mix:referenceable + * Use {@link javax.jcr.nodetype.NodeType#MIX_REFERENCEABLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String MIX_REFERENCEABLE = "mix:referenceable"; /** - * mix:versionable + * Use {@link javax.jcr.nodetype.NodeType#MIX_VERSIONABLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String MIX_VERSIONABLE = "mix:versionable"; /** - * mix:shareable + * Use {@link javax.jcr.nodetype.NodeType#MIX_SHAREABLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String MIX_SHAREABLE = "mix:shareable"; /** - * nt:base + * Use {@link javax.jcr.nodetype.NodeType#NT_BASE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_BASE = "nt:base"; /** - * nt:childNodeDefinition + * Use {@link javax.jcr.nodetype.NodeType#NT_CHILD_NODE_DEFINITION} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_CHILDNODEDEFINITION = "nt:childNodeDefinition"; /** - * nt:file + * Use {@link javax.jcr.nodetype.NodeType#NT_FILE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_FILE = "nt:file"; /** - * nt:folder + * Use {@link javax.jcr.nodetype.NodeType#NT_FOLDER} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_FOLDER = "nt:folder"; /** - * nt:frozenNode + * Use {@link javax.jcr.nodetype.NodeType#NT_FROZEN_NODE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_FROZENNODE = "nt:frozenNode"; /** - * nt:hierarchyNode + * Use {@link javax.jcr.nodetype.NodeType#NT_HIERARCHY_NODE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_HIERARCHYNODE = "nt:hierarchyNode"; /** - * nt:linkedFile + * Use {@link javax.jcr.nodetype.NodeType#NT_LINKED_FILE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_LINKEDFILE = "nt:linkedFile"; /** - * nt:nodeType + * Use {@link javax.jcr.nodetype.NodeType#NT_NODE_TYPE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_NODETYPE = "nt:nodeType"; /** - * nt:propertyDefinition + * Use {@link javax.jcr.nodetype.NodeType#NT_PROPERTY_DEFINITION} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_PROPERTYDEFINITION = "nt:propertyDefinition"; /** - * nt:query + * Use {@link javax.jcr.nodetype.NodeType#NT_QUERY} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_QUERY = "nt:query"; /** - * nt:resource + * Use {@link javax.jcr.nodetype.NodeType#NT_RESOURCE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_RESOURCE = "nt:resource"; /** - * nt:unstructured + * Use {@link javax.jcr.nodetype.NodeType#NT_UNSTRUCTURED} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_UNSTRUCTURED = "nt:unstructured"; /** - * nt:version + * Use {@link javax.jcr.nodetype.NodeType#NT_VERSION} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_VERSION = "nt:version"; /** - * nt:versionHistory + * Use {@link javax.jcr.nodetype.NodeType#NT_VERSION_HISTORY} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_VERSIONHISTORY = "nt:versionHistory"; /** @@ -313,7 +312,7 @@ public interface JcrConstants { */ public static final String NT_VERSIONLABELS = "nt:versionLabels"; /** - * nt:versionedChild + * Use {@link javax.jcr.nodetype.NodeType#NT_VERSIONED_CHILD} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String NT_VERSIONEDCHILD = "nt:versionedChild"; } From 9f5e1c720cbd15e9bc871946a728b31a0c526fed Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 13 Feb 2025 07:58:49 +0100 Subject: [PATCH 056/171] JCR-5130: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.76.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 0eb3eb76b99..106753c1945 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.74.0 + 1.76.0 1.22.21 9.4.56.v20240826 From 04375445a8eb57f8e0daacdc359f6c23742cac43 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 17 Mar 2025 09:45:24 +0100 Subject: [PATCH 057/171] =?UTF-8?q?JCR-5121:=20Java=2023:=20getSubject=20i?= =?UTF-8?q?s=20supported=20only=20if=20a=20security=20manager=E2=80=A6=20(?= =?UTF-8?q?#222)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * JCR-5121: Java 23: getSubject is supported only if a security manager is allowed - borrowed fix from OAK-11199 * JCR-5121: Java 23: getSubject is supported only if a security manager is allowed - borrowed fix from OAK-11199 * JCR-5121: Java 23: getSubject is supported only if a security manager is allowed - borrowed fix from OAK-11199 - remove unused 'callAs' --- .../jackrabbit/core/RepositoryImpl.java | 6 +- .../core/jdkcompat/Java23Subject.java | 58 +++++++++++++++++++ 2 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jdkcompat/Java23Subject.java diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java index ce105bb7656..95e94d8f7e4 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/RepositoryImpl.java @@ -22,8 +22,6 @@ import java.io.OutputStream; import java.io.StringReader; import java.nio.charset.StandardCharsets; -import java.security.AccessControlContext; -import java.security.AccessController; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -80,6 +78,7 @@ import org.apache.jackrabbit.core.gc.GarbageCollector; import org.apache.jackrabbit.core.id.NodeId; import org.apache.jackrabbit.core.id.NodeIdFactory; +import org.apache.jackrabbit.core.jdkcompat.Java23Subject; import org.apache.jackrabbit.core.lock.LockManager; import org.apache.jackrabbit.core.lock.LockManagerImpl; import org.apache.jackrabbit.core.nodetype.NodeTypeRegistry; @@ -1025,8 +1024,7 @@ private Session extendAuthentication(String workspaceName) Subject subject = null; try { - AccessControlContext acc = AccessController.getContext(); - subject = Subject.getSubject(acc); + subject = Java23Subject.getSubject(); } catch (SecurityException e) { log.warn("Can't check for preauthentication. Reason: {}", e.getMessage()); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jdkcompat/Java23Subject.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jdkcompat/Java23Subject.java new file mode 100644 index 00000000000..95ea967ee8d --- /dev/null +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jdkcompat/Java23Subject.java @@ -0,0 +1,58 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.core.jdkcompat; + +import javax.security.auth.Subject; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.security.AccessControlContext; +import java.security.AccessController; +import java.util.concurrent.Callable; + +/** + * This class contains methods replacing the deprecated + * {@link Subject#getSubject(AccessControlContext)} + * and associated methods, which changed their behavior + * with Java 23 (@see https://inside.java/2024/07/08/quality-heads-up). + *

+ * Subset borrowed from org.apache.jackrabbit.oak.commons.jdkcompat + * (see JCR-5121 and OAK-11199). + */ +public class Java23Subject { + + static Method current; + + static { + try { + current = Subject.class.getMethod("current"); + } catch (NoSuchMethodException ignored) {} + } + + public static Subject getSubject() { + Subject result; + if (current != null) { + try { + result = (Subject) current.invoke(null); + } catch (InvocationTargetException | IllegalAccessException e) { + throw new SecurityException(e); + } + } else { + result = Subject.getSubject(AccessController.getContext()); + } + return result; + } +} From 41ec359c6275ec82660f810a16bd0096f5730815 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 17 Mar 2025 10:10:39 +0100 Subject: [PATCH 058/171] JCR-5127: Explicitly link to constants in expanded form in JCR (fix Javadoc) --- .../src/main/java/org/apache/jackrabbit/JcrConstants.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java index 539705a671a..2cd9696f8d7 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java @@ -28,7 +28,7 @@ * constants may not refer to the respective items. *

* On the other hand, the constants in {@link javax.jcr.nodetype.NodeType}, - * {@link javax.jcr.Nodex}, {@link javax.jcr.Property} and {@link javax.jcr.Workspace} + * {@link javax.jcr.Node}, {@link javax.jcr.Property} and {@link javax.jcr.Workspace} * are more complete (covering JCR 2.0 * as well) and also define names using expanded form, which is immune to session local * remappings, so it is recommended to use those constants instead whenever possible. @@ -125,7 +125,7 @@ public interface JcrConstants { */ public static final String JCR_MERGEFAILED = "jcr:mergeFailed"; /** - * Use {@link javax.jcr.Property#JCR_MIME_TYPE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). + * Use {@link javax.jcr.Property#JCR_MIMETYPE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_MIMETYPE = "jcr:mimeType"; /** From 9618754162926633e5f3281fe23033a6f00bab33 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 19 Mar 2025 15:30:55 +0100 Subject: [PATCH 059/171] JCR-5132: webapp: update tomcat dependency to 9.0.102 (#223) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 53a568512b6..cc4d74c80e7 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.97 + 9.0.102 From 8dbb48263222da3a19e0a1a9ff10141e4eddb9da Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 19 Mar 2025 15:59:56 +0100 Subject: [PATCH 060/171] JCR-5131: jackrabbit-jcr2spi: switch to commons-collections4 4.5.0-M3 (#224) --- .../jackrabbit/jcr2spi/hierarchy/LinkedEntries.java | 8 ++++---- jackrabbit-parent/pom.xml | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/LinkedEntries.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/LinkedEntries.java index e8e877d45d8..1c4a5b957b2 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/LinkedEntries.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/hierarchy/LinkedEntries.java @@ -22,7 +22,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; -import org.apache.commons.collections4.list.AbstractLinkedListForJava21; +import org.apache.commons.collections4.list.AbstractLinkedListJava21; import org.apache.jackrabbit.spi.Name; import org.apache.jackrabbit.spi.Path; @@ -31,7 +31,7 @@ * LinkNode which links the entries of the list. */ @SuppressWarnings("rawtypes") -class LinkedEntries extends AbstractLinkedListForJava21 { +class LinkedEntries extends AbstractLinkedListJava21 { private Node header; private volatile int modCount; @@ -166,7 +166,7 @@ void reorderNode(LinkedEntries.LinkNode insert, LinkedEntries.LinkNode before) { * * @param value a child node entry. * @return a wrapping {@link LinkedEntries.LinkNode}. - * @see CopyOfAbstractLinkedList#createNode(Object) + * @see AbstractLinkedListJava21#createNode(Object) */ @Override protected Node createNode(Object value) { @@ -175,7 +175,7 @@ protected Node createNode(Object value) { /** * @return a new LinkNode. - * @see CopyOfAbstractLinkedList#createHeaderNode() + * @see AbstractLinkedListJava21#createHeaderNode() */ @Override protected Node createHeaderNode() { diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 106753c1945..b852750350d 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -450,7 +450,7 @@ org.apache.commons commons-collections4 - 4.5.0-M2 + 4.5.0-M3 commons-io From e97e1ebacac1c92bab9f62195e6949e80a081fee Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 19 Mar 2025 16:02:22 +0100 Subject: [PATCH 061/171] JCR-5133: Update easymock dependency to 5.5.0 (#225) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index b852750350d..1702a1a914b 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -612,7 +612,7 @@ org.easymock easymock - 5.4.0 + 5.5.0 junit From 5de89ffb061a60f60c561fb785dcad06c1d6379a Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 27 Mar 2025 11:06:47 +0100 Subject: [PATCH 062/171] JCR-5133: Update easymock dependency to 5.5.0 (#228) From 0f409c159310380f01057102962b8eae0d446dfc Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 27 Mar 2025 11:11:59 +0100 Subject: [PATCH 063/171] JCR-5134: Update oak-jackrabbit-api.version.used to Oak 1.22.22 (#227) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 1702a1a914b..b4ec6ece57f 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -57,7 +57,7 @@ 1.76.0 - 1.22.21 + 1.22.22 9.4.56.v20240826 2.4.1 ${project.build.sourceEncoding} From 5fb875247f2c859ca72114c0ecd22a70192045a3 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 3 Apr 2025 16:02:34 +0200 Subject: [PATCH 064/171] JCR-5138: Borrow JackrabbitSessionImpl tests from Oak (#232) --- .../jackrabbit/api/JackrabbitSessionTest.java | 83 +++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 jackrabbit-core/src/test/java/org/apache/jackrabbit/api/JackrabbitSessionTest.java diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/JackrabbitSessionTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/JackrabbitSessionTest.java new file mode 100644 index 00000000000..f1a36298b72 --- /dev/null +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/JackrabbitSessionTest.java @@ -0,0 +1,83 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.api; + +import org.apache.jackrabbit.test.AbstractJCRTest; +import org.apache.jackrabbit.test.NotExecutableException; +import org.junit.Ignore; + +import javax.jcr.GuestCredentials; +import javax.jcr.Item; +import javax.jcr.Node; +import javax.jcr.Property; +import javax.jcr.RepositoryException; + +import static org.mockito.Mockito.mock; + +public class JackrabbitSessionTest extends AbstractJCRTest { + + private JackrabbitSession s; + + @Override + protected void setUp() throws Exception { + super.setUp(); + if (superuser instanceof JackrabbitSession) { + s = (JackrabbitSession) superuser; + } else { + throw new NotExecutableException("JackrabbitSession expected"); + } + } + + public void testGetParentOrNullRootNode() throws Exception { + assertNull(s.getParentOrNull(s.getRootNode())); + } + + public void testGetParentOrNull() throws Exception { + Node n = s.getNode(testRoot); + assertEquivalentNode(n, s.getParentOrNull(n.getProperty(Property.JCR_PRIMARY_TYPE))); + assertEquivalentNode(n.getParent(), s.getParentOrNull(n)); + } + + private static void assertEquivalentNode(Node expected, Node result) throws Exception { + assertNotNull(result); + assertEquals(expected.getPath(), result.getPath()); + } + + // @Ignore("Jackrabbit does not check cross-Session request") + public void ignoreTestGetParentOrNullSessionMismatch() throws Exception { + JackrabbitSession guest = (JackrabbitSession) getHelper().getRepository().login(new GuestCredentials()); + try { + guest.getParentOrNull(s.getNode(testRoot)); + fail("RepositoryException expected"); + } catch (RepositoryException e) { + // success + } finally { + guest.logout(); + } + } + + // @Ignore("Jackrabbit does not verify that the Item was obtained from Jackrabbit") + public void ignoreTestGetParentOrNullImplMismatch() { + try { + Item item = mock(Item.class); + s.getParentOrNull(item); + fail("RepositoryException expected"); + } catch (RepositoryException e) { + // success + } + } +} \ No newline at end of file From 7a319093c9864111bb86c9895148e580e0f8259a Mon Sep 17 00:00:00 2001 From: mbaedke Date: Tue, 8 Apr 2025 14:58:46 +0200 Subject: [PATCH 065/171] JCR-5135: Make JNDI support opt-in (#229) Done. --- .../jackrabbit/core/jndi/RegistryHelper.java | 44 +++++++++------- .../RepositoryFactoryImplTest.java | 19 +++++-- .../commons/JndiRepositoryFactory.java | 46 +++++++++------- .../jackrabbit/commons/package-info.java | 2 +- .../commons/repository/JNDIRepository.java | 5 +- .../repository/JNDIRepositoryFactory.java | 41 +++++++++------ .../jackrabbit/commons/JcrUtilsTest.java | 52 +++++++++++++++---- 7 files changed, 140 insertions(+), 69 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/RegistryHelper.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/RegistryHelper.java index 5a8e406ce17..6784a70e2a1 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/RegistryHelper.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/jndi/RegistryHelper.java @@ -25,6 +25,8 @@ import org.apache.jackrabbit.api.JackrabbitRepository; +import static org.apache.jackrabbit.commons.JndiRepositoryFactory.JNDI_ENABLED; + /** * JNDI helper functionality. This class contains static utility * methods for binding and unbinding Jackrabbit repositories to and @@ -59,24 +61,28 @@ public static void registerRepository(Context ctx, String name, String repHomeDir, boolean overwrite) throws NamingException, RepositoryException { - Reference reference = new Reference( - Repository.class.getName(), - BindableRepositoryFactory.class.getName(), - null); // no classpath defined - reference.add(new StringRefAddr( - BindableRepository.CONFIGFILEPATH_ADDRTYPE, configFilePath)); - reference.add(new StringRefAddr( - BindableRepository.REPHOMEDIR_ADDRTYPE, repHomeDir)); + if (JNDI_ENABLED) { + Reference reference = new Reference( + Repository.class.getName(), + BindableRepositoryFactory.class.getName(), + null); // no classpath defined + reference.add(new StringRefAddr( + BindableRepository.CONFIGFILEPATH_ADDRTYPE, configFilePath)); + reference.add(new StringRefAddr( + BindableRepository.REPHOMEDIR_ADDRTYPE, repHomeDir)); - // always create instance by using BindableRepositoryFactory - // which maintains an instance cache; - // see http://issues.apache.org/jira/browse/JCR-411 for details - Object obj = new BindableRepositoryFactory().getObjectInstance( - reference, null, null, null); - if (overwrite) { - ctx.rebind(name, obj); + // always create instance by using BindableRepositoryFactory + // which maintains an instance cache; + // see http://issues.apache.org/jira/browse/JCR-411 for details + Object obj = new BindableRepositoryFactory().getObjectInstance( + reference, null, null, null); + if (overwrite) { + ctx.rebind(name, obj); + } else { + ctx.bind(name, obj); + } } else { - ctx.bind(name, obj); + throw new RepositoryException("JNDI is not enabled"); } } @@ -91,8 +97,10 @@ public static void registerRepository(Context ctx, String name, */ public static void unregisterRepository(Context ctx, String name) throws NamingException { - ((JackrabbitRepository) ctx.lookup(name)).shutdown(); - ctx.unbind(name); + if (JNDI_ENABLED) { + ((JackrabbitRepository) ctx.lookup(name)).shutdown(); + ctx.unbind(name); + } } } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/RepositoryFactoryImplTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/RepositoryFactoryImplTest.java index 3d87ecd573e..ebc88392746 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/RepositoryFactoryImplTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/RepositoryFactoryImplTest.java @@ -27,6 +27,7 @@ import javax.naming.Context; import javax.jcr.RepositoryFactory; + import org.apache.jackrabbit.api.JackrabbitRepository; import org.apache.jackrabbit.commons.JcrUtils; import org.apache.jackrabbit.commons.JndiRepositoryFactory; @@ -135,12 +136,22 @@ public void testJNDI() throws Exception { parameters.put(Context.INITIAL_CONTEXT_FACTORY, DummyInitialContextFactory.class.getName()); parameters.put(Context.PROVIDER_URL, "localhost"); InitialContext context = new InitialContext(new Hashtable(parameters)); - RegistryHelper.registerRepository(context, name, - REPO_CONF.getAbsolutePath(), REPO_HOME.getAbsolutePath(), false); + try { + RegistryHelper.registerRepository(context, name, + REPO_CONF.getAbsolutePath(), REPO_HOME.getAbsolutePath(), false); + } catch (RepositoryException expected) {} try { parameters.put(JndiRepositoryFactory.JNDI_NAME, name); - repo = JcrUtils.getRepository(parameters); - checkRepository(repo); + try { + repo = JcrUtils.getRepository(parameters); + } catch (RepositoryException e) { + if (JndiRepositoryFactory.JNDI_ENABLED) { + fail("JNDI repository missing: " + e.getMessage()); + } + } + if (repo != null) { + checkRepository(repo); + } } finally { RegistryHelper.unregisterRepository(context, name); } diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JndiRepositoryFactory.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JndiRepositoryFactory.java index 92274df6f3f..83eca3032f7 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JndiRepositoryFactory.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/JndiRepositoryFactory.java @@ -56,6 +56,11 @@ @SuppressWarnings({ "rawtypes", "unchecked" }) public class JndiRepositoryFactory implements RepositoryFactory { + /** + * Disabled by default, see JCR-5135 + */ + public static final boolean JNDI_ENABLED = Boolean.getBoolean("jackrabbit.jndi.enabled"); + /** * The JNDI name parameter name. */ @@ -64,29 +69,32 @@ public class JndiRepositoryFactory implements RepositoryFactory { public Repository getRepository(Map parameters) throws RepositoryException { - if (parameters == null) { - return null; // no default JNDI repository - } else { - Hashtable environment = new Hashtable(parameters); - if (environment.containsKey(JNDI_NAME)) { - String name = environment.remove(JNDI_NAME).toString(); - return getRepository(name, environment); - } else if (environment.containsKey(JcrUtils.REPOSITORY_URI)) { - Object parameter = environment.remove(JcrUtils.REPOSITORY_URI); - try { - URI uri = new URI(parameter.toString().trim()); - if ("jndi".equalsIgnoreCase(uri.getScheme())) { - return getRepository(uri, environment); - } else { - return null; // not a jndi: URI + if (JNDI_ENABLED) { + if (parameters == null) { + return null; // no default JNDI repository + } else { + Hashtable environment = new Hashtable(parameters); + if (environment.containsKey(JNDI_NAME)) { + String name = environment.remove(JNDI_NAME).toString(); + return getRepository(name, environment); + } else if (environment.containsKey(JcrUtils.REPOSITORY_URI)) { + Object parameter = environment.remove(JcrUtils.REPOSITORY_URI); + try { + URI uri = new URI(parameter.toString().trim()); + if ("jndi".equalsIgnoreCase(uri.getScheme())) { + return getRepository(uri, environment); + } else { + return null; // not a jndi: URI + } + } catch (URISyntaxException e) { + return null; // not a valid URI } - } catch (URISyntaxException e) { - return null; // not a valid URI + } else { + return null; // unknown parameters } - } else { - return null; // unknown parameters } } + return null; } private Repository getRepository(URI uri, Hashtable environment) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/package-info.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/package-info.java index 42b3b486607..7eb2a8d1414 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/package-info.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/package-info.java @@ -14,5 +14,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@org.osgi.annotation.versioning.Version("2.4.0") +@org.osgi.annotation.versioning.Version("2.5.0") package org.apache.jackrabbit.commons; diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepository.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepository.java index c8eff32952b..ffd94138f6c 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepository.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepository.java @@ -24,9 +24,13 @@ * does not need to exist when this class is instantiated. The JNDI entry * can also be replaced with another repository during the lifetime of an * instance of this class. + *

+ * This class is deprecated and will be removed in future releases. * * @since 1.4 + * @deprecated use {@link ProxyRepository} instead */ +@Deprecated(forRemoval = true) public class JNDIRepository extends ProxyRepository { /** @@ -38,5 +42,4 @@ public class JNDIRepository extends ProxyRepository { public JNDIRepository(Context context, String name) { super(new JNDIRepositoryFactory(context, name)); } - } diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepositoryFactory.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepositoryFactory.java index 15646532644..c211c44444f 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepositoryFactory.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/repository/JNDIRepositoryFactory.java @@ -21,11 +21,17 @@ import javax.naming.Context; import javax.naming.NamingException; +import static org.apache.jackrabbit.commons.JndiRepositoryFactory.JNDI_ENABLED; + /** * Factory that looks up a repository from JNDI. + *

+ * This class is deprecated and will be removed in future releases. * * @since 1.4 + * @deprecated use {@link org.apache.jackrabbit.commons.JndiRepositoryFactory} instead */ +@Deprecated(forRemoval = true) public class JNDIRepositoryFactory implements RepositoryFactory { /** @@ -56,25 +62,28 @@ public JNDIRepositoryFactory(Context context, String name) { * @throws RepositoryException if the repository can not be found */ public Repository getRepository() throws RepositoryException { - try { - Object repository = context.lookup(name); - if (repository instanceof Repository) { - return (Repository) repository; - } else if (repository == null) { - throw new RepositoryException( - "Repository not found: The JNDI entry " - + name + " is null"); - } else { + if (JNDI_ENABLED) { + try { + Object repository = context.lookup(name); + if (repository instanceof Repository) { + return (Repository) repository; + } else if (repository == null) { + throw new RepositoryException( + "Repository not found: The JNDI entry " + + name + " is null"); + } else { + throw new RepositoryException( + "Invalid repository: The JNDI entry " + + name + " is an instance of " + + repository.getClass().getName()); + } + } catch (NamingException e) { throw new RepositoryException( - "Invalid repository: The JNDI entry " - + name + " is an instance of " - + repository.getClass().getName()); + "Repository not found: The JNDI entry " + name + + " could not be looked up", e); } - } catch (NamingException e) { - throw new RepositoryException( - "Repository not found: The JNDI entry " + name - + " could not be looked up", e); } + return null; } } diff --git a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/JcrUtilsTest.java b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/JcrUtilsTest.java index a6a867112be..e44224ee333 100644 --- a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/JcrUtilsTest.java +++ b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/JcrUtilsTest.java @@ -51,20 +51,52 @@ public void testGetRepository() throws Exception { "java.naming.factory.initial", "org.osjava.sj.memory.MemoryContextFactory"); parameters.put("org.osjava.sj.jndi.shared", "true"); - assertTrue(repository == JcrUtils.getRepository(parameters)); + + // JDNI ist disabled by default + if (JndiRepositoryFactory.JNDI_ENABLED) { + assertTrue(repository == JcrUtils.getRepository(parameters)); + } else { + try { + JcrUtils.getRepository(parameters); + fail("Repository lookup should fail and throw an exception"); + } catch (RepositoryException expected) {} + } // Test lookup with URI query parameters - assertTrue(repository == JcrUtils.getRepository( - "jndi://x" - + "?org.apache.jackrabbit.repository.jndi.name=repository" - + "&org.osjava.sj.jndi.shared=true" - + "&java.naming.factory.initial" - + "=org.osjava.sj.memory.MemoryContextFactory")); + // JDNI ist disabled by default + if (JndiRepositoryFactory.JNDI_ENABLED) { + assertTrue(repository == JcrUtils.getRepository( + "jndi://x" + + "?org.apache.jackrabbit.repository.jndi.name=repository" + + "&org.osjava.sj.jndi.shared=true" + + "&java.naming.factory.initial" + + "=org.osjava.sj.memory.MemoryContextFactory")); + } else { + try { + JcrUtils.getRepository( + "jndi://x" + + "?org.apache.jackrabbit.repository.jndi.name=repository" + + "&org.osjava.sj.jndi.shared=true" + + "&java.naming.factory.initial" + + "=org.osjava.sj.memory.MemoryContextFactory"); + fail("Repository lookup should fail and throw an exception"); + } catch (RepositoryException expected) {} + } // Test lookup with the custom JNDI URI format (JCR-2771) - assertTrue(repository == JcrUtils.getRepository( - "jndi://org.osjava.sj.memory.MemoryContextFactory/repository" - + "?org.osjava.sj.jndi.shared=true")); + // JDNI ist disabled by default + if (JndiRepositoryFactory.JNDI_ENABLED) { + assertTrue(repository == JcrUtils.getRepository( + "jndi://org.osjava.sj.memory.MemoryContextFactory/repository" + + "?org.osjava.sj.jndi.shared=true")); + } else { + try { + JcrUtils.getRepository( + "jndi://org.osjava.sj.memory.MemoryContextFactory/repository" + + "?org.osjava.sj.jndi.shared=true"); + fail("Repository lookup should fail and throw an exception"); + } catch (RepositoryException expected) {} + } try { JcrUtils.getRepository( From 728a437eba1b26e719e96509979bb27c46b914c5 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 8 May 2025 07:30:20 +0200 Subject: [PATCH 066/171] JCR-5143: Update Mockito dependency to 5.17.0 (#237) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index b4ec6ece57f..4ffadde9aff 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -622,7 +622,7 @@ org.mockito mockito-core - 5.14.1 + 5.17.0 From d3916361a491545b2759db3c4c4872dec2ac39e0 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 8 May 2025 07:41:54 +0100 Subject: [PATCH 067/171] JCR-5132: webapp: update tomcat dependency to 9.0.104 --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index cc4d74c80e7..6dd596935aa 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.102 + 9.0.104 From 1d2c61bf2b874985c983fd1c85b4a072d06725d7 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 8 May 2025 11:25:07 +0200 Subject: [PATCH 068/171] JCR-5144: Update to jacoco version 0.8.13 (#238) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 4ffadde9aff..69806585d64 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -260,7 +260,7 @@ org.jacoco jacoco-maven-plugin - 0.8.12 + 0.8.13 pre-unit-test From 2561ec4ff49512ab6ec597e199046fa7c58f146a Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 8 May 2025 11:35:30 +0200 Subject: [PATCH 069/171] JCR-5145: Upgrade Commons VFS to 2.10.0 (#240) --- jackrabbit-vfs-ext/pom.xml | 47 +++---------------- .../vfs/ext/ds/TestVFSDataStore.java | 6 ++- 2 files changed, 11 insertions(+), 42 deletions(-) diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index fe7841ee9f6..418d84b9e9d 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -44,57 +44,22 @@ org.apache.commons commons-vfs2 - 2.9.0 + 2.10.0 - commons-logging - commons-logging - - - - org.apache.hadoop - hadoop-hdfs-client - - - - - - org.apache.hadoop - hadoop-hdfs-client - 3.4.0 - - - org.jetbrains.kotlin - kotlin-stdlib-common + commons-io + commons-io - - - org.jetbrains.kotlin - kotlin-stdlib - 1.9.25 - org.apache.commons commons-vfs2-jackrabbit2 - 2.9.0 + 2.10.0 - commons-logging - commons-logging - - - org.apache.httpcomponents - httpclient - - - org.apache.jackrabbit - jackrabbit-webdav - - - org.apache.jackrabbit - jackrabbit-standalone-components + commons-io + commons-io diff --git a/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java b/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java index 869223a31f8..43736aaba2f 100644 --- a/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java +++ b/jackrabbit-vfs-ext/src/test/java/org/apache/jackrabbit/vfs/ext/ds/TestVFSDataStore.java @@ -190,7 +190,11 @@ protected void doSetFileSystemOptionsPropertiesInString() throws Exception { File [] identities = configBuilder.getIdentities(fso); Assert.assertNotNull(identities); Assert.assertEquals(1, identities.length); - Assert.assertEquals("/home/tester/.ssh/id_rsa", FilenameUtils.separatorsToUnix(identities[0].getPath())); + String expectedPath = identities[0].getPath(); + if (FilenameUtils.getPrefixLength(expectedPath) != 0) { + expectedPath = expectedPath.substring(FilenameUtils.getPrefixLength(expectedPath) - 1); + } + Assert.assertEquals("/home/tester/.ssh/id_rsa", FilenameUtils.separatorsToUnix(expectedPath)); Assert.assertEquals(Integer.valueOf(30000), configBuilder.getTimeout(fso)); dataStore.close(); From da98d40a73f7bfd629975c9e8bafac8f2c0e9764 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 8 May 2025 12:10:37 +0200 Subject: [PATCH 070/171] JCR-5147: remove jackrabbit 1.x performance tests (#241) --- test/performance/jackrabbit10/pom.xml | 62 ------------------- .../performance/PerformanceTest.java | 28 --------- test/performance/jackrabbit11/pom.xml | 62 ------------------- .../performance/PerformanceTest.java | 28 --------- test/performance/jackrabbit12/pom.xml | 58 ----------------- .../performance/PerformanceTest.java | 28 --------- test/performance/jackrabbit13/pom.xml | 52 ---------------- .../performance/PerformanceTest.java | 28 --------- test/performance/jackrabbit14/pom.xml | 52 ---------------- .../performance/PerformanceTest.java | 28 --------- test/performance/jackrabbit15/pom.xml | 52 ---------------- .../performance/PerformanceTest.java | 28 --------- test/performance/jackrabbit16/pom.xml | 52 ---------------- .../performance/PerformanceTest.java | 28 --------- test/performance/pom.xml | 7 --- 15 files changed, 593 deletions(-) delete mode 100644 test/performance/jackrabbit10/pom.xml delete mode 100644 test/performance/jackrabbit10/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java delete mode 100644 test/performance/jackrabbit11/pom.xml delete mode 100644 test/performance/jackrabbit11/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java delete mode 100644 test/performance/jackrabbit12/pom.xml delete mode 100644 test/performance/jackrabbit12/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java delete mode 100644 test/performance/jackrabbit13/pom.xml delete mode 100644 test/performance/jackrabbit13/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java delete mode 100644 test/performance/jackrabbit14/pom.xml delete mode 100644 test/performance/jackrabbit14/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java delete mode 100644 test/performance/jackrabbit15/pom.xml delete mode 100644 test/performance/jackrabbit15/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java delete mode 100644 test/performance/jackrabbit16/pom.xml delete mode 100644 test/performance/jackrabbit16/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java diff --git a/test/performance/jackrabbit10/pom.xml b/test/performance/jackrabbit10/pom.xml deleted file mode 100644 index e30a5c818ef..00000000000 --- a/test/performance/jackrabbit10/pom.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-perf-parent - 1-SNAPSHOT - ../parent/pom.xml - - - jackrabbit-perf-jackrabbit10 - Jackrabbit 1.0 Performance Test - - - - org.apache.jackrabbit - jackrabbit-perf-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.0 - test - - - jsr170 - jcr - - - org.slf4j - slf4j-log4j12 - - - - - - - diff --git a/test/performance/jackrabbit10/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java b/test/performance/jackrabbit10/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java deleted file mode 100644 index 861fe48e062..00000000000 --- a/test/performance/jackrabbit10/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.performance; - -import org.testng.annotations.Test; - -public class PerformanceTest extends AbstractPerformanceTest { - - @Test - public void testPerformance() throws Exception { - testPerformance("1.0"); - } - -} diff --git a/test/performance/jackrabbit11/pom.xml b/test/performance/jackrabbit11/pom.xml deleted file mode 100644 index d0c3c5d2d8f..00000000000 --- a/test/performance/jackrabbit11/pom.xml +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-perf-parent - 1-SNAPSHOT - ../parent/pom.xml - - - jackrabbit-perf-jackrabbit11 - Jackrabbit 1.1 Performance Test - - - - org.apache.jackrabbit - jackrabbit-perf-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.1 - test - - - jsr170 - jcr - - - org.slf4j - slf4j-log4j12 - - - - - - - diff --git a/test/performance/jackrabbit11/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java b/test/performance/jackrabbit11/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java deleted file mode 100644 index 11a7ccebb50..00000000000 --- a/test/performance/jackrabbit11/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.performance; - -import org.testng.annotations.Test; - -public class PerformanceTest extends AbstractPerformanceTest { - - @Test - public void testPerformance() throws Exception { - testPerformance("1.1"); - } - -} diff --git a/test/performance/jackrabbit12/pom.xml b/test/performance/jackrabbit12/pom.xml deleted file mode 100644 index 9ff4fab9700..00000000000 --- a/test/performance/jackrabbit12/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-perf-parent - 1-SNAPSHOT - ../parent/pom.xml - - - jackrabbit-perf-jackrabbit12 - Jackrabbit 1.2 Performance Test - - - - org.apache.jackrabbit - jackrabbit-perf-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.2.1 - test - - - org.slf4j - slf4j-log4j12 - - - - - - - diff --git a/test/performance/jackrabbit12/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java b/test/performance/jackrabbit12/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java deleted file mode 100644 index 76266ef8dd2..00000000000 --- a/test/performance/jackrabbit12/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.performance; - -import org.testng.annotations.Test; - -public class PerformanceTest extends AbstractPerformanceTest { - - @Test - public void testPerformance() throws Exception { - testPerformance("1.2"); - } - -} diff --git a/test/performance/jackrabbit13/pom.xml b/test/performance/jackrabbit13/pom.xml deleted file mode 100644 index 90b5dec10ea..00000000000 --- a/test/performance/jackrabbit13/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-perf-parent - 1-SNAPSHOT - ../parent/pom.xml - - - jackrabbit-perf-jackrabbit13 - Jackrabbit 1.3 Performance Test - - - - org.apache.jackrabbit - jackrabbit-perf-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.3 - test - - - - - diff --git a/test/performance/jackrabbit13/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java b/test/performance/jackrabbit13/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java deleted file mode 100644 index fc4df262cac..00000000000 --- a/test/performance/jackrabbit13/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.performance; - -import org.testng.annotations.Test; - -public class PerformanceTest extends AbstractPerformanceTest { - - @Test - public void testPerformance() throws Exception { - testPerformance("1.3"); - } - -} diff --git a/test/performance/jackrabbit14/pom.xml b/test/performance/jackrabbit14/pom.xml deleted file mode 100644 index b28716fc3a6..00000000000 --- a/test/performance/jackrabbit14/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-perf-parent - 1-SNAPSHOT - ../parent/pom.xml - - - jackrabbit-perf-jackrabbit14 - Jackrabbit 1.4 Performance Test - - - - org.apache.jackrabbit - jackrabbit-perf-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.4 - test - - - - - diff --git a/test/performance/jackrabbit14/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java b/test/performance/jackrabbit14/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java deleted file mode 100644 index ce7d671bc76..00000000000 --- a/test/performance/jackrabbit14/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.performance; - -import org.testng.annotations.Test; - -public class PerformanceTest extends AbstractPerformanceTest { - - @Test - public void testPerformance() throws Exception { - testPerformance("1.4"); - } - -} diff --git a/test/performance/jackrabbit15/pom.xml b/test/performance/jackrabbit15/pom.xml deleted file mode 100644 index 449540d756d..00000000000 --- a/test/performance/jackrabbit15/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-perf-parent - 1-SNAPSHOT - ../parent/pom.xml - - - jackrabbit-perf-jackrabbit15 - Jackrabbit 1.5 Performance Test - - - - org.apache.jackrabbit - jackrabbit-perf-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.5.0 - test - - - - - diff --git a/test/performance/jackrabbit15/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java b/test/performance/jackrabbit15/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java deleted file mode 100644 index 6772594f499..00000000000 --- a/test/performance/jackrabbit15/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.performance; - -import org.testng.annotations.Test; - -public class PerformanceTest extends AbstractPerformanceTest { - - @Test - public void testPerformance() throws Exception { - testPerformance("1.5"); - } - -} diff --git a/test/performance/jackrabbit16/pom.xml b/test/performance/jackrabbit16/pom.xml deleted file mode 100644 index a3a3ad4f086..00000000000 --- a/test/performance/jackrabbit16/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-perf-parent - 1-SNAPSHOT - ../parent/pom.xml - - - jackrabbit-perf-jackrabbit16 - Jackrabbit 1.6 Performance Test - - - - org.apache.jackrabbit - jackrabbit-perf-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.6.0 - test - - - - - diff --git a/test/performance/jackrabbit16/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java b/test/performance/jackrabbit16/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java deleted file mode 100644 index ecd3a86e52c..00000000000 --- a/test/performance/jackrabbit16/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.performance; - -import org.testng.annotations.Test; - -public class PerformanceTest extends AbstractPerformanceTest { - - @Test - public void testPerformance() throws Exception { - testPerformance("1.6"); - } - -} diff --git a/test/performance/pom.xml b/test/performance/pom.xml index 4a0330d27e2..177e9159ec3 100644 --- a/test/performance/pom.xml +++ b/test/performance/pom.xml @@ -41,13 +41,6 @@ parent base - jackrabbit20 jackrabbit21 jackrabbit22 From 3c4d0ff7bdb6517b2cb4f84fac77894cd95cf611 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Tue, 20 May 2025 17:16:34 +0200 Subject: [PATCH 071/171] JCR-5146 Add mixin constants (#239) --- .../org/apache/jackrabbit/JcrConstants.java | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java index 2cd9696f8d7..df1afbabf66 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java @@ -235,14 +235,38 @@ public interface JcrConstants { */ public static final String JCR_SCORE = "jcr:score"; + /** + * Use {@link javax.jcr.nodetype.NodeType#MIX_CREATED} whenever expanded JCR names are supported (e.g. in JCR API method parameters). + */ + public static final String MIX_CREATED = "mix:created"; + /** + * Use {@link javax.jcr.nodetype.NodeType#MIX_LANGUAGE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). + */ + public static final String MIX_LANGUAGE = "mix:language"; + /** + * Use {@link javax.jcr.nodetype.NodeType#MIX_LAST_MODIFIED} whenever expanded JCR names are supported (e.g. in JCR API method parameters). + */ + public static final String MIX_LAST_MODIFIED = "mix:lastModified"; + /** + * Use {@link javax.jcr.nodetype.NodeType#MIX_LIFECYCLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). + */ + public static final String MIX_LIFECYCLE = "mix:lifecycle"; /** * Use {@link javax.jcr.nodetype.NodeType#MIX_LOCKABLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String MIX_LOCKABLE = "mix:lockable"; + /** + * Use {@link javax.jcr.nodetype.NodeType#MIX_MIMETYPE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). + */ + public static final String MIX_MIMETYPE = "mix:mimetype"; /** * Use {@link javax.jcr.nodetype.NodeType#MIX_REFERENCEABLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String MIX_REFERENCEABLE = "mix:referenceable"; + /** + * Use {@link javax.jcr.nodetype.NodeType#MIX_SIMPLE_VERSIONABLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). + */ + public static final String MIX_SIMPLE_VERSIONABLE = "mix:simpleVersionable"; /** * Use {@link javax.jcr.nodetype.NodeType#MIX_VERSIONABLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ @@ -251,6 +275,10 @@ public interface JcrConstants { * Use {@link javax.jcr.nodetype.NodeType#MIX_SHAREABLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String MIX_SHAREABLE = "mix:shareable"; + /** + * Use {@link javax.jcr.nodetype.NodeType#MIX_TITLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). + */ + public static final String MIX_TITLE = "mix:title"; /** * Use {@link javax.jcr.nodetype.NodeType#NT_BASE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ From 86ff983715b30c8bdc650c420974a6a63c7bb546 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Tue, 20 May 2025 17:22:13 +0200 Subject: [PATCH 072/171] JCR-5150 Add constant for jcr:title --- .../src/main/java/org/apache/jackrabbit/JcrConstants.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java index df1afbabf66..6a4332eb9f8 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/JcrConstants.java @@ -201,6 +201,10 @@ public interface JcrConstants { * Use {@link javax.jcr.Workspace#NAME_SYSTEM_NODE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ public static final String JCR_SYSTEM = "jcr:system"; + /** + * Use {@link javax.jcr.Property#JCR_TITLE} whenever expanded JCR names are supported (e.g. in JCR API method parameters). + */ + public static final String JCR_TITLE = "jcr:title"; /** * Use {@link javax.jcr.Property#JCR_UUID} whenever expanded JCR names are supported (e.g. in JCR API method parameters). */ From c9adb7bb7474d13f523d5a8351bd7d789c21431b Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 23 May 2025 08:16:29 +0200 Subject: [PATCH 073/171] JCR-5148: remove (comment out) mysql test profile (#242) --- jackrabbit-core/pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index ecfaf6740a5..07176a8342f 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -357,7 +357,7 @@ org.apache.jackrabbit.core.version.ModifyNonVersionableCheckedOutTest#testModify Note: the ${config.db.name} database is dropped and re-created in the clean phase. --> - + mssql @@ -443,13 +443,13 @@ org.apache.jackrabbit.core.version.ModifyNonVersionableCheckedOutTest#testModify org.codehaus.mojo sql-maven-plugin - + net.sourceforge.jtds jtds @@ -541,13 +541,13 @@ org.apache.jackrabbit.core.version.ModifyNonVersionableCheckedOutTest#testModify - + net.sourceforge.jtds jtds From 0067cea7b9024b5a07ddcbc730b67e96fe518571 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 23 May 2025 07:32:10 +0100 Subject: [PATCH 074/171] JCR-5146: Add mixin constants - fix package version --- .../src/main/java/org/apache/jackrabbit/package-info.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/package-info.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/package-info.java index 26f32fe40f9..3dae34a6ab9 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/package-info.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/package-info.java @@ -14,5 +14,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@org.osgi.annotation.versioning.Version("2.2") +@org.osgi.annotation.versioning.Version("2.3") package org.apache.jackrabbit; From e512a3a65f01dbb2c9b55078085871e6d0fd9ccd Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Tue, 10 Jun 2025 20:51:17 +0200 Subject: [PATCH 075/171] JCR-5152 Add method to check if a (local) name is valid according to JCR spec --- .../java/org/apache/jackrabbit/util/Text.java | 32 +++++++++++++++++++ .../apache/jackrabbit/util/package-info.java | 2 +- .../org/apache/jackrabbit/util/TextTest.java | 10 ++++++ 3 files changed, 43 insertions(+), 1 deletion(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java index 0b860bc904f..b6afc77c1da 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Text.java @@ -24,6 +24,7 @@ import java.util.ArrayList; import java.util.BitSet; import java.util.Properties; +import java.util.Set; /** * This Class provides some text related utilities @@ -41,6 +42,8 @@ private Text() { */ public static final char[] hexTable = "0123456789abcdef".toCharArray(); + private static final Set INVALID_JCR_LOCAL_NAME_CHARS = Set.of( '/', ':', '[', ']', '*', '|'); + /** * Calculate an MD5 hash of the string given. * @@ -466,6 +469,10 @@ public static String unescape(String string) { * char ::= nonspace | ' ' * nonspace ::= (* Any Unicode character except: '/', ':', '[', ']', '*', '|' or any whitespace character *) * + *

+ * Note that just using this method does not necessarily return a string which is a + * valid local name. + * You still have to take care of invalid XML characters. * * @param name the name to escape * @return the escaped name @@ -567,6 +574,31 @@ public static String unescapeIllegalJcrChars(String name) { return buffer.toString(); } + /** + * Checks if the given name is a valid JCR local name. + *

+ * Note that the return value of {@link #escapeIllegalJcrChars(String)} is not necessarily a valid local name. + * You still have to take care of invalid XML characters. + * + * @param localName the string value to check + * @return true if the name is valid, false otherwise. + * @see JCR 2.0 Spec, §3.2.2 Local Names + * @see #escapeIllegalJcrChars(String) + * @since 2.6.0 (Apache Jackrabbit 2.24.0) + */ + public static boolean isValidJcrLocalName(String localName) { + if (localName == null || localName.isEmpty()) { + return false; + } + // self or parent are invalid + if (localName.equals(".") || localName.equals("..")) { + return false; + } + return localName.chars().noneMatch(c -> + INVALID_JCR_LOCAL_NAME_CHARS.contains((char) c) || !XMLChar.isValid(c) + ); + } + /** * Returns the name part of the path. If the given path is already a name * (i.e. contains no slashes) it is returned. diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/package-info.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/package-info.java index ebb06936161..ccfc068b292 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/package-info.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/package-info.java @@ -14,5 +14,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@org.osgi.annotation.versioning.Version("2.5.0") +@org.osgi.annotation.versioning.Version("2.6.0") package org.apache.jackrabbit.util; diff --git a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java index 1375aff26ff..6d034c3834c 100644 --- a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java +++ b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/TextTest.java @@ -202,4 +202,14 @@ public void testEscapeXML() { public void testEscapeHTML() { assertEquals("&<>'"", Text.encodeIllegalHTMLCharacters("&<>'\"")); } + + public void testIsValidJcrLocalName() { + assertTrue(Text.isValidJcrLocalName("valid%Name..\n\r test.\"'")); + assertFalse(Text.isValidJcrLocalName("invalid|name")); + assertFalse(Text.isValidJcrLocalName("some:name")); + // containing non XML characters (unicode control character) + assertFalse(Text.isValidJcrLocalName("\u000FinvalidName")); + assertFalse(Text.isValidJcrLocalName("..")); + assertFalse(Text.isValidJcrLocalName(".")); + } } From a655f6fd1c64ac1c05dac79c2f84c166f660a8ac Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 30 Jun 2025 12:21:02 +0200 Subject: [PATCH 076/171] JCR-5156: webapp: update tomcat dependency to 9.0.106 (#251) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 6dd596935aa..1a66db82b62 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.104 + 9.0.106 From 3c76cbd2a439f7243aab47c08e16381d8072640b Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 30 Jun 2025 16:53:30 +0100 Subject: [PATCH 077/171] JCR-5147: remove jackrabbit 1.x compatibility tests --- test/compatibility/create10/pom.xml | 58 -------- .../compatibility/CreateRepositoryTest.java | 28 ---- test/compatibility/create11/pom.xml | 58 -------- .../compatibility/CreateRepositoryTest.java | 28 ---- test/compatibility/create12/pom.xml | 52 ------- .../compatibility/CreateRepositoryTest.java | 28 ---- test/compatibility/create13/pom.xml | 58 -------- .../compatibility/CreateRepositoryTest.java | 28 ---- .../create13/src/test/resources/bundle.xml | 117 ---------------- test/compatibility/create14/pom.xml | 58 -------- .../compatibility/CreateRepositoryTest.java | 28 ---- .../create14/src/test/resources/JCR-1808.xml | 59 -------- .../src/test/resources/datastore-db.xml | 129 ------------------ .../create14/src/test/resources/datastore.xml | 126 ----------------- test/compatibility/create15/pom.xml | 58 -------- .../compatibility/CreateRepositoryTest.java | 28 ---- test/compatibility/create16/pom.xml | 58 -------- .../compatibility/CreateRepositoryTest.java | 28 ---- test/compatibility/parent/pom.xml | 4 +- test/compatibility/pom.xml | 7 - 20 files changed, 2 insertions(+), 1036 deletions(-) delete mode 100644 test/compatibility/create10/pom.xml delete mode 100644 test/compatibility/create10/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java delete mode 100644 test/compatibility/create11/pom.xml delete mode 100644 test/compatibility/create11/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java delete mode 100644 test/compatibility/create12/pom.xml delete mode 100644 test/compatibility/create12/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java delete mode 100644 test/compatibility/create13/pom.xml delete mode 100644 test/compatibility/create13/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java delete mode 100644 test/compatibility/create13/src/test/resources/bundle.xml delete mode 100644 test/compatibility/create14/pom.xml delete mode 100644 test/compatibility/create14/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java delete mode 100644 test/compatibility/create14/src/test/resources/JCR-1808.xml delete mode 100644 test/compatibility/create14/src/test/resources/datastore-db.xml delete mode 100644 test/compatibility/create14/src/test/resources/datastore.xml delete mode 100644 test/compatibility/create15/pom.xml delete mode 100644 test/compatibility/create15/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java delete mode 100644 test/compatibility/create16/pom.xml delete mode 100644 test/compatibility/create16/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java diff --git a/test/compatibility/create10/pom.xml b/test/compatibility/create10/pom.xml deleted file mode 100644 index c93492436f5..00000000000 --- a/test/compatibility/create10/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-bc-parent - SNAPSHOT - ../parent/pom.xml - - - jackrabbit-bc-create10 - Jackrabbit 1.0 Repositories - - - - org.apache.jackrabbit - jackrabbit-bc-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.0 - test - - - jsr170 - jcr - - - - - - - diff --git a/test/compatibility/create10/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java b/test/compatibility/create10/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java deleted file mode 100644 index d38aeab367f..00000000000 --- a/test/compatibility/create10/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.harness.compatibility; - -import org.testng.annotations.Test; - -public class CreateRepositoryTest extends AbstractRepositoryTest { - - @Test - public void createRepositories() throws Exception { - doCreateRepositories("jackrabbit-1.0"); - } - -} diff --git a/test/compatibility/create11/pom.xml b/test/compatibility/create11/pom.xml deleted file mode 100644 index 6f34f71863a..00000000000 --- a/test/compatibility/create11/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-bc-parent - SNAPSHOT - ../parent/pom.xml - - - jackrabbit-bc-create11 - Jackrabbit 1.0 Repositories - - - - ${project.groupId} - jackrabbit-bc-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.1 - test - - - jsr170 - jcr - - - - - - - diff --git a/test/compatibility/create11/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java b/test/compatibility/create11/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java deleted file mode 100644 index 6f0f7881825..00000000000 --- a/test/compatibility/create11/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.harness.compatibility; - -import org.testng.annotations.Test; - -public class CreateRepositoryTest extends AbstractRepositoryTest { - - @Test - public void createRepositories() throws Exception { - doCreateRepositories("jackrabbit-1.1"); - } - -} diff --git a/test/compatibility/create12/pom.xml b/test/compatibility/create12/pom.xml deleted file mode 100644 index 5b3f977d8b9..00000000000 --- a/test/compatibility/create12/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-bc-parent - SNAPSHOT - ../parent/pom.xml - - - jackrabbit-bc-create12 - Jackrabbit 1.2 Repositories - - - - ${project.groupId} - jackrabbit-bc-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.2.1 - test - - - - - diff --git a/test/compatibility/create12/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java b/test/compatibility/create12/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java deleted file mode 100644 index 22fe200a008..00000000000 --- a/test/compatibility/create12/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.harness.compatibility; - -import org.testng.annotations.Test; - -public class CreateRepositoryTest extends AbstractRepositoryTest { - - @Test - public void createRepositories() throws Exception { - doCreateRepositories("jackrabbit-1.2"); - } - -} diff --git a/test/compatibility/create13/pom.xml b/test/compatibility/create13/pom.xml deleted file mode 100644 index 7912e1d89ea..00000000000 --- a/test/compatibility/create13/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-bc-parent - SNAPSHOT - ../parent/pom.xml - - - jackrabbit-bc-create13 - Jackrabbit 1.3 Repositories - - - - ${project.groupId} - jackrabbit-bc-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.3 - test - - - org.slf4j - slf4j-log4j12 - 1.3.0 - test - - - - - diff --git a/test/compatibility/create13/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java b/test/compatibility/create13/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java deleted file mode 100644 index f841e6391ad..00000000000 --- a/test/compatibility/create13/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.harness.compatibility; - -import org.testng.annotations.Test; - -public class CreateRepositoryTest extends AbstractRepositoryTest { - - @Test - public void createRepositories() throws Exception { - doCreateRepositories("jackrabbit-1.3"); - } - -} diff --git a/test/compatibility/create13/src/test/resources/bundle.xml b/test/compatibility/create13/src/test/resources/bundle.xml deleted file mode 100644 index f5bd98ba8bd..00000000000 --- a/test/compatibility/create13/src/test/resources/bundle.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/compatibility/create14/pom.xml b/test/compatibility/create14/pom.xml deleted file mode 100644 index 7b4e958902b..00000000000 --- a/test/compatibility/create14/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-bc-parent - SNAPSHOT - ../parent/pom.xml - - - jackrabbit-bc-create14 - Jackrabbit 1.4 Repositories - - - - ${project.groupId} - jackrabbit-bc-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.4 - test - - - org.slf4j - slf4j-log4j12 - 1.3.0 - test - - - - - diff --git a/test/compatibility/create14/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java b/test/compatibility/create14/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java deleted file mode 100644 index 9c556b54b46..00000000000 --- a/test/compatibility/create14/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.harness.compatibility; - -import org.testng.annotations.Test; - -public class CreateRepositoryTest extends AbstractRepositoryTest { - - @Test - public void createRepositories() throws Exception { - doCreateRepositories("jackrabbit-1.4"); - } - -} diff --git a/test/compatibility/create14/src/test/resources/JCR-1808.xml b/test/compatibility/create14/src/test/resources/JCR-1808.xml deleted file mode 100644 index f12acae8626..00000000000 --- a/test/compatibility/create14/src/test/resources/JCR-1808.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/compatibility/create14/src/test/resources/datastore-db.xml b/test/compatibility/create14/src/test/resources/datastore-db.xml deleted file mode 100644 index 3430614ffde..00000000000 --- a/test/compatibility/create14/src/test/resources/datastore-db.xml +++ /dev/null @@ -1,129 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/compatibility/create14/src/test/resources/datastore.xml b/test/compatibility/create14/src/test/resources/datastore.xml deleted file mode 100644 index 2f30b1d037d..00000000000 --- a/test/compatibility/create14/src/test/resources/datastore.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/test/compatibility/create15/pom.xml b/test/compatibility/create15/pom.xml deleted file mode 100644 index ac123bd00a1..00000000000 --- a/test/compatibility/create15/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-bc-parent - SNAPSHOT - ../parent/pom.xml - - - jackrabbit-bc-create15 - Jackrabbit 1.5 Repositories - - - - ${project.groupId} - jackrabbit-bc-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.5.0 - test - - - org.slf4j - slf4j-log4j12 - 1.5.3 - test - - - - - diff --git a/test/compatibility/create15/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java b/test/compatibility/create15/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java deleted file mode 100644 index ee54e9a3e42..00000000000 --- a/test/compatibility/create15/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.harness.compatibility; - -import org.testng.annotations.Test; - -public class CreateRepositoryTest extends AbstractRepositoryTest { - - @Test - public void createRepositories() throws Exception { - doCreateRepositories("jackrabbit-1.5"); - } - -} diff --git a/test/compatibility/create16/pom.xml b/test/compatibility/create16/pom.xml deleted file mode 100644 index 732576a1f9b..00000000000 --- a/test/compatibility/create16/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-bc-parent - SNAPSHOT - ../parent/pom.xml - - - jackrabbit-bc-create16 - Jackrabbit 1.6 Repositories - - - - ${project.groupId} - jackrabbit-bc-base - ${project.version} - test - - - org.apache.jackrabbit - jackrabbit-core - 1.6.0 - test - - - org.slf4j - slf4j-log4j12 - 1.5.3 - test - - - - - diff --git a/test/compatibility/create16/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java b/test/compatibility/create16/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java deleted file mode 100644 index 0d97efa21ef..00000000000 --- a/test/compatibility/create16/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.harness.compatibility; - -import org.testng.annotations.Test; - -public class CreateRepositoryTest extends AbstractRepositoryTest { - - @Test - public void createRepositories() throws Exception { - doCreateRepositories("jackrabbit-1.6"); - } - -} diff --git a/test/compatibility/parent/pom.xml b/test/compatibility/parent/pom.xml index f11a717ecbf..6bc05660b11 100644 --- a/test/compatibility/parent/pom.xml +++ b/test/compatibility/parent/pom.xml @@ -44,8 +44,8 @@ maven-compiler-plugin - 1.5 - 1.5 + 1.6 + 1.6 diff --git a/test/compatibility/pom.xml b/test/compatibility/pom.xml index 7bf435214d1..13a4dfb340a 100644 --- a/test/compatibility/pom.xml +++ b/test/compatibility/pom.xml @@ -41,13 +41,6 @@ parent base - create10 - create11 - create12 - create13 - create14 - create15 - create16 create20 create21 create22 From 16504b3fd27902bc799998862de79641e0a3088d Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 2 Jul 2025 11:02:29 +0200 Subject: [PATCH 078/171] JCR-5137: Update JCR commons to implement current jackrabbit-api (#231) --- .../apache/jackrabbit/core/SessionImpl.java | 37 +++++++++++ .../jackrabbit/api/JackrabbitSessionTest.java | 61 +++++++++++++++++-- .../core/security/user/UserImporterTest.java | 10 +++ jackrabbit-parent/pom.xml | 4 +- 4 files changed, 106 insertions(+), 6 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java index 7a6dfd59a74..d413a245c81 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SessionImpl.java @@ -738,6 +738,43 @@ public Node getNodeOrNull(String absPath) throws RepositoryException { } } + private static boolean isValidNamespaceName(String namespace) { + // the empty namespace and "internal" are valid as well, otherwise it always contains a colon (as it is a URI) + // compare with RFC 3986, Section 3 (https://datatracker.ietf.org/doc/html/rfc3986#section-3) + return namespace.isEmpty() || namespace.equals(Name.NS_REP_URI) || namespace.contains(":"); + } + + @Override + public String getExpandedName(Item item) throws RepositoryException { + String name = item.getName(); + int pos = name.indexOf(":"); + if (pos > 0) { + String prefix = name.substring(0, pos); + String uri = getNamespaceURI(prefix); + if (!isValidNamespaceName(uri)) { + throw new NamespaceException("Cannot determine expanded name for '" + name + + "' as registered namespace name '" + uri + "' is invalid"); + } + return "{" + uri + "}" + name.substring(pos + 1); + } + else { + return "{}" + name; + } + } + + @Override + public String getExpandedPath(Item item) throws RepositoryException { + StringBuilder result = new StringBuilder(); + String name; + do { + result.insert(0, "/" + getExpandedName(item)); + item = item.getParent(); + name = item.getName(); + // walk up to the root + } while (!name.isEmpty()); + return result.toString(); + } + //--------------------------------------------------------------< Session > /** * {@inheritDoc} diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/JackrabbitSessionTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/JackrabbitSessionTest.java index f1a36298b72..55366a700ee 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/JackrabbitSessionTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/JackrabbitSessionTest.java @@ -18,16 +18,21 @@ import org.apache.jackrabbit.test.AbstractJCRTest; import org.apache.jackrabbit.test.NotExecutableException; -import org.junit.Ignore; import javax.jcr.GuestCredentials; import javax.jcr.Item; +import javax.jcr.NamespaceException; import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.RepositoryException; +import java.util.UUID; + import static org.mockito.Mockito.mock; +// Borrowed from org.apache.jackrabbit.oak.jcr.session.JackrabbitSessionTest. +// Please keep in sync. + public class JackrabbitSessionTest extends AbstractJCRTest { private JackrabbitSession s; @@ -58,7 +63,7 @@ private static void assertEquivalentNode(Node expected, Node result) throws Exce } // @Ignore("Jackrabbit does not check cross-Session request") - public void ignoreTestGetParentOrNullSessionMismatch() throws Exception { + public void ignoreGetParentOrNullSessionMismatch() throws Exception { JackrabbitSession guest = (JackrabbitSession) getHelper().getRepository().login(new GuestCredentials()); try { guest.getParentOrNull(s.getNode(testRoot)); @@ -70,8 +75,8 @@ public void ignoreTestGetParentOrNullSessionMismatch() throws Exception { } } - // @Ignore("Jackrabbit does not verify that the Item was obtained from Jackrabbit") - public void ignoreTestGetParentOrNullImplMismatch() { + // @Ignore("Jackrabbit does not check cross-Session request") + public void ignoreGetParentOrNullImplMismatch() { try { Item item = mock(Item.class); s.getParentOrNull(item); @@ -80,4 +85,52 @@ public void ignoreTestGetParentOrNullImplMismatch() { // success } } + + public void testGetExpandedName() throws RepositoryException { + // empty namespace uri + assertEquals("{}testroot", s.getExpandedName(testRootNode)); + Node n = testRootNode.addNode("test:bar"); + assertEquals("{http://www.apache.org/jackrabbit/test}bar", s.getExpandedName(n)); + // now remap namespace uri - should not affect expanded name + assertEquals("prefix 'test' has unexpected mapping", + "http://www.apache.org/jackrabbit/test", s.getNamespaceURI("test")); + s.setNamespacePrefix("test", "urn:foo"); + assertEquals("{http://www.apache.org/jackrabbit/test}bar", s.getExpandedName(n)); + // use special namespace uri + n = testRootNode.addNode("rep:bar"); + assertEquals("{internal}bar", s.getExpandedName(n)); + } + + public void testGetExpandedNameBrokenNamespace() throws RepositoryException { + String uuid = UUID.randomUUID().toString(); + String randomNamespacePrefix = "prefix-" + uuid; + // below is not a valid namespace a.k.a. namespace URI + String randomNamespaceName = "name-" + uuid; + + // register broken namespace prefix/name mapping + s.getWorkspace().getNamespaceRegistry().registerNamespace(randomNamespacePrefix, randomNamespaceName); + + try { + Node n = testRootNode.addNode(randomNamespacePrefix + ":qux"); + + // there is no expanded name, thus we expect an exception here + String result = s.getExpandedName(n); + fail("there is no expanded name in this case, so we expect the call to fail, however we get: " + result); + } catch (NamespaceException ex) { + // expected + } + //finally { + // not supported in Jackrabbit + // s.getWorkspace().getNamespaceRegistry().unregisterNamespace(randomNamespacePrefix); + // } + } + + public void testGetExpandedPath() throws RepositoryException { + assertEquals("/{}testroot", s.getExpandedPath(testRootNode)); + Node n = testRootNode.addNode("test:bar").addNode("rep:bar"); + assertEquals("/{}testroot/{http://www.apache.org/jackrabbit/test}bar/{internal}bar", s.getExpandedPath(n)); + // now remap namespace uri - should not affect expanded name + s.setNamespacePrefix("test", "urn:foo"); + assertEquals("/{}testroot/{http://www.apache.org/jackrabbit/test}bar/{internal}bar", s.getExpandedPath(n)); + } } \ No newline at end of file diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserImporterTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserImporterTest.java index fc395505c4d..fa3db3d4687 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserImporterTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/UserImporterTest.java @@ -1671,6 +1671,16 @@ public Node getNodeOrNull(String absPath) throws RepositoryException { return null; } + @Override + public String getExpandedName(Item item) throws UnsupportedRepositoryOperationException { + throw new UnsupportedRepositoryOperationException("see JCR-5137"); + } + + @Override + public String getExpandedPath(Item item) throws UnsupportedRepositoryOperationException { + throw new UnsupportedRepositoryOperationException("see JCR-5137"); + } + public Repository getRepository() { return null; } diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 69806585d64..e5f1c0cb148 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -54,8 +54,8 @@ -Xmx256m ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - - 1.76.0 + + 1.80 1.22.22 9.4.56.v20240826 From 0975711c816c1584774c905fd481a78ae9ac51db Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 2 Jul 2025 12:53:36 +0200 Subject: [PATCH 079/171] JCR-5158: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.82.0 (#254) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index e5f1c0cb148..29c55513285 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.80 + 1.82.0 1.22.22 9.4.56.v20240826 From c7a428df831d6bb805bfa902cb1b80d97ced9d0b Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 3 Jul 2025 20:31:53 +0200 Subject: [PATCH 080/171] JCR-5157: configure CI for PRs on github - wip (#252) --- .github/workflows/build.yml | 100 ++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 .github/workflows/build.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000000..f112f2d3929 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,100 @@ +# ~ Licensed to the Apache Software Foundation (ASF) under one +# ~ or more contributor license agreements. See the NOTICE file +# ~ distributed with this work for additional information +# ~ regarding copyright ownership. The ASF licenses this file +# ~ to you under the Apache License, Version 2.0 (the +# ~ "License"); you may not use this file except in compliance +# ~ with the License. You may obtain a copy of the License at +# ~ +# ~ http://www.apache.org/licenses/LICENSE-2.0 +# ~ +# ~ Unless required by applicable law or agreed to in writing, +# ~ software distributed under the License is distributed on an +# ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# ~ KIND, either express or implied. See the License for the +# ~ specific language governing permissions and limitations +# ~ under the License. + +name: Build +on: + push: + branches: + - trunk + pull_request: + types: [opened, synchronize, reopened] +jobs: + build: + name: Maven Build + runs-on: ubuntu-latest + steps: + - name: Git clone + uses: actions/checkout@v4 + - name: Set up JDK 11 + uses: actions/setup-java@v4 + with: + java-version: 11 + distribution: temurin + cache: maven + server-id: apache.snapshots.https # Value of the distributionManagement/repository/id field of the pom.xml + server-username: MAVEN_APACHE_NEXUS_USERNAME # env variable for username in deploy + server-password: MAVEN_APACHE_NEXUS_PASSWORD # env variable for token in deploy + # sets environment variables to be used in subsequent steps: https://docs.github.com/en/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable + - name: Set environment variables + shell: bash + run: | + if [ "${{github.ref}}" = "refs/heads/trunk" ] && [ "${{github.event_name}}" = "push" ] && [ "${{github.repository_owner}}" = "apache" ]; then + echo 'Running on main branch of the canonical repo' + echo "MVN_ADDITIONAL_OPTS=-DdeployAtEnd=true" >> $GITHUB_ENV + echo "MVN_GOAL=deploy" >> $GITHUB_ENV + echo "MAVEN_APACHE_NEXUS_USERNAME=${{ secrets.NEXUS_USER }}" >> $GITHUB_ENV + echo "MAVEN_APACHE_NEXUS_PASSWORD=${{ secrets.NEXUS_PW }}" >> $GITHUB_ENV + else + echo 'Running outside main branch/canonical repo' + echo "MVN_ADDITIONAL_OPTS=" >> $GITHUB_ENV + echo "MVN_GOAL=install" >> $GITHUB_ENV + fi + - name: Build + # executing ITs requires installing artifacts to the local repository + run: mvn -B ${{ env.MVN_GOAL }} ${{ env.MVN_ADDITIONAL_OPTS }} -Pcoverage,integrationTesting,javadoc -Dorg.ops4j.pax.url.mvn.repositories="https://repo1.maven.org/maven2@id=central" + - name: Upload build result + uses: actions/upload-artifact@v4 + with: + name: compiled-classes-and-coverage + # compare with https://docs.sonarsource.com/sonarqube-cloud/advanced-setup/languages/java/#java-analysis-and-bytecode + path: | + **/target/**/*.class + **/target/site/jacoco*/*.xml + + # execute analysis in a separate job for better visualization and usage of matrix builds + # https://docs.sonarsource.com/sonarcloud/advanced-setup/ci-based-analysis/sonarscanner-for-maven/#invoking-the-goal + sonar: + name: SonarQube Analysis + runs-on: ubuntu-latest + needs: build + # not supported on forks, https://portal.productboard.com/sonarsource/1-sonarqube-cloud/c/50-sonarcloud-analyzes-external-pull-request + if: ${{ github.repository == 'apache/jackrabbit' }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: temurin + cache: maven + - name: Download compiled classes + uses: actions/download-artifact@v4 + with: + name: compiled-classes-and-coverage + - name: Cache SonarQube packages + uses: actions/cache@v4 + with: + path: ~/.sonar/cache + key: ${{ runner.os }}-sonar + restore-keys: ${{ runner.os }}-sonar + - name: Analyze with SonarQube + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any + SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }} + run: SONAR_SCANNER_JAVA_OPTS="-Xmx8g" mvn -B org.sonarsource.scanner.maven:sonar-maven-plugin:5.1.0.4751:sonar -Dsonar.projectKey=apache_jackrabbit -Dsonar.organization=apache -Dsonar.scanner.skipJreProvisioning=true \ No newline at end of file From be0a1a6e95d71639e2ed5aa329f9f56cbac84368 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Tue, 1 Jul 2025 08:35:43 +0200 Subject: [PATCH 081/171] Prevent git force push on trunk branch --- .asf.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.asf.yaml b/.asf.yaml index 5948afd1371..365032378b0 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -28,4 +28,6 @@ github: - JCR - JCRVLT - SLING - - FELIX \ No newline at end of file + - FELIX + protected_branches: + trunk: {} From 19274a61e0572b26eb09688f632757b07cbc83d4 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 7 Jul 2025 09:59:29 +0200 Subject: [PATCH 082/171] JCR-5159: Create coverage for NamespaceHelper (#256) --- .../jackrabbit/commons/NamespaceHelper.java | 30 ++- .../commons/NamespaceHelperTest.java | 237 ++++++++++++++++++ 2 files changed, 254 insertions(+), 13 deletions(-) create mode 100644 jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java index a5581185c5c..16851cd57cc 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java @@ -72,22 +72,22 @@ public NamespaceHelper(Session session) { * @throws RepositoryException if the namespaces could not be retrieved */ public Map getNamespaces() throws RepositoryException { - Map namespaces = new HashMap(); + Map namespaces = new HashMap<>(); String[] prefixes = session.getNamespacePrefixes(); - for (String prefixe : prefixes) { - namespaces.put(prefixe, session.getNamespaceURI(prefixe)); + for (String prefix : prefixes) { + namespaces.put(prefix, session.getNamespaceURI(prefix)); } return namespaces; } /** * Returns the prefix mapped to the given namespace URI in the current - * session, or null if the namespace does not exist. + * session, or {@code null} if the namespace does not exist. * * @see Session#getNamespacePrefix(String) * @param uri namespace URI - * @return namespace prefix, or null - * @throws RepositoryException if the namespace could not be retrieved + * @return namespace prefix, or {@code null} + * @throws RepositoryException if the namespace prefix could not be retrieved */ public String getPrefix(String uri) throws RepositoryException { try { @@ -99,11 +99,11 @@ public String getPrefix(String uri) throws RepositoryException { /** * Returns the namespace URI mapped to the given prefix in the current - * session, or null if the namespace does not exist. + * session, or {@code null} if the namespace does not exist. * * @see Session#getNamespaceURI(String) * @param prefix namespace prefix - * @return namespace prefix, or null + * @return namespace prefix, or {@code null} * @throws RepositoryException if the namespace could not be retrieved */ public String getURI(String prefix) throws RepositoryException { @@ -126,7 +126,7 @@ public String getURI(String prefix) throws RepositoryException { */ public String getJcrName(String uri, String name) throws NamespaceException, RepositoryException { - if (uri != null && uri.length() > 0) { + if (uri != null && !uri.isEmpty()) { return session.getNamespacePrefix(uri) + ":" + name; } else { return name; @@ -144,6 +144,11 @@ public String getJcrName(String uri, String name) *

      *     node.getProperty(helper.getName("jcr:data"));
      * 
+ * Note that it is simpler to just use the expanded name wherever supported: + *
+     *     node.getProperty("http://www.jcp.org/jcr/1.0}data");
+     * 
+ * Also note the predefined constants in {@link org.apache.jackrabbit.JcrConstants}. * * @param name prefixed name using the standard JCR prefixes * @return prefixed name using the current session namespace mappings @@ -178,7 +183,7 @@ public String getJcrName(String name) /** * Safely registers the given namespace. If the namespace already exists, * then the prefix mapped to the namespace in the current session is - * returned. Otherwise the namespace is registered to the namespace + * returned. Otherwise, the namespace is registered to the namespace * registry. If the given prefix is already registered for some other * namespace or otherwise invalid, then another prefix is automatically * generated. After the namespace has been registered, the prefix mapped @@ -199,7 +204,7 @@ public String registerNamespace(String prefix, String uri) registry.getPrefix(uri); } catch (NamespaceException e1) { // Replace troublesome prefix hints - if (prefix == null || prefix.length() == 0 + if (prefix == null || prefix.isEmpty() || prefix.toLowerCase().startsWith("xml") || !XMLChar.isValidNCName(prefix)) { prefix = "ns"; // ns, ns2, ns3, ns4, ... @@ -231,8 +236,7 @@ public String registerNamespace(String prefix, String uri) * @throws RepositoryException if the namespaces could not be registered */ public void registerNamespaces(Map namespaces) throws RepositoryException { - for (Map.Entry stringStringEntry : namespaces.entrySet()) { - Map.Entry entry = stringStringEntry; + for (Map.Entry entry : namespaces.entrySet()) { registerNamespace(entry.getKey(), entry.getValue()); } } diff --git a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java new file mode 100644 index 00000000000..17c849d1344 --- /dev/null +++ b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java @@ -0,0 +1,237 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.commons; + +import junit.framework.TestCase; +import org.mockito.Mockito; + +import javax.jcr.NamespaceException; +import javax.jcr.NamespaceRegistry; +import javax.jcr.RepositoryException; +import javax.jcr.Session; +import javax.jcr.Workspace; +import java.util.HashMap; +import java.util.Map; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; + +public class NamespaceHelperTest extends TestCase { + + private Session session; + + @Override + protected void setUp() throws Exception { + super.setUp(); + session = Mockito.mock(Session.class); + } + + public void testGetNamespaces() throws RepositoryException { + NamespaceHelper nsHelper = new NamespaceHelper(session); + + when(session.getNamespacePrefixes()).thenReturn(new String[0]); + Map map = nsHelper.getNamespaces(); + assertEquals(0, map.size()); + + when(session.getNamespacePrefixes()).thenReturn(new String[]{"foo"}); + map = nsHelper.getNamespaces(); + assertEquals(1, map.size()); + assertNull(map.get("foo")); + + when(session.getNamespacePrefixes()).thenReturn(new String[]{"foo", "bar"}); + when(session.getNamespaceURI("bar")).thenReturn("urn:test"); + map = nsHelper.getNamespaces(); + assertEquals(2, map.size()); + assertNull(map.get("foo")); + assertEquals("urn:test", map.get("bar")); + } + + public void testGetPrefix() throws RepositoryException { + NamespaceHelper nsHelper = new NamespaceHelper(session); + + String uri1 = "urn:test1"; + + when(session.getNamespacePrefix(uri1)).thenThrow(NamespaceException.class); + String prefix = nsHelper.getPrefix(uri1); + assertNull(prefix); + + String uri2 = "urn:test2"; + + when(session.getNamespacePrefix(uri2)).thenReturn("foo"); + prefix = nsHelper.getPrefix(uri2); + assertEquals("foo", prefix); + } + + public void testGetURI() throws RepositoryException { + NamespaceHelper nsHelper = new NamespaceHelper(session); + + String prefix1 = "prefix1"; + + when(session.getNamespaceURI(prefix1)).thenThrow(NamespaceException.class); + String uri = nsHelper.getURI(prefix1); + assertNull(uri); + + String prefix2 = "prefix2"; + + when(session.getNamespaceURI(prefix2)).thenReturn("foo:bar"); + uri = nsHelper.getURI(prefix2); + assertEquals("foo:bar", uri); + } + + public void testGetJcrName() throws RepositoryException { + NamespaceHelper nsHelper = new NamespaceHelper(session); + + when(session.getNamespacePrefix(NamespaceHelper.JCR)).thenReturn("jcr"); + assertEquals("jcr:xyz", nsHelper.getJcrName("jcr:xyz")); + + when(session.getNamespacePrefix(NamespaceHelper.MIX)).thenReturn("foo"); + assertEquals("foo:xyz", nsHelper.getJcrName("mix:xyz")); + + try { + when(session.getNamespacePrefix("urn:foo")).thenReturn("unknown"); + String shouldFail = nsHelper.getJcrName("foo:xyz"); + fail("getJcrName should fail for unknown prefix foo, but got: " + shouldFail); + } catch (IllegalArgumentException expected) { + // all good + } + + try { + when(session.getNamespacePrefix(NamespaceHelper.NT)).thenThrow(NamespaceException.class); + String shouldFail = nsHelper.getJcrName(NamespaceHelper.NT); + fail("getJcrName should fail for unknown prefix nt, but got: " + shouldFail); + } catch (IllegalArgumentException expected) { + // all good + } + } + + public void testGetJcrName2() throws RepositoryException { + NamespaceHelper nsHelper = new NamespaceHelper(session); + + assertEquals("foo", nsHelper.getJcrName(null, "foo")); + assertEquals("foo", nsHelper.getJcrName("", "foo")); + + when(session.getNamespacePrefix("urn:bar")).thenReturn("bar"); + assertEquals("bar:foo", nsHelper.getJcrName("urn:bar", "foo")); + } + + public void testRegisterNamespaceAlreadyRegistered() throws RepositoryException { + NamespaceHelper nsHelper = new NamespaceHelper(session); + + Workspace workspace = Mockito.mock(Workspace.class); + NamespaceRegistry nsReg = Mockito.mock(NamespaceRegistry.class); + + when(session.getWorkspace()).thenReturn(workspace); + when(workspace.getNamespaceRegistry()).thenReturn(nsReg); + + when(nsReg.getPrefix("foo:")).thenReturn("xyz"); + when(session.getNamespacePrefix("foo:")).thenReturn("xyz"); + String prefix = nsHelper.registerNamespace("bar", "foo:"); + assertEquals("xyz", prefix); + } + + public void testRegisterNamespace() throws RepositoryException { + Workspace workspace = Mockito.mock(Workspace.class); + NamespaceRegistry nsReg = Mockito.mock(NamespaceRegistry.class); + + when(session.getWorkspace()).thenReturn(workspace); + when(workspace.getNamespaceRegistry()).thenReturn(nsReg); + + // poor man's namespace registry + + final HashMap pref2uri = new HashMap<>(); + final HashMap uri2pref = new HashMap<>(); + + // defaults (incomplete) + pref2uri.put("xml", NamespaceRegistry.NAMESPACE_XML); + uri2pref.put(NamespaceRegistry.NAMESPACE_XML, "xml"); + pref2uri.put("jcr", NamespaceRegistry.NAMESPACE_JCR); + uri2pref.put(NamespaceRegistry.NAMESPACE_JCR, "jcr"); + + Mockito.doAnswer(invocation -> { + String rpref = invocation.getArgument(0); + String ruri = invocation.getArgument(1); + if (null != uri2pref.get(ruri) || null != pref2uri.get(rpref)) { + throw new NamespaceException(); + } else { + pref2uri.put(rpref, ruri); + uri2pref.put(ruri, rpref); + return null; + } + }).when(nsReg).registerNamespace(any(), any()); + + when(nsReg.getPrefix(any())).thenAnswer(invocation -> { + String found = uri2pref.get(invocation.getArgument(0)); + if (found != null) { + return found; + } else { + throw new NamespaceException(); + } + }); + + when(nsReg.getURI(any())).thenAnswer(invocation -> { + String found = pref2uri.get(invocation.getArgument(0)); + if (found != null) { + return found; + } else { + throw new NamespaceException(); + } + }); + + when(session.getNamespacePrefix(any())).thenAnswer(invocation -> { + String found = uri2pref.get(invocation.getArgument(0)); + if (found != null) { + return found; + } else { + throw new NamespaceException(); + } + }); + + when(session.getNamespaceURI(any())).thenAnswer(invocation -> { + String found = pref2uri.get(invocation.getArgument(0)); + if (found != null) { + return found; + } else { + throw new NamespaceException(); + } + }); + + NamespaceHelper nsHelper = new NamespaceHelper(session); + + // register namespace (test makes assumptions about implementation) + + assertEquals("ns", nsHelper.registerNamespace("", "foo:")); + assertEquals("ns2", nsHelper.registerNamespace("", "foo2:")); + assertEquals("ns3", nsHelper.registerNamespace("xmlxxx", "foo3:")); + assertEquals("ns4", nsHelper.registerNamespace("123", "foo4:")); + assertEquals("ns3", nsHelper.registerNamespace("xmlxxx", "foo3:")); + assertEquals("ns5", nsHelper.registerNamespace(null, "foo6:")); + + assertEquals("bar", nsHelper.registerNamespace("bar", "bar:")); + assertEquals("bar2", nsHelper.registerNamespace("bar", "bar2:")); + assertEquals("bar3", nsHelper.registerNamespace("bar", "bar3:")); + + assertEquals("jcr", nsHelper.registerNamespace("wtf", NamespaceRegistry.NAMESPACE_JCR)); + assertEquals("xml", nsHelper.registerNamespace("", NamespaceRegistry.NAMESPACE_XML)); + + // register namespaces + Map input = Map.of("test1", "test1:", "test2", "test2", "", "test3:"); + nsHelper.registerNamespaces(input); + assertEquals("test1", nsReg.getPrefix("test1:")); + assertEquals("test2", nsReg.getPrefix("test2")); + assertEquals("ns6", nsReg.getPrefix("test3:")); + } +} From 62747fa7ac458808d1c6aeb235b460ca06b901d4 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 8 Jul 2025 12:25:49 +0200 Subject: [PATCH 083/171] JCR-5161: NamespaceHelper - get NamespaceRegistry only once (#259) --- .../jackrabbit/commons/NamespaceHelper.java | 21 +++++++++++++++++-- .../commons/NamespaceHelperTest.java | 3 +++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java index 16851cd57cc..978269a5eb0 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java @@ -53,6 +53,11 @@ public class NamespaceHelper { */ private final Session session; + /** + * Current namespace registry. + */ + private NamespaceRegistry namespaceRegistry; + /** * Creates a namespace helper for the given session. * @@ -60,6 +65,19 @@ public class NamespaceHelper { */ public NamespaceHelper(Session session) { this.session = session; + // will be set on lazily + this.namespaceRegistry = null; + } + + /** + Get the namespace registry; needs to be done on-demand because the constructor + does not allow RepositoryException + */ + private NamespaceRegistry getNamespaceRegistry() throws RepositoryException { + if (namespaceRegistry == null) { + namespaceRegistry = session.getWorkspace().getNamespaceRegistry(); + } + return namespaceRegistry; } /** @@ -197,8 +215,7 @@ public String getJcrName(String name) */ public String registerNamespace(String prefix, String uri) throws RepositoryException { - NamespaceRegistry registry = - session.getWorkspace().getNamespaceRegistry(); + NamespaceRegistry registry = getNamespaceRegistry(); try { // Check if the namespace is registered registry.getPrefix(uri); diff --git a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java index 17c849d1344..f4baa5c62e7 100644 --- a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java +++ b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java @@ -233,5 +233,8 @@ public void testRegisterNamespace() throws RepositoryException { assertEquals("test1", nsReg.getPrefix("test1:")); assertEquals("test2", nsReg.getPrefix("test2")); assertEquals("ns6", nsReg.getPrefix("test3:")); + + // check invocation count for getNamespaceRegistry (JCR-5161) + Mockito.verify(workspace, Mockito.times(1)).getNamespaceRegistry(); } } From 8b60b53546ebca4aa5160c9b764412fd381d5635 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 10 Jul 2025 06:28:36 +0200 Subject: [PATCH 084/171] JCR-5163: Update commons file-upload dependency to 1.6.0 (#261) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 29c55513285..80953ca6b8d 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -577,7 +577,7 @@ commons-fileupload commons-fileupload - 1.5 + 1.6.0 org.eclipse.jetty From 8ea2349234b181bf790cad58bfd91fd2763e64a9 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 10 Jul 2025 18:04:34 +0200 Subject: [PATCH 085/171] JCR-5165: various parsing improvements/consistency (#263) --- .../jackrabbit/core/util/DOMWalker.java | 40 ++++++++++++++++++- .../privilege/PrivilegeXmlHandler.java | 30 ++++++++++++++ 2 files changed, 68 insertions(+), 2 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java index 9689f7cba7d..aa6b64467e1 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java @@ -23,11 +23,15 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.EntityResolver; +import org.xml.sax.InputSource; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.IOException; import java.io.InputStream; +import java.io.StringReader; import java.util.Properties; /** @@ -37,8 +41,36 @@ public final class DOMWalker { /** Static factory for creating stream to DOM transformers. */ - private static final DocumentBuilderFactory factory = - DocumentBuilderFactory.newInstance(); + private static final DocumentBuilderFactory factory = createFactory(); + + private static DocumentBuilderFactory createFactory() { + DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); + factory.setIgnoringComments(false); + factory.setIgnoringElementContentWhitespace(true); + factory.setXIncludeAware(false); + + // Prevent XXE attacks by disabling external entity processing + factory.setExpandEntityReferences(false); + + String feature = null; + + try { + feature = XMLConstants.FEATURE_SECURE_PROCESSING; + factory.setFeature(feature, true); + feature = "http://apache.org/xml/features/disallow-doctype-decl"; + factory.setFeature(feature, true); + feature = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; + factory.setFeature(feature, false); + feature = "http://xml.org/sax/features/external-general-entities"; + factory.setFeature(feature, false); + feature = "http://xml.org/sax/features/external-parameter-entities"; + factory.setFeature(feature, false); + } catch (Exception ex) { + // abort if secure processing is not supported + throw new IllegalStateException("Secure processing feature '" + feature + "' not supported by the DocumentBuilderFactory: " + factory.getClass().getName(), ex); + } + return factory; + } /** The DOM document being traversed by this walker. */ private final Document document; @@ -57,6 +89,10 @@ public final class DOMWalker { public DOMWalker(InputStream xml) throws IOException { try { DocumentBuilder builder = factory.newDocumentBuilder(); + // defense in depth: entity resolver that will break any document on purpose + EntityResolver stopMe = (publicId, systemId) -> new InputSource( + new StringReader("")); + builder.setEntityResolver(stopMe); document = builder.parse(xml); current = document.getDocumentElement(); } catch (IOException e) { diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java index ffa24fe2001..bc241491296 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java @@ -27,10 +27,12 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; +import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; +import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -44,7 +46,9 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; +import java.io.StringReader; import java.io.Writer; +import java.rmi.server.ExportException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -112,6 +116,28 @@ private static DocumentBuilderFactory createFactory() { factory.setNamespaceAware(true); factory.setIgnoringComments(false); factory.setIgnoringElementContentWhitespace(true); + factory.setXIncludeAware(false); + + // Prevent XXE attacks by disabling external entity processing + factory.setExpandEntityReferences(false); + + String feature = null; + + try { + feature = XMLConstants.FEATURE_SECURE_PROCESSING; + factory.setFeature(feature, true); + feature = "http://apache.org/xml/features/disallow-doctype-decl"; + factory.setFeature(feature, true); + feature = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; + factory.setFeature(feature, false); + feature = "http://xml.org/sax/features/external-general-entities"; + factory.setFeature(feature, false); + feature = "http://xml.org/sax/features/external-parameter-entities"; + factory.setFeature(feature, false); + } catch (Exception ex) { + // abort if secure processing is not supported + throw new IllegalStateException("Secure processing feature '" + feature + "' not supported by the DocumentBuilderFactory: " + factory.getClass().getName(), ex); + } return factory; } @@ -279,6 +305,10 @@ private PrivilegeDefinition parseDefinition(Node n, Map namespac */ private static DocumentBuilder createDocumentBuilder() throws ParserConfigurationException { DocumentBuilder builder = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder(); + // defense in depth: entity resolver that will break any document on purpose + EntityResolver stopMe = (publicId, systemId) -> new InputSource( + new StringReader("")); + builder.setEntityResolver(stopMe); builder.setErrorHandler(new DefaultHandler()); return builder; } From 31bc56ac738f8be78162733495744dc8ff895199 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 10 Jul 2025 17:32:24 +0100 Subject: [PATCH 086/171] JCR-5166: Release Jackrabbit 2.23.2-beta - Release Notes --- RELEASE-NOTES.txt | 59 ++++++++++++++++++++++++----------------------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index eedb68ca538..eb0317229ca 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,55 +1,56 @@ -Release Notes -- Apache Jackrabbit -- Version 2.23.1-beta +Release Notes -- Apache Jackrabbit -- Version 2.23.2-beta Introduction ------------ -This is Apache Jackrabbit(TM) 2.23.1-beta, a fully compliant implementation of the +This is Apache Jackrabbit(TM) 2.23.2-beta, a fully compliant implementation of the Content Repository for Java(TM) Technology API, version 2.0 (JCR 2.0) as specified in the Java Specification Request 283 (JSR 283). -Apache Jackrabbit 2.23.1-beta is an unstable release cut directly from +Apache Jackrabbit 2.23.2-beta is an unstable release cut directly from Jackrabbit trunk, with a focus on new features and other improvements. For production use we recommend the latest stable 2.20.x release. -Changes in Jackrabbit 2.23.1-beta +Changes in Jackrabbit 2.23.2-beta ---------------------------------- Bug - [JCR-5107] - DbInputStream makes incorrect assumptions about commons-io internals + [JCR-5121] - Java 23: getSubject is supported only if a security manager is allowed Improvement - [JCR-5093] - jcr2spi: get rid of Commons IO dependency - [JCR-5106] - core tests: improve diagnostics in DBDataStoreTest + [JCR-5127] - Add javadoc links to JcrConstants' constants which have expanded name equivalents in the JCR API + [JCR-5146] - Add missing mixin values (defined in JCR 2.0 spec) to JcrConstants + [JCR-5150] - Add missing constant for jcr:title + [JCR-5152] - Add method isValidJcrLocalName(String) to o.a.j.util.Text + [JCR-5161] - Add variant of NamespaceHelper.registerNamespace -Test +Wish - [JCR-5098] - jackrabbit-jcr-server: Java 24 javadoc errors + [JCR-5157] - configure CI for PRs on github Task - [JCR-5088] - remove warnings about missing @deprecated annotations - [JCR-5089] - avoid use of deprecated junit.framework.Assert - [JCR-5094] - webapp: bump htmlunit to 4.4.0 - [JCR-5096] - JcrConstants: refer to the constants in javax.jcr.Property and javax.jcr.nodetype.NodeType - [JCR-5097] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.68.0 - [JCR-5099] - Update Logback version to 1.2.13 - [JCR-5100] - Update commons-cli dependency to 1.9.0 - [JCR-5101] - Update easymock dependency to 5.4.0 - [JCR-5102] - Update mockito dependency to 5.14.1 - [JCR-5103] - Update oak-jackrabbit-api.version.used to Oak 1.22.21 - [JCR-5104] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.70.0 - [JCR-5105] - Update commons-io dependency to 2.17.0 - [JCR-5108] - remove commons-collections4 version-specific dependency from jackrabbit-standalone - [JCR-5109] - Update tomcat dependency to 9.0.95 - [JCR-5110] - update aws java sdk version to 1.12.773 - [JCR-5111] - update kotlin-stdlib dependency to 1.9.25 - [JCR-5112] - update Jetty to 9.4.56.v20240826 - [JCR-5113] - Update pmd-plugin dependency to 3.25.0 - [JCR-5114] - update checkstyle-plugin dependency to 3.5.0 - [JCR-5115] - Update spotbugs-maven-plugin to 4.8.6.4 + [JCR-5048] - Jackrabbit should build and test with Java 24 + [JCR-5120] - webapp: update tomcat dependency to 9.0.97 + [JCR-5128] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.74.0 + [JCR-5130] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.76.0 + [JCR-5131] - jackrabbit-jcr2spi: switch to commons-collections4 4.5.0-M3 + [JCR-5132] - webapp: update tomcat dependency to 9.0.104 + [JCR-5133] - Update easymock dependency to 5.5.0 + [JCR-5134] - Update oak-jackrabbit-api.version.used to Oak 1.22.22 + [JCR-5135] - Make JNDI support opt-in + [JCR-5137] - Update JCR commons to implement current jackrabbit-api + [JCR-5138] - Borrow JackrabbitSessionImpl tests from Oak + [JCR-5143] - Update Mockito dependency to 5.17.0 + [JCR-5145] - Upgrade Commons VFS to 2.10.0 + [JCR-5147] - remove jackrabbit 1.x compatibility and performance tests + [JCR-5148] - remove (comment out) mysql test profile + [JCR-5158] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.82.0 + [JCR-5159] - Create coverage for NamespaceHelper + [JCR-5163] - Update commons file-upload dependency to 1.6.0 For more detailed information about all the changes in this and other From 56224685d952ada3e1a03d6a74e9fde1e1cd149f Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 10 Jul 2025 19:20:20 +0200 Subject: [PATCH 087/171] [maven-release-plugin] prepare release jackrabbit-2.23.2-beta --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 6 +++--- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index c16d7718e3a..44091b97f7c 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 07176a8342f..6b65f544b00 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index 2dc8d48acea..8f716cc00d9 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index db8ff449df2..1b8cad8535b 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index 1366162bf85..f2ded7a251a 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index e84ce8ce709..821fa5e8ac8 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index b249bb00f91..1d104e6f4a6 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 929f5c3aaa9..0a01fcce431 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index 715c6e7d588..915027aa23a 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index a829311864f..0049f5f5182 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index 15ca9a62f68..141b979d86f 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index d87b86cac90..53d6987c9c1 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 80953ca6b8d..0e0b48ed61d 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.2-beta-SNAPSHOT + 2.23.2-beta pom @@ -47,7 +47,7 @@ scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git https://github.com/apache/jackrabbit/tree/${project.scm.tag} - jackrabbit-2.23.1-beta + jackrabbit-2.23.2-beta @@ -76,7 +76,7 @@ 0.0 - 1728379281 + 1752166820 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index f16b4e33442..28c9aaccda9 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index 7c7d7b86da6..7b52372a775 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index 4f5935aeaf9..02dfd668b36 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index eaa313deb1d..202af811dda 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 4391f69058e..0c6234cc6d5 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index fa8e011c8e6..3be66438cfe 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index 418d84b9e9d..06d35fd08ce 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 1a66db82b62..ff598dead19 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index 7c27ec28da3..0e62e3abf13 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index 20726f32c97..f525c0bcf5c 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta-SNAPSHOT + 2.23.2-beta jackrabbit-parent/pom.xml From 49ccae25e3ae9aabdb557b645a300506af01e434 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 10 Jul 2025 19:20:29 +0200 Subject: [PATCH 088/171] [maven-release-plugin] prepare for next development iteration --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 6 +++--- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index 44091b97f7c..31865d0fbad 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 6b65f544b00..13e831eb3e6 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index 8f716cc00d9..b669e82d280 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index 1b8cad8535b..0f28949ed44 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index f2ded7a251a..16eceb6a51f 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index 821fa5e8ac8..971821a9560 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index 1d104e6f4a6..94fbc28cee9 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 0a01fcce431..8fb502e1048 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index 915027aa23a..fdcf498a8a7 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index 0049f5f5182..751900379d5 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index 141b979d86f..2c550fad0eb 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index 53d6987c9c1..3d482a40a9e 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 0e0b48ed61d..3956e25decf 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.2-beta + 2.23.3-beta-SNAPSHOT pom @@ -47,7 +47,7 @@ scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git https://github.com/apache/jackrabbit/tree/${project.scm.tag} - jackrabbit-2.23.2-beta + jackrabbit-2.23.1-beta @@ -76,7 +76,7 @@ 0.0 - 1752166820 + 1752168029 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index 28c9aaccda9..e9957b402d2 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index 7b52372a775..fc0549d1268 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index 02dfd668b36..3c7e590c0ca 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index 202af811dda..25f05554bd1 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 0c6234cc6d5..445f66248a5 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index 3be66438cfe..2b53203004c 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index 06d35fd08ce..1c9836818c4 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index ff598dead19..fe3861a8b5c 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index 0e62e3abf13..e8e0b16ea15 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index f525c0bcf5c..b5264e64f87 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.2-beta + 2.23.3-beta-SNAPSHOT jackrabbit-parent/pom.xml From 40f7d64243323788a54dc6389749572eabf2a60b Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Wed, 16 Jul 2025 16:58:50 +0200 Subject: [PATCH 089/171] JCR-5160 Generate Jacoco Report in default location to be picked up by SonarScanner for Maven The same agent is used for both ITs/UTs, one aggregate report is being used. Do no longer skip test execution for profile "javadoc" and "rat". --- jackrabbit-parent/pom.xml | 24 +++++------------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 3956e25decf..4b139f614f6 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -110,12 +110,6 @@
- - maven-surefire-plugin - - true - - @@ -135,12 +129,6 @@
- - maven-surefire-plugin - - true - - @@ -263,26 +251,25 @@ 0.8.13 - pre-unit-test + prepare-jacoco-agent prepare-agent + ${skip.coverage} - ${project.build.directory}/coverage-reports/jacoco-ut.exec test.opts.coverage + + true - post-unit-test - test + generate-jacoco-report report ${skip.coverage} - ${project.build.directory}/coverage-reports/jacoco-ut.exec - ${project.reporting.outputDirectory}/jacoco-ut @@ -291,7 +278,6 @@ check - ${project.build.directory}/coverage-reports/jacoco-ut.exec BUNDLE From f0d1c092f21c1f9e539cceb6231ca182f514e9ff Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Thu, 17 Jul 2025 08:50:55 +0200 Subject: [PATCH 090/171] Add link to SonarQube Cloud project --- README.txt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.txt b/README.txt index 776b26e2d81..af7591e072f 100644 --- a/README.txt +++ b/README.txt @@ -65,3 +65,11 @@ Credits See http://jackrabbit.apache.org/jackrabbit-team.html for the list of Jackrabbit committers and main contributors. + +SonarQube Cloud +=========== + +The CI builds automatically checks the code with SonarQube Cloud. The results +are accessible at + + https://sonarcloud.io/project/overview?id=apache_jackrabbit From 51babc7ba0d6796641f8b7fd79895174764d3f9a Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Sun, 20 Jul 2025 22:25:49 +0200 Subject: [PATCH 091/171] JCR-5175: Update Mockito dependency to 5.18.0 (#267) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 4b139f614f6..baeef600d31 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -608,7 +608,7 @@ org.mockito mockito-core - 5.17.0 + 5.18.0
From 85a1196acc804cbada29794a01591e1b99c46a05 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Sun, 20 Jul 2025 22:32:18 +0200 Subject: [PATCH 092/171] JCR-5176: Update commons-io dependency to 2.20.0 (#268) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index baeef600d31..b6278f0ccea 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -441,7 +441,7 @@ commons-io commons-io - 2.17.0 + 2.20.0 javax.transaction From ce753a02d724d775392cacd8c0a405b7a5016788 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 21 Jul 2025 09:41:09 +0200 Subject: [PATCH 093/171] JCR-5156: webapp: update tomcat dependency to 9.0.107 (#269) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index fe3861a8b5c..198dd091476 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.106 + 9.0.107 From 1b246e6e3d87dd6ad47d60c3f364eb4fce6d7042 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 21 Jul 2025 10:24:14 +0200 Subject: [PATCH 094/171] JCR-5177: jackrabbit-jcr2spi: update to commons-collections4 4.5.0 (#270) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index b6278f0ccea..5173333c52b 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -436,7 +436,7 @@ org.apache.commons commons-collections4 - 4.5.0-M3 + 4.5.0 commons-io From bb95e7b1e47e67e42542beaa3655ccf1f812cccd Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Mon, 21 Jul 2025 12:17:58 +0200 Subject: [PATCH 095/171] JCR-5173 Create aggregated coverage report JCR-5172 Exclude jackrabbit-jcr-tests from coverage calculation --- jackrabbit-parent/pom.xml | 33 +++++++++++++++++++++++++++++++++ pom.xml | 17 +++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 5173333c52b..9912adeaf48 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -185,6 +185,39 @@ false + + + + + + io.github.olamy.maven.plugins + jacoco-aggregator-maven-plugin + 1.0.3 + + + + org/apache/jackrabbit/** + + + + org/apache/jackrabbit/test/** + + + + + aggregate + verify + + report-aggregate-all + + + + + + + diff --git a/pom.xml b/pom.xml index b5264e64f87..375583509cf 100644 --- a/pom.xml +++ b/pom.xml @@ -35,6 +35,11 @@ Apache Jackrabbit pom + + + ${project.basedir}/target/site/jacoco-aggregate/jacoco.xml + + jackrabbit-parent jackrabbit-jcr-commons @@ -87,6 +92,18 @@ + + coverage + + + + io.github.olamy.maven.plugins + jacoco-aggregator-maven-plugin + false + + + + apache-release From 65fd0fa2ec9a5ffeac56e2b1b931a0a263f0a9f5 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Mon, 21 Jul 2025 19:29:36 +0200 Subject: [PATCH 096/171] JCR-5174 Exclude jackrabbit-jcr-tests from coverage calculation JCR-5172 Exclude test sources from SonarQube analysis --- jackrabbit-parent/pom.xml | 8 ++++++++ pom.xml | 5 ----- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 9912adeaf48..7e576698cc2 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -78,8 +78,16 @@ 1752168029 3.6.1 + + + ${project.basedir}/target/site/jacoco-aggregate/jacoco.xml + + org/apache/jackrabbit/test/** + + src/test/** + http://jackrabbit.apache.org/ 2004 diff --git a/pom.xml b/pom.xml index 375583509cf..515dc8542f5 100644 --- a/pom.xml +++ b/pom.xml @@ -35,11 +35,6 @@ Apache Jackrabbit pom - - - ${project.basedir}/target/site/jacoco-aggregate/jacoco.xml - - jackrabbit-parent jackrabbit-jcr-commons From 49a1bbf93668a3394f44ce611d06637f257f132e Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Thu, 24 Jul 2025 17:37:12 +0200 Subject: [PATCH 097/171] JCR-5174 Use SonarQube path patterns which should work with multimodule projects as well --- jackrabbit-parent/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 7e576698cc2..9b7499d3674 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -82,9 +82,9 @@ ${project.basedir}/target/site/jacoco-aggregate/jacoco.xml - org/apache/jackrabbit/test/** + **/org/apache/jackrabbit/test/** - src/test/** + ** From d83fb1a11e3879ce03d65f80b60b26377f1b7c36 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 28 Jul 2025 13:35:59 +0200 Subject: [PATCH 098/171] JCR-5179: set baseline comparisonVersion to latest stable (2.22.1) (#276) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 9b7499d3674..8d0a8d055ad 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -406,7 +406,7 @@ - 2.22.0 + 2.22.1 From 1d9768c1d3bbdf0cce0e2285a512f2db0c3b2f25 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 31 Jul 2025 13:23:08 +0200 Subject: [PATCH 099/171] JCR-5182: Update pax-exam test dependency to 4.14.0 (#278) --- jackrabbit-it-osgi/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index 0f28949ed44..48fd82b8fe0 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -32,7 +32,7 @@ true - 4.13.1 + 4.14.0 @@ -138,7 +138,7 @@ org.ops4j.pax.exam - pax-exam-container-forked + pax-exam-container-native ${pax.exam.version} test From 04f7d15e5f5dee4847ab38cbaba5a3285fc253b8 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 12 Aug 2025 09:55:59 +0200 Subject: [PATCH 100/171] JCR-5183: Vote Template should be clear about the fact that running the check script in "sh" will not work (#279) * JCR-5183: Vote Template should be clear about the fact that running the check script in "sh" will not work * JCR-5183: Vote Template should be clear about the fact that running the check script in "sh" will not work * JCR-5183: Vote Template should be clear about the fact that running the check script in sh will not work - fix instruction just to invoke the script with specifying the shell (ack kwin) --- pom.xml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/pom.xml b/pom.xml index 515dc8542f5..3d758614037 100644 --- a/pom.xml +++ b/pom.xml @@ -183,10 +183,14 @@ A staged Maven repository is available for review at: https://repository.apache.org/ -The command for running automated checks against this release candidate is: +The command for running automated checks requires the use of a *nix +shell such as "bash" ("sh" will not work due to the lack of certain +built-in commands). On Windows, use Cygwin or WSL. - # run in SVN checkout of https://dist.apache.org/repos/dist/dev/jackrabbit/ - $ sh check-release.sh jackrabbit ${project.version} ${checksum} +To check this release candidate, run in a SVN checkout of +<https://dist.apache.org/repos/dist/dev/jackrabbit/>: + + $ ./check-release.sh jackrabbit ${project.version} ${checksum} Please vote on releasing this package as Apache Jackrabbit ${project.version}. The vote is open for the next 72 hours and passes if a majority of at From ca08a16f95e6cc259d6150a919cea23a722d85ff Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 14 Aug 2025 07:52:13 +0200 Subject: [PATCH 101/171] JCR-5185: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.84.0 (#281) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 8d0a8d055ad..d5d3aba753f 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.82.0 + 1.84.0 1.22.22 9.4.56.v20240826 From eff3451f0b259e20d361fd607fdef77fa36f5a2f Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 15 Aug 2025 08:01:57 +0200 Subject: [PATCH 102/171] JCR-5178: Update easymock dependency to 5.6.0 (#271) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index d5d3aba753f..4a9a62c4c2d 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -639,7 +639,7 @@ org.easymock easymock - 5.5.0 + 5.6.0 junit From ec6dc26c11d760846b2e6db75855c6edd49ced4b Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 18 Aug 2025 15:39:41 +0200 Subject: [PATCH 103/171] JCR-5185: webapp: update tomcat dependency to 9.0.108 (#283) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 198dd091476..5af71a186a4 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.107 + 9.0.108 From efff5f6981659cf452e5a63d6508869afd19a8d0 Mon Sep 17 00:00:00 2001 From: Karol Lewandowski Date: Mon, 18 Aug 2025 15:46:34 +0200 Subject: [PATCH 104/171] Fix a typo: @peop -> @prop --- .../org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd b/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd index dfd785d6103..de80826add2 100644 --- a/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd +++ b/jackrabbit-core/src/main/resources/org/apache/jackrabbit/core/nodetype/builtin_nodetypes.cnd @@ -471,7 +471,7 @@ /** * Only nodes with mixin node type mix:lifecycle may participate in a lifecycle. * - * @peop jcr:lifecyclePolicy + * @prop jcr:lifecyclePolicy * This property is a reference to another node that contains * lifecycle policy information. The definition of the referenced * node is not specified. From 165d8988bdc105db55668e76af2ef0ed56a7b2c5 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Fri, 25 Jul 2025 15:30:12 +0200 Subject: [PATCH 105/171] JCR-5154 Remove deprecated Class.newInstance() --- .../org/apache/jackrabbit/core/SearchManager.java | 2 +- .../jackrabbit/core/config/SimpleBeanFactory.java | 6 ++++-- .../jackrabbit/core/query/lucene/SearchIndex.java | 12 ++++++------ .../security/principal/ProviderRegistryImpl.java | 13 ++++--------- .../lucene/directory/DirectoryManagerTest.java | 8 ++++---- .../jackrabbit/core/util/db/ConnectionFactory.java | 10 ++++------ .../jackrabbit/client/RepositoryFactoryImpl.java | 2 +- .../remoting/davex/ProtectedRemoveManager.java | 9 +++------ .../jackrabbit/webdav/simple/ResourceConfig.java | 2 +- .../jackrabbit/test/api/RepositoryFactoryTest.java | 2 +- .../jcr2spi/Jcr2spiRepositoryFactory.java | 4 ++-- .../apache/jackrabbit/jcr2spi/RepositoryImpl.java | 2 +- .../authorization/AccessControlProviderStub.java | 2 +- .../apache/jackrabbit/vfs/ext/ds/VFSDataStore.java | 2 +- .../apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java | 2 +- .../webdav/version/report/ReportType.java | 8 +++----- 16 files changed, 38 insertions(+), 48 deletions(-) diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java index 05cd8fc4099..f98a9e2092c 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java @@ -431,7 +431,7 @@ public NodeState next() { protected AbstractQueryImpl createQueryInstance() throws RepositoryException { try { String queryImplClassName = handler.getQueryClass(); - Object obj = Class.forName(queryImplClassName).newInstance(); + Object obj = Class.forName(queryImplClassName).getDeclaredConstructor().newInstance(); if (obj instanceof AbstractQueryImpl) { return (AbstractQueryImpl) obj; } else { diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SimpleBeanFactory.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SimpleBeanFactory.java index d81230003f1..56dd2daa1bc 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SimpleBeanFactory.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/config/SimpleBeanFactory.java @@ -17,6 +17,8 @@ package org.apache.jackrabbit.core.config; +import java.lang.reflect.InvocationTargetException; + import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,12 +41,12 @@ public Object newInstance(Class klass, BeanConfig config) throws Configuratio } // Instantiate the object using the default constructor - return objectClass.newInstance(); + return objectClass.getDeclaredConstructor().newInstance(); } catch (ClassNotFoundException e) { throw new ConfigurationException( "Configured bean implementation class " + cname + " was not found.", e); - } catch (InstantiationException e) { + } catch (InstantiationException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException e) { throw new ConfigurationException( "Configured bean implementation class " + cname + " can not be instantiated.", e); diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java index 8e4db22cc2e..0f79761fafa 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java @@ -933,7 +933,7 @@ public ExcerptProvider createExcerptProvider(Query query) throws IOException { ExcerptProvider ep; try { - ep = (ExcerptProvider) excerptProviderClass.newInstance(); + ep = (ExcerptProvider) excerptProviderClass.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw Util.createIOException(e); } @@ -1307,7 +1307,7 @@ protected SynonymProvider createSynonymProvider() { SynonymProvider sp = null; if (synonymProviderClass != null) { try { - sp = (SynonymProvider) synonymProviderClass.newInstance(); + sp = (SynonymProvider) synonymProviderClass.getDeclaredConstructor().newInstance(); sp.initialize(createSynonymProviderConfigResource()); } catch (Exception e) { log.warn("Exception initializing synonym provider: " @@ -1331,7 +1331,7 @@ protected DirectoryManager createDirectoryManager() throw new IOException(directoryManagerClass + " is not a DirectoryManager implementation"); } - DirectoryManager df = (DirectoryManager) clazz.newInstance(); + DirectoryManager df = (DirectoryManager) clazz.getDeclaredConstructor().newInstance(); df.init(this); return df; } catch (IOException e) { @@ -1356,7 +1356,7 @@ protected RedoLogFactory createRedoLogFactory() throws IOException { throw new IOException(redoLogFactoryClass + " is not a RedoLogFactory implementation"); } - return (RedoLogFactory) clazz.newInstance(); + return (RedoLogFactory) clazz.getDeclaredConstructor().newInstance(); } catch (Exception e) { IOException ex = new IOException(); ex.initCause(e); @@ -1420,7 +1420,7 @@ protected SpellChecker createSpellChecker() { SpellChecker spCheck = null; if (spellCheckerClass != null) { try { - spCheck = (SpellChecker) spellCheckerClass.newInstance(); + spCheck = (SpellChecker) spellCheckerClass.getDeclaredConstructor().newInstance(); spCheck.init(this); } catch (Exception e) { log.warn("Exception initializing spell checker: " @@ -2422,7 +2422,7 @@ public String getSynonymProviderConfigPath() { public void setSimilarityClass(String className) { try { Class similarityClass = Class.forName(className); - similarity = (Similarity) similarityClass.newInstance(); + similarity = (Similarity) similarityClass.getDeclaredConstructor().newInstance(); } catch (Exception e) { log.warn("Invalid Similarity class: " + className, e); } diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/ProviderRegistryImpl.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/ProviderRegistryImpl.java index 6a233db45f1..674a5e8c034 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/ProviderRegistryImpl.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/security/principal/ProviderRegistryImpl.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.core.security.principal; +import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; @@ -128,17 +129,11 @@ private PrincipalProvider createProvider(Properties config) } try { - Class pc = Class.forName(className, true, BeanConfig.getDefaultClassLoader()); - PrincipalProvider pp = (PrincipalProvider) pc.newInstance(); + Class pc = Class.forName(className, true, BeanConfig.getDefaultClassLoader()); + PrincipalProvider pp = (PrincipalProvider) pc.getDeclaredConstructor().newInstance(); pp.init(config); return pp; - } catch (ClassNotFoundException e) { - throw new RepositoryException("Unable to create new principal provider.", e); - } catch (IllegalAccessException e) { - throw new RepositoryException("Unable to create new principal provider.", e); - } catch (InstantiationException e) { - throw new RepositoryException("Unable to create new principal provider.", e); - } catch (ClassCastException e) { + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { throw new RepositoryException("Unable to create new principal provider.", e); } } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/directory/DirectoryManagerTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/directory/DirectoryManagerTest.java index 5651aaef3a9..1b80f02c2ba 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/directory/DirectoryManagerTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/directory/DirectoryManagerTest.java @@ -32,7 +32,7 @@ */ public class DirectoryManagerTest extends TestCase { - private static final Collection IMPLEMENTATIONS = Arrays.asList( + private static final Collection> IMPLEMENTATIONS = Arrays.asList( new Class[]{FSDirectoryManager.class, RAMDirectoryManager.class}); private static final SearchIndex INDEX = new SearchIndex(); @@ -91,9 +91,9 @@ public void call(DirectoryManager directoryManager) throws Exception { } private void execute(Callable callable) throws Exception { - for (Iterator it = IMPLEMENTATIONS.iterator(); it.hasNext(); ) { - Class clazz = (Class) it.next(); - DirectoryManager dirMgr = (DirectoryManager) clazz.newInstance(); + for (Iterator> it = IMPLEMENTATIONS.iterator(); it.hasNext(); ) { + Class clazz = it.next(); + DirectoryManager dirMgr = (DirectoryManager) clazz.getDeclaredConstructor().newInstance(); dirMgr.init(INDEX); try { callable.call(dirMgr); diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java index b5241e897c4..65f63eb5694 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.core.util.db; +import java.lang.reflect.InvocationTargetException; import java.sql.Connection; import java.sql.Driver; import java.sql.SQLException; @@ -286,7 +287,7 @@ private DataSource getJndiDataSource( Class contextClass, String name) throws RepositoryException { try { - Object object = contextClass.newInstance().lookup(name); + Object object = contextClass.getDeclaredConstructor().newInstance().lookup(name); if (object instanceof DataSource) { return (DataSource) object; } else { @@ -294,10 +295,7 @@ private DataSource getJndiDataSource( "Object " + object + " with JNDI name " + name + " is not a JDBC DataSource"); } - } catch (InstantiationException e) { - throw new RepositoryException( - "Invalid JNDI context: " + contextClass.getName(), e); - } catch (IllegalAccessException e) { + } catch (InstantiationException|IllegalAccessException|IllegalArgumentException|InvocationTargetException|NoSuchMethodException|SecurityException e) { throw new RepositoryException( "Invalid JNDI context: " + contextClass.getName(), e); } catch (NamingException e) { @@ -328,7 +326,7 @@ private BasicDataSource getDriverDataSource( // The JDBC specification recommends the Class.forName // method without the .newInstance() method call, // but it is required after a Derby 'shutdown' - instance = (Driver) driverClass.newInstance(); + instance = (Driver) driverClass.getDeclaredConstructor().newInstance(); } catch (Throwable e) { // Ignore exceptions as there's no requirement for // a JDBC driver class to have a public default constructor diff --git a/jackrabbit-jcr-client/src/main/java/org/apache/jackrabbit/client/RepositoryFactoryImpl.java b/jackrabbit-jcr-client/src/main/java/org/apache/jackrabbit/client/RepositoryFactoryImpl.java index a8923f4adb4..924689a0795 100644 --- a/jackrabbit-jcr-client/src/main/java/org/apache/jackrabbit/client/RepositoryFactoryImpl.java +++ b/jackrabbit-jcr-client/src/main/java/org/apache/jackrabbit/client/RepositoryFactoryImpl.java @@ -65,7 +65,7 @@ public Repository getRepository(@SuppressWarnings("rawtypes") Map parameters) th Class repositoryFactoryClass = Class.forName(repositoryFactoryName, true, Thread.currentThread().getContextClassLoader()); - repositoryFactory = repositoryFactoryClass.newInstance(); + repositoryFactory = repositoryFactoryClass.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw new RepositoryException(e); diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/ProtectedRemoveManager.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/ProtectedRemoveManager.java index f6e3f785a54..3e85135c688 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/ProtectedRemoveManager.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/ProtectedRemoveManager.java @@ -21,6 +21,7 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; @@ -91,14 +92,10 @@ ProtectedItemRemoveHandler createHandler(String className) { if (!className.isEmpty()) { Class irHandlerClass = Class.forName(className); if (ProtectedItemRemoveHandler.class.isAssignableFrom(irHandlerClass)) { - irHandler = (ProtectedItemRemoveHandler) irHandlerClass.newInstance(); + irHandler = (ProtectedItemRemoveHandler) irHandlerClass.getDeclaredConstructor().newInstance(); } } - } catch (ClassNotFoundException e) { - log.error(e.getMessage(), e); - } catch (InstantiationException e) { - log.error(e.getMessage(), e); - } catch (IllegalAccessException e) { + } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { log.error(e.getMessage(), e); } return irHandler; diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java index 1292b129ce3..defe7a522bb 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/webdav/simple/ResourceConfig.java @@ -351,7 +351,7 @@ private static Object buildClassFromConfig(Element parent) { String className = DomUtil.getAttribute(classElem, "name", null); if (className != null) { Class c = Class.forName(className); - instance = c.newInstance(); + instance = c.getDeclaredConstructor().newInstance(); } else { log.error("Invalid configuration: missing 'class' element"); } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java index 2f39caedca2..16a7c1f55ba 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/api/RepositoryFactoryTest.java @@ -47,7 +47,7 @@ protected RepositoryFactory getRepositoryFactory() fail("Property '" + RepositoryStub.REPOSITORY_FACTORY + "' is not defined."); } else { try { - return (RepositoryFactory) Class.forName(className).newInstance(); + return (RepositoryFactory) Class.forName(className).getDeclaredConstructor().newInstance(); } catch (Exception e) { fail(e.toString()); } diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java index b4e00ee3894..7200b74fc4e 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/Jcr2spiRepositoryFactory.java @@ -191,7 +191,7 @@ private static RepositoryServiceFactory getServiceFactory(Map parameters) serviceFactoryClass = Class.forName(serviceFactoryName); } - Object serviceFactory = serviceFactoryClass.newInstance(); + Object serviceFactory = serviceFactoryClass.getDeclaredConstructor().newInstance(); if (serviceFactory instanceof RepositoryServiceFactory) { log.debug("Found RepositoryServiceFactory {}", serviceFactory); @@ -248,7 +248,7 @@ public int getPollTimeout() { public T getConfiguration(String name, T defaultValue) { if (parameters.containsKey(name)) { Object value = parameters.get(name); - Class clazz = (defaultValue == null) + Class clazz = (defaultValue == null) ? value.getClass() : defaultValue.getClass(); if (clazz.isAssignableFrom(value.getClass())) { diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java index 712cb5cbe2c..5dd6d9ce71c 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/RepositoryImpl.java @@ -243,7 +243,7 @@ public Object getObjectInstance(Object obj, Name name, Context nameCtx, Hashtabl } String repositoryConfigClassName = (String)((StringRefAddr)rclas).getContent(); - Object rof = Class.forName(configFactoryClassName).newInstance(); + Object rof = Class.forName(configFactoryClassName).getDeclaredConstructor().newInstance(); if (! (rof instanceof ObjectFactory)) { throw new Exception(rof + " must implement ObjectFactory"); diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/AccessControlProviderStub.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/AccessControlProviderStub.java index 23ace3a6c02..fcb2c2b8cd8 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/AccessControlProviderStub.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/security/authorization/AccessControlProviderStub.java @@ -69,7 +69,7 @@ public static AccessControlProvider newInstance(RepositoryConfig config) throws try { Class acProviderClass = Class.forName(className); if (AccessControlProvider.class.isAssignableFrom(acProviderClass)) { - AccessControlProvider acProvider = (AccessControlProvider) acProviderClass.newInstance(); + AccessControlProvider acProvider = (AccessControlProvider) acProviderClass.getDeclaredConstructor().newInstance(); acProvider.init(config); return acProvider; } else { diff --git a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSDataStore.java b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSDataStore.java index 5e03d66ad28..8dd9cfe9606 100644 --- a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSDataStore.java +++ b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/ds/VFSDataStore.java @@ -300,7 +300,7 @@ protected FileSystemManager createFileSystemManager() throws RepositoryException fileSystemManager = new StandardFileSystemManager(); } else { final Class mgrClass = Class.forName(getFileSystemManagerClassName()); - fileSystemManager = (FileSystemManager) mgrClass.newInstance(); + fileSystemManager = (FileSystemManager) mgrClass.getDeclaredConstructor().newInstance(); } if (fileSystemManager instanceof DefaultFileSystemManager) { diff --git a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java index 8eb1ea1958c..21f08a4b60e 100755 --- a/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java +++ b/jackrabbit-vfs-ext/src/main/java/org/apache/jackrabbit/vfs/ext/fs/VFSFileSystem.java @@ -528,7 +528,7 @@ protected FileSystemManager createFileSystemManager() throws FileSystemException fileSystemManager = new StandardFileSystemManager(); } else { final Class mgrClass = Class.forName(getFileSystemManagerClassName()); - fileSystemManager = (FileSystemManager) mgrClass.newInstance(); + fileSystemManager = (FileSystemManager) mgrClass.getDeclaredConstructor().newInstance(); } if (fileSystemManager instanceof DefaultFileSystemManager) { diff --git a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportType.java b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportType.java index 36bbe30b67e..8366814ba19 100644 --- a/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportType.java +++ b/jackrabbit-webdav/src/main/java/org/apache/jackrabbit/webdav/version/report/ReportType.java @@ -28,6 +28,7 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; +import java.lang.reflect.InvocationTargetException; import java.util.HashMap; /** @@ -68,13 +69,10 @@ private ReportType(String localName, Namespace namespace, String key, Class Date: Fri, 25 Jul 2025 14:57:42 +0200 Subject: [PATCH 106/171] JCR-5141 Deprecate JsonParser Recommend using JSON-P instead --- .../java/org/apache/jackrabbit/commons/json/JsonHandler.java | 2 ++ .../java/org/apache/jackrabbit/commons/json/JsonParser.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonHandler.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonHandler.java index 0f55db30c47..3b71a4fb278 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonHandler.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonHandler.java @@ -21,7 +21,9 @@ /** * The JSONHandler interface receives notifications from the * JsonParser. + * @deprecated use JSON Processing API instead. */ +@Deprecated(since="2.24.0") public interface JsonHandler { /** diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java index 529d48690b6..2433e83e493 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/json/JsonParser.java @@ -29,7 +29,9 @@ * JsonParser parses and validates the JSON object passed upon * {@link #parse(String)} or {@link #parse(InputStream, String)} and notifies * the specified JsonHandler + * @deprecated use JSON Processing API instead. */ +@Deprecated(since="2.24.0") public class JsonParser { private static final String NULL = "null"; From 41d5fc8ef098f7728372ab93f6755e5057d628a9 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 19 Sep 2025 11:12:42 +0200 Subject: [PATCH 107/171] JCR-5175: Update Mockito dependency to 5.19.0 (#286) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 4a9a62c4c2d..88deb362f57 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -649,7 +649,7 @@ org.mockito mockito-core - 5.18.0 + 5.19.0 From da75c725ded1d3399a19a5d04dfbfaf5e7c7b659 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 19 Sep 2025 12:37:47 +0200 Subject: [PATCH 108/171] JCR-5187: Update commons-cli dependency to 1.10.0 (#287) --- jackrabbit-standalone-components/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 445f66248a5..78699635eda 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -134,7 +134,7 @@ commons-cli commons-cli - 1.9.0 + 1.10.0 commons-chain From c0a5bc9d397527a3ad08a4f1037bfc61747e3b27 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 19 Sep 2025 14:08:37 +0200 Subject: [PATCH 109/171] JCR-5188: Update h2db dependency to 2.3.232 (#288) --- jackrabbit-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 13e831eb3e6..8db408dfa53 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -332,7 +332,7 @@ org.apache.jackrabbit.core.version.ModifyNonVersionableCheckedOutTest#testModify com.h2database h2 - 2.2.224 + 2.3.232 test From 0a9a803bfe99f516bb3cb35ea097d4c6ca42d4b6 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 19 Sep 2025 16:49:25 +0200 Subject: [PATCH 110/171] JCR-5156: webapp: update tomcat dependency to 9.0.109 (#289) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 5af71a186a4..fbd62ac65f7 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.108 + 9.0.109 From eb4fcb9a0482206a8a04623d59c605fcec92c069 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Sun, 21 Sep 2025 12:06:08 +0200 Subject: [PATCH 111/171] JCR-5189: update Jetty to 9.4.58.v20250814 (#290) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 88deb362f57..8bb8c927a23 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -58,7 +58,7 @@ 1.84.0 1.22.22 - 9.4.56.v20240826 + 9.4.58.v20250814 2.4.1 ${project.build.sourceEncoding} 1.7.36 From 6a85186adf19fdb668e015611057d2ac2b727dcd Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 22 Sep 2025 10:41:09 +0200 Subject: [PATCH 112/171] JCR-5190: webapp: bump htmlunit to 4.16.0 (#292) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index fbd62ac65f7..1acd5b8ee3c 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -104,7 +104,7 @@ org.htmlunit htmlunit - 4.7.0 + 4.16.0 test From f9035e3340526880f95e83c794ba49b5f6aa2045 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 22 Sep 2025 11:56:01 +0200 Subject: [PATCH 113/171] JCR-5175: Update Mockito dependency to 5.20.0 (#293) * JCR-5175: Update Mockito dependency to 5.19.0 * JCR-5187: Update commons-cli dependency to 1.10.0 (#287) * JCR-5188: Update h2db dependency to 2.3.232 (#288) * JCR-5156: webapp: update tomcat dependency to 9.0.109 (#289) * JCR-5189: update Jetty to 9.4.58.v20250814 (#290) * JCR-5175: Update Mockito dependency to 5.20.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 8bb8c927a23..a83f32853d1 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -649,7 +649,7 @@ org.mockito mockito-core - 5.19.0 + 5.20.0 From 39e85e87971669037c46aae42ad109ca23f6c3b5 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 22 Sep 2025 12:17:32 +0200 Subject: [PATCH 114/171] JCR-5191: remove JEXL dependency (#294) --- jackrabbit-standalone-components/pom.xml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 78699635eda..6512c4143ee 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -167,17 +167,6 @@ jline 0.9.94 - - commons-jexl - commons-jexl - 1.1 - - - commons-logging - commons-logging - - - From f6704bfd26356acef33ea81b0c8180ec69e6ab4a Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 22 Sep 2025 12:22:00 +0200 Subject: [PATCH 115/171] JCR-5192: update aws java sdk version to 1.12.791 (#295) --- jackrabbit-aws-ext/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index 31865d0fbad..eb72d02df93 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -49,7 +49,7 @@ com.amazonaws aws-java-sdk-s3 - 1.12.773 + 1.12.791 org.apache.jackrabbit From 61c84ac2ffb660ce77c1add17af773763c24d074 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 22 Sep 2025 13:29:50 +0200 Subject: [PATCH 116/171] JCR-5193: update Apache parent pom to version 35 (#296) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index a83f32853d1..26b4f46e5d5 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -27,7 +27,7 @@ org.apache apache - 33 + 35 From 413acb9864adff47e47d57bd5ebc61d35a68c7c7 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 22 Sep 2025 21:30:05 +0200 Subject: [PATCH 117/171] JCR-5185: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.86.0 (#297) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 26b4f46e5d5..857887097e3 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.84.0 + 1.86.0 1.22.22 9.4.58.v20250814 From 542d9af96172ac59995c81454f5a8d84b88698f0 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 30 Sep 2025 16:20:32 +0200 Subject: [PATCH 118/171] JCR-5140: Improve support for generating namespace prefixes (#255) --- .../jackrabbit/commons/NamespaceHelper.java | 147 +++++++++++- .../commons/NamespaceHelperTest.java | 222 ++++++++++++++---- 2 files changed, 306 insertions(+), 63 deletions(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java index 978269a5eb0..457463d9012 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/NamespaceHelper.java @@ -16,8 +16,15 @@ */ package org.apache.jackrabbit.commons; +import java.math.BigInteger; +import java.nio.charset.StandardCharsets; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; import java.util.HashMap; +import java.util.Locale; import java.util.Map; +import java.util.UUID; +import java.util.function.UnaryOperator; import javax.jcr.NamespaceException; import javax.jcr.NamespaceRegistry; @@ -220,26 +227,31 @@ public String registerNamespace(String prefix, String uri) // Check if the namespace is registered registry.getPrefix(uri); } catch (NamespaceException e1) { - // Replace troublesome prefix hints + // Throw away Troublesome prefix hints if (prefix == null || prefix.isEmpty() || prefix.toLowerCase().startsWith("xml") || !XMLChar.isValidNCName(prefix)) { - prefix = "ns"; // ns, ns2, ns3, ns4, ... + prefix = null; } - // Loop until an unused prefix is found - try { - String base = prefix; - for (int i = 2; true; i++) { - registry.getURI(prefix); - prefix = base + i; - } - } catch (NamespaceException e2) { - // Exit the loop - } + if (prefix == null) { + prefix = suggestPrefix(uri, pref -> { + // prefix checker + try { + return registry.getURI(pref); + } catch (RepositoryException e) { + return null; + } + }); + } // Register the namespace - registry.registerNamespace(prefix, uri); + try { + registry.registerNamespace(prefix, uri); + } catch (NamespaceException ex) { + // likely prefix is already in use; retry with null prefix + return registerNamespace(null, uri); + } } return session.getNamespacePrefix(uri); @@ -258,4 +270,113 @@ public void registerNamespaces(Map namespaces) throws RepositoryE } } + // non-public supporting code + + // map with 'optimal' prefix mappings; hard-wired should be ok for now + private static final Map KNOWN_PREFIXES = + Map.of("http://creativecommons.org/ns#", "cc", + "http://purl.org/dc/terms/", "dc", + "http://ns.adobe.com/DICOM/", "DICOM", + "http://ns.adobe.com/exif/1.0/", "exif", + "http://ns.adobe.com/pdf/1.3/", "pdf", + "http://ns.adobe.com/pdfx/1.3/", "pdfx", + "http://ns.adobe.com/photoshop/1.0/", "photoshop", + "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "rdf", + "http://ns.adobe.com/tiff/1.0/", "tiff", + "http://ns.adobe.com/xap/1.0/", "xmp"); + + + // suggest an available prefix for the provided namespace, based on a random UUID + // (last resort) + private static String devisePrefixByUUID(String namespace, UnaryOperator lookupNamespace) { + String prefix; + + do { + prefix = "u-" + UUID.randomUUID(); + } while (namespace.equals(lookupNamespace.apply(prefix))); + + return prefix; + } + + // compute SHA-256, null when NoSuchAlgorithmException + private static String getSha256(String namespace) { + try { + byte[] bytes = MessageDigest.getInstance("SHA-256").digest(namespace.getBytes(StandardCharsets.UTF_8)); + return new BigInteger(1, bytes).toString(16); + } catch (NoSuchAlgorithmException e) { + // this really, really should not happen + return null; + } + } + + // suggest an available prefix for the provided namespace, based on the sha-256 + // of the namespace name, and a final fallback to UUID based (while considering pre-existing mappings) + private static String devisePrefixTrySha256(String namespace, UnaryOperator lookupNamespace) { + + String sha = getSha256(namespace); + if (sha != null) { + for (int i = 7; i <= sha.length(); i++) { + String prefix = "s-" + sha.substring(0, i); + String lookedUpPrefix = lookupNamespace.apply(prefix); + if (lookedUpPrefix == null) { + // unused, so go ahead with this prefix + return prefix; + } + } + } + + // fallback to UUID + return devisePrefixByUUID(namespace, lookupNamespace); + } + + // suggest an available prefix for the provided namespace, based on the characters + // in the namespace name (while considering pre-existing mappings) + private static String devisePrefix(String namespace, UnaryOperator lookupNamespace) { + String prefix = namespace.toLowerCase(Locale.ENGLISH); + + // strip scheme when http(s) + if (prefix.startsWith("http://")) { + prefix = prefix.substring("http://".length()); + } else if (prefix.startsWith("https://")) { + prefix = prefix.substring("https://".length()); + } + + // strip common host name prefixes + if (prefix.startsWith("www.")) { + prefix = prefix.substring("www.".length()); + } else if (prefix.startsWith("ns.")) { + prefix = prefix.substring("ns.".length()); + } + + // replace characters not allowed in prefix (here: '\', '/' and :) + prefix = prefix.replaceAll("[\\/:]+", "-"); + + // strip trailing replacement character + while (prefix.endsWith("-")) { + prefix = prefix.substring(0, prefix.length() - 1); + } + + String lookedUpNamespace = lookupNamespace.apply(prefix); + if (lookedUpNamespace == null || lookedUpNamespace.equals(namespace)) { + return prefix; + } else { + return devisePrefixTrySha256(namespace, lookupNamespace); + } + } + + // suggest an available prefix for the provided namespace (while considering pre-existing mappings) + private static String suggestPrefix(String namespace, UnaryOperator lookupPrefix) { + // try hard-wired map + String known = KNOWN_PREFIXES.get(namespace); + + // lookup using supplied mapper as well + String lookedUpNamespace = known != null ? lookupPrefix.apply(known) : null; + + // return hardwired prefix if unused or mapper has the prefix mapped to the same namespace + if (known != null && (lookedUpNamespace == null || namespace.equals(lookedUpNamespace))) { + return known; + } else { + return devisePrefix(namespace, lookupPrefix); + } + } } diff --git a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java index f4baa5c62e7..7db200b622a 100644 --- a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java +++ b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/commons/NamespaceHelperTest.java @@ -143,17 +143,151 @@ public void testRegisterNamespaceAlreadyRegistered() throws RepositoryException assertEquals("xyz", prefix); } - public void testRegisterNamespace() throws RepositoryException { + public void testRegisterNamespaceDeriving() throws RepositoryException { Workspace workspace = Mockito.mock(Workspace.class); - NamespaceRegistry nsReg = Mockito.mock(NamespaceRegistry.class); + NamespaceRegistry nsReg = mockNamespaceRegistry(); + Session session = mockSessionWithoutSessionMappings(); + + when(session.getWorkspace()).thenReturn(workspace); + when(workspace.getNamespaceRegistry()).thenReturn(nsReg); + NamespaceHelper nsHelper = new NamespaceHelper(session); + + // check deriving from namespace name + assertEquals("example.com-foo", nsHelper.registerNamespace(null, "https://ns.example.com/foo")); + + // check deriving from namespace name with prefix already taken, hash used instead + assertEquals("s-12a490e", nsHelper.registerNamespace(null, "http://www.example.com/foo")); + + // nasty: computed hash already used as prefix + assertEquals("example.com-bar", nsHelper.registerNamespace(null, "http://www.example.com/bar")); + assertEquals("s-b2e675c", nsHelper.registerNamespace("s-b2e675c", "ouch:")); + // returned prefix uses the SHA, but one more character + assertEquals("s-b2e675c8", nsHelper.registerNamespace(null, "example.com/bar")); + } + + public void testRegisterNamespaceKnownMapping() throws RepositoryException { + Workspace workspace = Mockito.mock(Workspace.class); + NamespaceRegistry nsReg = mockNamespaceRegistry(); + Session session = mockSessionWithoutSessionMappings(); + + when(session.getWorkspace()).thenReturn(workspace); + when(workspace.getNamespaceRegistry()).thenReturn(nsReg); + NamespaceHelper nsHelper = new NamespaceHelper(session); + + // check deriving from namespace name + assertEquals("example.com-foo", nsHelper.registerNamespace(null, "https://ns.example.com/foo")); + } + + public void testRegisterNamespaceSimple() throws RepositoryException { + Workspace workspace = Mockito.mock(Workspace.class); + NamespaceRegistry nsReg = mockNamespaceRegistry(); + Session session = mockSessionWithoutSessionMappings(); + + when(session.getWorkspace()).thenReturn(workspace); + when(workspace.getNamespaceRegistry()).thenReturn(nsReg); + NamespaceHelper nsHelper = new NamespaceHelper(session); + + // simple cases + assertEquals("foo", nsHelper.registerNamespace("", "foo:")); + assertEquals("foo2", nsHelper.registerNamespace("", "foo2:")); + + // suggested prefix will be ignored because it is illegal, so a new prefix is generated + assertEquals("foo3", nsHelper.registerNamespace("xmlxxx", "foo3:")); + + // suggested prefix will be ignored because it is illegal, so a new prefix is generated + assertEquals("foo4", nsHelper.registerNamespace("123", "foo4:")); + + // suggested prefix will be ignored because it is illegal, however the namespace name already is mapped + assertEquals("foo3", nsHelper.registerNamespace("xmlxxx", "foo3:")); + + // null prefix, handled like illegal prefix, namespace name is new thus new prefix + assertEquals("foo6", nsHelper.registerNamespace(null, "foo6:")); + + // simple case: new namespace name, new prefix + assertEquals("bar", nsHelper.registerNamespace("bar", "bar:")); + + // suggested prefix already is mapped to a different namespace, derive new one based on namespace name + assertEquals("bar2", nsHelper.registerNamespace("bar", "bar2:")); + + // repeat + assertEquals("bar3", nsHelper.registerNamespace("bar", "bar3:")); + + // check invocation count for getNamespaceRegistry (JCR-5161) + Mockito.verify(workspace, Mockito.times(1)).getNamespaceRegistry(); + } + + public void testRegisterNamespacePreferredPrefixTaken() throws RepositoryException { + Workspace workspace = Mockito.mock(Workspace.class); + NamespaceRegistry nsReg = mockNamespaceRegistry(); + Session session = mockSessionWithoutSessionMappings(); when(session.getWorkspace()).thenReturn(workspace); when(workspace.getNamespaceRegistry()).thenReturn(nsReg); + NamespaceHelper nsHelper = new NamespaceHelper(session); - // poor man's namespace registry + // nasty: registering a preferred namespace prefix, fall back to namespace name based prefix generation + assertEquals("xmp", nsHelper.registerNamespace("xmp", "xmp-ouch:")); + assertEquals("adobe.com-xap-1.0", nsHelper.registerNamespace(null, "http://ns.adobe.com/xap/1.0/")); + } + + public void testRegisterNamespaceImmutableMappings() throws RepositoryException { + Workspace workspace = Mockito.mock(Workspace.class); + NamespaceRegistry nsReg = mockNamespaceRegistry(); + Session session = mockSessionWithoutSessionMappings(); - final HashMap pref2uri = new HashMap<>(); - final HashMap uri2pref = new HashMap<>(); + when(session.getWorkspace()).thenReturn(workspace); + when(workspace.getNamespaceRegistry()).thenReturn(nsReg); + NamespaceHelper nsHelper = new NamespaceHelper(session); + + // attempt to register over immutable mappings returns hardwired prefix + assertEquals("jcr", nsHelper.registerNamespace("wtf", NamespaceRegistry.NAMESPACE_JCR)); + assertEquals("xml", nsHelper.registerNamespace("", NamespaceRegistry.NAMESPACE_XML)); + } + + public void testRegisterNamespaceProblematicNames() throws RepositoryException { + Workspace workspace = Mockito.mock(Workspace.class); + NamespaceRegistry nsReg = mockNamespaceRegistry(); + Session session = mockSessionWithoutSessionMappings(); + + when(session.getWorkspace()).thenReturn(workspace); + when(workspace.getNamespaceRegistry()).thenReturn(nsReg); + NamespaceHelper nsHelper = new NamespaceHelper(session); + + // problematic trailing chars + assertEquals("urn-xyz", nsHelper.registerNamespace("", "urn:xyz::")); + // would be same prefix after removing trailing problems, thus falling back to hash + assertEquals("s-98cf7c3", nsHelper.registerNamespace("", "urn:xyz:::")); + } + + public void testRegisterMultipleNamespaces() throws RepositoryException { + Workspace workspace = Mockito.mock(Workspace.class); + NamespaceRegistry nsReg = mockNamespaceRegistry(); + Session session = mockSessionWithoutSessionMappings(); + + when(session.getWorkspace()).thenReturn(workspace); + when(workspace.getNamespaceRegistry()).thenReturn(nsReg); + NamespaceHelper nsHelper = new NamespaceHelper(session); + + Map input = Map.of("test1", "test1:", "test2", "test2", "", "test3:"); + nsHelper.registerNamespaces(input); + + // registered prefixes as suggested + assertEquals("test1", nsReg.getPrefix("test1:")); + + // test2 is invalid namespace name, but reluctantly accepted + assertEquals("test2", nsReg.getPrefix("test2")); + + // no prefix suggested, prefix derived from namespace name + assertEquals("test3", nsReg.getPrefix("test3:")); + } + + // poor man's namespace registry + + private Map pref2uri = new HashMap<>(); + private Map uri2pref = new HashMap<>(); + + private NamespaceRegistry mockNamespaceRegistry() throws RepositoryException { + NamespaceRegistry result = Mockito.mock(NamespaceRegistry.class); // defaults (incomplete) pref2uri.put("xml", NamespaceRegistry.NAMESPACE_XML); @@ -163,78 +297,66 @@ public void testRegisterNamespace() throws RepositoryException { Mockito.doAnswer(invocation -> { String rpref = invocation.getArgument(0); - String ruri = invocation.getArgument(1); - if (null != uri2pref.get(ruri) || null != pref2uri.get(rpref)) { - throw new NamespaceException(); + String rname = invocation.getArgument(1); + if (null != uri2pref.get(rname)) { + throw new NamespaceException("namespace name '" + rname + "' already registered"); + } else if (null != pref2uri.get(rpref)) { + throw new NamespaceException("namespace prefix '" + rpref + "' already registered"); } else { - pref2uri.put(rpref, ruri); - uri2pref.put(ruri, rpref); + pref2uri.put(rpref, rname); + uri2pref.put(rname, rpref); return null; } - }).when(nsReg).registerNamespace(any(), any()); + }).when(result).registerNamespace(any(), any()); - when(nsReg.getPrefix(any())).thenAnswer(invocation -> { - String found = uri2pref.get(invocation.getArgument(0)); + when(result.getPrefix(any())).thenAnswer(invocation -> { + String name = invocation.getArgument(0); + String found = uri2pref.get(name); if (found != null) { return found; } else { - throw new NamespaceException(); + throw new NamespaceException("namespace name '" + name + "' not registered"); } }); - when(nsReg.getURI(any())).thenAnswer(invocation -> { - String found = pref2uri.get(invocation.getArgument(0)); + when(result.getURI(any())).thenAnswer(invocation -> { + String prefix = invocation.getArgument(0); + String found = pref2uri.get(prefix); if (found != null) { return found; } else { - throw new NamespaceException(); + throw new NamespaceException("namespace prefix '" + prefix + "' not registered"); } }); - when(session.getNamespacePrefix(any())).thenAnswer(invocation -> { - String found = uri2pref.get(invocation.getArgument(0)); + return result; + } + + private Session mockSessionWithoutSessionMappings() throws RepositoryException { + Session result = Mockito.mock(Session.class); + + // no session-local mappings + + when(result.getNamespacePrefix(any())).thenAnswer(invocation -> { + String namespace = invocation.getArgument(0); + String found = uri2pref.get(namespace); if (found != null) { return found; } else { - throw new NamespaceException(); + throw new NamespaceException("no mapping found for namespace '" + namespace + "'"); } }); - when(session.getNamespaceURI(any())).thenAnswer(invocation -> { - String found = pref2uri.get(invocation.getArgument(0)); + when(result.getNamespaceURI(any())).thenAnswer(invocation -> { + String prefix = invocation.getArgument(0); + String found = pref2uri.get(prefix); if (found != null) { return found; } else { - throw new NamespaceException(); + throw new NamespaceException("no mapping found for prefix '" + prefix + "'"); } }); - NamespaceHelper nsHelper = new NamespaceHelper(session); - - // register namespace (test makes assumptions about implementation) - - assertEquals("ns", nsHelper.registerNamespace("", "foo:")); - assertEquals("ns2", nsHelper.registerNamespace("", "foo2:")); - assertEquals("ns3", nsHelper.registerNamespace("xmlxxx", "foo3:")); - assertEquals("ns4", nsHelper.registerNamespace("123", "foo4:")); - assertEquals("ns3", nsHelper.registerNamespace("xmlxxx", "foo3:")); - assertEquals("ns5", nsHelper.registerNamespace(null, "foo6:")); - - assertEquals("bar", nsHelper.registerNamespace("bar", "bar:")); - assertEquals("bar2", nsHelper.registerNamespace("bar", "bar2:")); - assertEquals("bar3", nsHelper.registerNamespace("bar", "bar3:")); - - assertEquals("jcr", nsHelper.registerNamespace("wtf", NamespaceRegistry.NAMESPACE_JCR)); - assertEquals("xml", nsHelper.registerNamespace("", NamespaceRegistry.NAMESPACE_XML)); - - // register namespaces - Map input = Map.of("test1", "test1:", "test2", "test2", "", "test3:"); - nsHelper.registerNamespaces(input); - assertEquals("test1", nsReg.getPrefix("test1:")); - assertEquals("test2", nsReg.getPrefix("test2")); - assertEquals("ns6", nsReg.getPrefix("test3:")); - - // check invocation count for getNamespaceRegistry (JCR-5161) - Mockito.verify(workspace, Mockito.times(1)).getNamespaceRegistry(); + return result; } } From 2a28fcc826e450dfeb7dea563b35e1aa8eb6d803 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 7 Oct 2025 15:45:45 +0200 Subject: [PATCH 119/171] JCR-5195: Utilities for 'safe' creation of XML document builders (#298) --- .../core/query/lucene/SearchIndex.java | 1 - .../jackrabbit/core/util/DOMBuilder.java | 3 +- .../jackrabbit/core/util/DOMWalker.java | 40 +-------- .../jackrabbit/commons/xml/XMLFactories.java | 77 +++++++++++++++++ .../jackrabbit/commons/xml/package-info.java | 2 +- .../jackrabbit/xml/XMLFactoriesTest.java | 84 +++++++++++++++++++ .../privilege/PrivilegeXmlHandler.java | 41 +-------- 7 files changed, 170 insertions(+), 78 deletions(-) create mode 100755 jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/XMLFactories.java create mode 100755 jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/xml/XMLFactoriesTest.java diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java index 0f79761fafa..ecb2ec0ad0d 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/query/lucene/SearchIndex.java @@ -92,7 +92,6 @@ import org.apache.lucene.document.Fieldable; import org.apache.lucene.index.IndexReader; import org.apache.lucene.index.MultiReader; -import org.apache.lucene.index.Payload; import org.apache.lucene.index.Term; import org.apache.lucene.index.TermDocs; import org.apache.lucene.search.IndexSearcher; diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMBuilder.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMBuilder.java index b0328fb4e25..ccf95acad61 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMBuilder.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMBuilder.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.core.util; +import org.apache.jackrabbit.commons.xml.XMLFactories; import org.w3c.dom.Document; import org.w3c.dom.Element; @@ -39,7 +40,7 @@ public final class DOMBuilder { /** Static factory for creating DOM DocumentBuilder instances. */ private static final DocumentBuilderFactory BUILDER_FACTORY = - DocumentBuilderFactory.newInstance(); + XMLFactories.safeDocumentBuilderFactory(); /** Static factory for creating document to output stream transformers. */ private static final TransformerFactory TRANSFORMER_FACTORY = diff --git a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java index aa6b64467e1..538f442f9b6 100644 --- a/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java +++ b/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/util/DOMWalker.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.core.util; +import org.apache.jackrabbit.commons.xml.XMLFactories; import org.w3c.dom.Attr; import org.w3c.dom.CharacterData; import org.w3c.dom.Document; @@ -23,15 +24,11 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import org.xml.sax.EntityResolver; -import org.xml.sax.InputSource; -import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.IOException; import java.io.InputStream; -import java.io.StringReader; import java.util.Properties; /** @@ -41,36 +38,7 @@ public final class DOMWalker { /** Static factory for creating stream to DOM transformers. */ - private static final DocumentBuilderFactory factory = createFactory(); - - private static DocumentBuilderFactory createFactory() { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setIgnoringComments(false); - factory.setIgnoringElementContentWhitespace(true); - factory.setXIncludeAware(false); - - // Prevent XXE attacks by disabling external entity processing - factory.setExpandEntityReferences(false); - - String feature = null; - - try { - feature = XMLConstants.FEATURE_SECURE_PROCESSING; - factory.setFeature(feature, true); - feature = "http://apache.org/xml/features/disallow-doctype-decl"; - factory.setFeature(feature, true); - feature = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; - factory.setFeature(feature, false); - feature = "http://xml.org/sax/features/external-general-entities"; - factory.setFeature(feature, false); - feature = "http://xml.org/sax/features/external-parameter-entities"; - factory.setFeature(feature, false); - } catch (Exception ex) { - // abort if secure processing is not supported - throw new IllegalStateException("Secure processing feature '" + feature + "' not supported by the DocumentBuilderFactory: " + factory.getClass().getName(), ex); - } - return factory; - } + private static final DocumentBuilderFactory factory = XMLFactories.safeDocumentBuilderFactory(); /** The DOM document being traversed by this walker. */ private final Document document; @@ -90,9 +58,7 @@ public DOMWalker(InputStream xml) throws IOException { try { DocumentBuilder builder = factory.newDocumentBuilder(); // defense in depth: entity resolver that will break any document on purpose - EntityResolver stopMe = (publicId, systemId) -> new InputSource( - new StringReader("")); - builder.setEntityResolver(stopMe); + builder.setEntityResolver(XMLFactories.nonResolvingEntityResolver()); document = builder.parse(xml); current = document.getDocumentElement(); } catch (IOException e) { diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/XMLFactories.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/XMLFactories.java new file mode 100755 index 00000000000..925e379562f --- /dev/null +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/XMLFactories.java @@ -0,0 +1,77 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.commons.xml; + +import org.xml.sax.EntityResolver; + +import javax.xml.XMLConstants; +import javax.xml.parsers.DocumentBuilderFactory; +import java.io.IOException; + +/** + * Factory for "safe" instances of XML parsers (wrt XXE etc.). + */ +public class XMLFactories { + + private XMLFactories() { + } + + /** + * @return a "safe" {@link DocumentBuilderFactory} + */ + public static DocumentBuilderFactory safeDocumentBuilderFactory() { + // see https://cheatsheetseries.owasp.org/cheatsheets/XML_External_Entity_Prevention_Cheat_Sheet.html + + javax.xml.parsers.DocumentBuilderFactory factory = javax.xml.parsers.DocumentBuilderFactory.newInstance(); + + factory.setIgnoringComments(false); + factory.setIgnoringElementContentWhitespace(true); + factory.setXIncludeAware(false); + + // Prevent XXE attacks by disabling external entity processing + factory.setExpandEntityReferences(false); + + String feature = null; + + try { + feature = XMLConstants.FEATURE_SECURE_PROCESSING; + factory.setFeature(feature, true); + feature = "http://apache.org/xml/features/disallow-doctype-decl"; + factory.setFeature(feature, true); + feature = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; + factory.setFeature(feature, false); + feature = "http://xml.org/sax/features/external-general-entities"; + factory.setFeature(feature, false); + feature = "http://xml.org/sax/features/external-parameter-entities"; + factory.setFeature(feature, false); + } catch (Exception ex) { + // abort if secure processing is not supported + throw new IllegalStateException("Secure processing feature '" + feature + "' not supported by the DocumentBuilderFactory: " + factory.getClass().getName(), ex); + } + return factory; + } + + /** + * @return an {@link EntityResolver} which will always cause a parse exception. + */ + public static EntityResolver nonResolvingEntityResolver() { + return (publicId, systemId) -> { + throw new IOException("This parser does not support resolution of external entities (publicId: " + publicId + + ", systemId: " + systemId + ")"); + }; + } +} diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/package-info.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/package-info.java index 28b80f00b30..ff032b7bc45 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/package-info.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/commons/xml/package-info.java @@ -14,5 +14,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@org.osgi.annotation.versioning.Version("2.2") +@org.osgi.annotation.versioning.Version("2.3") package org.apache.jackrabbit.commons.xml; diff --git a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/xml/XMLFactoriesTest.java b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/xml/XMLFactoriesTest.java new file mode 100755 index 00000000000..519b9328601 --- /dev/null +++ b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/xml/XMLFactoriesTest.java @@ -0,0 +1,84 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.xml; + +import org.apache.jackrabbit.commons.xml.XMLFactories; +import org.junit.Test; +import org.w3c.dom.Document; +import org.xml.sax.EntityResolver; +import org.xml.sax.SAXParseException; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; + +import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; +import java.util.UUID; + +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +public class XMLFactoriesTest { + + String randomName = UUID.randomUUID().toString(); + + String xxeXml = + "\n" + + " ]>\n" + + "&xxe;"; + + @Test + // verify that default builder is vulnerable + public void testDefaultParserDoesResolveExternalEntities() throws Exception { + DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); + + DocumentBuilder db = dbf.newDocumentBuilder(); + Document doc = null; + + try (ByteArrayInputStream input = new ByteArrayInputStream(xxeXml.getBytes())) { + doc = db.parse(input); + } catch (FileNotFoundException expected) { + assertTrue("FileNotFoundException message should contain file name '" + + randomName + "', but was: '" + expected.getMessage() + "'", expected.getMessage().contains(randomName)); + } + + assertNull("There should be no doc: " + doc, doc); + } + + @Test + // verify that utility builder is not vulnerable + public void testParserDoesNotResolveExternalEntities() throws Exception { + DocumentBuilderFactory dbf = XMLFactories.safeDocumentBuilderFactory(); + + DocumentBuilder db = dbf.newDocumentBuilder(); + + try (ByteArrayInputStream input = new ByteArrayInputStream(xxeXml.getBytes())) { + db.parse(input); + } catch (SAXParseException expected) { + // all good + } + } + + @Test + public void testSafeEntityResolver() { + EntityResolver test = XMLFactories.nonResolvingEntityResolver(); + assertThrows(Exception.class, () -> test.resolveEntity("-//The Apache Software Foundation//DTD Jackrabbit 1.6//EN" , + "http://jackrabbit.apache.org/dtd/repository-1.6.dtd")); + } +} diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java index bc241491296..6da6ab7e55f 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/privilege/PrivilegeXmlHandler.java @@ -16,6 +16,7 @@ */ package org.apache.jackrabbit.spi.commons.privilege; +import org.apache.jackrabbit.commons.xml.XMLFactories; import org.apache.jackrabbit.spi.Name; import org.apache.jackrabbit.spi.NameFactory; import org.apache.jackrabbit.spi.PrivilegeDefinition; @@ -27,12 +28,10 @@ import org.w3c.dom.NamedNodeMap; import org.w3c.dom.Node; import org.w3c.dom.NodeList; -import org.xml.sax.EntityResolver; import org.xml.sax.InputSource; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; -import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -46,9 +45,7 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.Reader; -import java.io.StringReader; import java.io.Writer; -import java.rmi.server.ExportException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; @@ -109,37 +106,7 @@ private static String createLicenseHeader() { /** * Constant for DocumentBuilderFactory. */ - private static DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY = createFactory(); - - private static DocumentBuilderFactory createFactory() { - DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); - factory.setNamespaceAware(true); - factory.setIgnoringComments(false); - factory.setIgnoringElementContentWhitespace(true); - factory.setXIncludeAware(false); - - // Prevent XXE attacks by disabling external entity processing - factory.setExpandEntityReferences(false); - - String feature = null; - - try { - feature = XMLConstants.FEATURE_SECURE_PROCESSING; - factory.setFeature(feature, true); - feature = "http://apache.org/xml/features/disallow-doctype-decl"; - factory.setFeature(feature, true); - feature = "http://apache.org/xml/features/nonvalidating/load-external-dtd"; - factory.setFeature(feature, false); - feature = "http://xml.org/sax/features/external-general-entities"; - factory.setFeature(feature, false); - feature = "http://xml.org/sax/features/external-parameter-entities"; - factory.setFeature(feature, false); - } catch (Exception ex) { - // abort if secure processing is not supported - throw new IllegalStateException("Secure processing feature '" + feature + "' not supported by the DocumentBuilderFactory: " + factory.getClass().getName(), ex); - } - return factory; - } + private static DocumentBuilderFactory DOCUMENT_BUILDER_FACTORY = XMLFactories.safeDocumentBuilderFactory(); /** * Constant for TransformerFactory @@ -306,9 +273,7 @@ private PrivilegeDefinition parseDefinition(Node n, Map namespac private static DocumentBuilder createDocumentBuilder() throws ParserConfigurationException { DocumentBuilder builder = DOCUMENT_BUILDER_FACTORY.newDocumentBuilder(); // defense in depth: entity resolver that will break any document on purpose - EntityResolver stopMe = (publicId, systemId) -> new InputSource( - new StringReader("")); - builder.setEntityResolver(stopMe); + builder.setEntityResolver(XMLFactories.nonResolvingEntityResolver()); builder.setErrorHandler(new DefaultHandler()); return builder; } From 3a422289e3a2c4944926439e683cd12e0f78c3c3 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 3 Nov 2025 14:49:13 +0100 Subject: [PATCH 120/171] JCR-5190: webapp: bump htmlunit to 4.18.0 (#304) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 1acd5b8ee3c..cb0389167e7 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -104,7 +104,7 @@ org.htmlunit htmlunit - 4.16.0 + 4.18.0 test From 34b3e6cb8b5d31929379a00f0068093e6cbd4171 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 3 Nov 2025 16:24:58 +0100 Subject: [PATCH 121/171] JCR-5200: Update h2db dependency to 2.4.240 (#306) --- jackrabbit-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 8db408dfa53..8f0f99705fe 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -332,7 +332,7 @@ org.apache.jackrabbit.core.version.ModifyNonVersionableCheckedOutTest#testModify com.h2database h2 - 2.3.232 + 2.4.240 test From d2522f054ec831ba0980c72ff89184a4213ceaf9 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 3 Nov 2025 16:29:03 +0100 Subject: [PATCH 122/171] JCR-5156: webapp: update tomcat dependency to 9.0.111 (#305) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index cb0389167e7..2b96445011f 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.109 + 9.0.111 From e7e28a3b7e1211eda0d21edcb6c4eb627c198a1e Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 4 Nov 2025 17:14:54 +0100 Subject: [PATCH 123/171] JCR-5201: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.88.0 (#307) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 857887097e3..0bd310022d3 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.86.0 + 1.88.0 1.22.22 9.4.58.v20250814 From 10d362c8af21f4a78adb6c0c6f94ad6bb5b16cdd Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 11 Nov 2025 15:36:56 +0100 Subject: [PATCH 124/171] JCR-5176: Update commons-io dependency to 2.21.0 (#310) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 0bd310022d3..51b2a273571 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -482,7 +482,7 @@ commons-io commons-io - 2.20.0 + 2.21.0 javax.transaction From 42566aea9b704b465447431274d0f30f19884db2 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 11 Nov 2025 16:30:17 +0100 Subject: [PATCH 125/171] JCR-5197: cleanup o.a.j.util.Base64 and update Javadoc (#300) --- .../org/apache/jackrabbit/util/Base64.java | 20 +++++++++---------- 1 file changed, 9 insertions(+), 11 deletions(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Base64.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Base64.java index f6708899252..6a8557ee712 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Base64.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Base64.java @@ -27,9 +27,14 @@ import java.io.Writer; import java.io.BufferedWriter; import java.nio.charset.StandardCharsets; +import java.util.Arrays; /** * Base64 provides Base64 encoding/decoding of strings and streams. + *

+ * See RFC 4648, Section 4. + *

+ * See {@link java.util.Base64} for a JDK alternative. */ public class Base64 { @@ -46,9 +51,7 @@ public class Base64 { static { // initialize decoding table - for (int i = 0; i < DECODETABLE.length; i++) { - DECODETABLE[i] = 0x7f; - } + Arrays.fill(DECODETABLE, (byte) 0x7f); // build decoding table for (int i = 0; i < BASE64CHARS.length; i++) { DECODETABLE[BASE64CHARS[i]] = (byte) i; @@ -65,11 +68,10 @@ private Base64() { } /** - * Base64-decodes or -encodes (see {@link #decodeOrEncode(String)} + * Base64-decodes or -encodes (see {@link #decodeOrEncode(String)}) * all the given arguments and prints the results on separate lines * in standard output. * - * @since Apache Jackrabbit 2.3 * @param args command line arguments to be decoded or encoded */ public static void main(String[] args) { @@ -80,10 +82,9 @@ public static void main(String[] args) { /** * Base64-decodes or -encodes the given string, depending on whether - * or not it contains a "{base64}" prefix. If the string gets encoded, + * it contains a "{base64}" prefix. If the string gets encoded, * the "{base64}" prefix is added to it. * - * @since Apache Jackrabbit 2.3 * @param data string to be decoded or encoded * @return decoded or encoded string */ @@ -101,7 +102,6 @@ public static String decodeOrEncode(String data) { * If the given string is null, then null * is returned. * - * @since Apache Jackrabbit 2.3 * @param data string to be decoded, can be null * @return the given string, possibly decoded */ @@ -233,7 +233,6 @@ public static void encode(byte[] data, int off, int len, Writer writer) /** * Returns the base64 representation of UTF-8 encoded string. * - * @since Apache Jackrabbit 2.3 * @param data the string to be encoded * @return base64-encoding of the string */ @@ -254,7 +253,6 @@ public static String encode(String data) { * The given string is returned as-is if it doesn't contain a valid * base64 encoding. * - * @since Apache Jackrabbit 2.3 * @param data the base64-encoded data to be decoded * @return decoded string */ @@ -262,7 +260,7 @@ public static String decode(String data) { try { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); decode(data, buffer); - return new String(buffer.toByteArray(), StandardCharsets.UTF_8); + return buffer.toString(StandardCharsets.UTF_8); } catch (IllegalArgumentException e) { return data; } catch (IOException e) { // should never happen From 72e3ee74f9d3242b04441b631547b299f803d95f Mon Sep 17 00:00:00 2001 From: mbaedke Date: Fri, 21 Nov 2025 15:04:37 +0100 Subject: [PATCH 126/171] =?UTF-8?q?JCR-5196:=20Some=20test=20classes=20are?= =?UTF-8?q?=20not=20executed=20by=20default=20because=20they=20=E2=80=A6?= =?UTF-8?q?=20(#309)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added test classes to the corresponding test suites. Added failing tests and added them to the list of known issues. --- jackrabbit-core/pom.xml | 5 +++++ .../org/apache/jackrabbit/api/TestAll.java | 1 + .../apache/jackrabbit/core/AddMoveTest.java | 22 +++++++++++++++++-- .../org/apache/jackrabbit/core/MoveTest.java | 2 +- .../org/apache/jackrabbit/core/TestAll.java | 8 +++++++ .../jackrabbit/core/cluster/TestAll.java | 1 + .../jackrabbit/core/config/TestAll.java | 1 + .../apache/jackrabbit/core/data/TestAll.java | 1 + .../daily/DailyIntegrationTest.java | 8 +++++++ .../jackrabbit/core/nodetype/TestAll.java | 1 + .../apache/jackrabbit/core/query/TestAll.java | 5 +++++ .../query/lucene/ComparableArrayTest.java | 3 ++- .../jackrabbit/core/query/lucene/TestAll.java | 6 +++++ .../security/authorization/acl/TestAll.java | 2 ++ .../core/security/user/TestAll.java | 7 +++++- .../apache/jackrabbit/core/util/TestAll.java | 1 + .../RemoveOrphanVersionHistoryTest.java | 2 +- .../jackrabbit/core/version/TestAll.java | 5 +++++ .../apache/jackrabbit/core/xml/TestAll.java | 1 + .../jackrabbit/test/AbstractJCRTest.java | 3 +-- jackrabbit-parent/pom.xml | 2 +- 21 files changed, 78 insertions(+), 9 deletions(-) mode change 100644 => 100755 jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AddMoveTest.java mode change 100644 => 100755 jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 8f0f99705fe..38e66998930 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -116,6 +116,11 @@ org.apache.jackrabbit.test.api.query.qom.NodeLocalNameTest#testPathLiteral org.apache.jackrabbit.test.api.query.qom.NodeLocalNameTest#testURILiteral org.apache.jackrabbit.core.version.ModifyNonVersionableCheckedOutTest#testNonVersionableCheckedOut org.apache.jackrabbit.core.version.ModifyNonVersionableCheckedOutTest#testModifyNonVersionableNodeWithCheckedOutProperty +org.apache.jackrabbit.core.AddMoveTest#testTopLevelAddRemove +org.apache.jackrabbit.core.config.SecurityConfigTest#testInvalidConfig +org.apache.jackrabbit.core.nodetype.CyclicNodeTypeRegistrationTest +org.apache.jackrabbit.core.query.lucene.SearchIndexConsistencyCheckTest#testDoubleCheckStressTest +org.apache.jackrabbit.core.version.RemoveAndAddVersionLabelXATest#testVersionLabel diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/TestAll.java index 3cf1e6e6d93..795d1244998 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/api/TestAll.java @@ -37,6 +37,7 @@ public static Test suite() { suite.addTestSuite(JackrabbitNodeTest.class); suite.addTestSuite(JackrabbitObservationManagerTest.class); + suite.addTestSuite(JackrabbitSessionTest.class); return suite; } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AddMoveTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AddMoveTest.java old mode 100644 new mode 100755 index db367258c86..424a48dd471 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AddMoveTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/AddMoveTest.java @@ -81,12 +81,30 @@ public void testTopLevelAddMove() throws Exception { /** * Add a top level node and remove it. Exposes a bug in the {@code CachingHierarchyManager}, * reported in JCR-3368. + * Also exposes a bug reported in JCR-5205. */ public void testTopLevelAddRemove() throws Exception { Session session = getHelper().getReadWriteSession(); - session.getRootNode().addNode("foo").addNode("bar"); + Node rootNode = session.getRootNode(); + Node foo = rootNode.addNode("foo"); + //JCR-5205: note that the test doesn't fail if we add the following line + //foo = rootNode.getNode("foo"); + foo.addNode("bar"); session.save(); - session.getNode("/foo").remove(); + session.getNode("/foo").remove(); //JCR-5205: note that the test doesn't fail if we replace this line with the following + //foo.remove(); assertFalse(session.getRootNode().hasNode("foo/bar")); } + + public void testSecondLevelAddRemove() throws Exception { + Session session = getHelper().getReadWriteSession(); + Node rootNode = session.getRootNode(); + Node parent = rootNode.addNode("parent"); + Node foo = parent.addNode("foo"); + foo.addNode("bar"); + session.save(); + session.getNode("/parent/foo").remove(); + assertFalse(session.getRootNode().hasNode("parent/foo/bar")); + } + } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java old mode 100644 new mode 100755 index 6d39a275fc6..51e8d7ce8e7 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/MoveTest.java @@ -36,7 +36,7 @@ public void testMoveVisibilityAcrossSessions() throws RepositoryException { Session session2 = getHelper().getReadWriteSession(); if (session1.itemExists("/foo")) { - session1.removeItem("/foo"); + session1.getNode("/foo").remove(); session1.save(); } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java index ef5ca389d4c..28713f1dc49 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java @@ -83,6 +83,14 @@ public static Test suite() { suite.addTestSuite(RemoveAddNodeWithUUIDTest.class); suite.addTestSuite(MoveAtRootTest.class); + suite.addTestSuite(RepositoryCopierTest.class); + suite.addTestSuite(ReadWhileSaveTest.class); + suite.addTestSuite(MoveRemoveTest.class); + suite.addTestSuite(LockedWrapperTest.class); + suite.addTestSuite(MoveTest.class); + suite.addTestSuite(MoveAtRootTest.class); + suite.addTestSuite(AddMoveTest.class); + return suite; } } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java index 70538ff5f51..cb1ed62d90c 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/cluster/TestAll.java @@ -39,6 +39,7 @@ public static Test suite() { suite.addTestSuite(ClusterRecordTest.class); suite.addTestSuite(ClusterSyncTest.class); + suite.addTestSuite(ClusterDescriptorTest.class); suite.addTestSuite(DbClusterTest.class); suite.addTestSuite(DbClusterTestJCR3162.class); suite.addTestSuite(FailUpdateOnJournalExceptionTest.class); diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/TestAll.java index 27bee4dd4b3..7cc70cf6456 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/config/TestAll.java @@ -40,6 +40,7 @@ public static Test suite() { suite.addTestSuite(RepositoryConfigTest.class); suite.addTestSuite(WorkspaceConfigTest.class); suite.addTestSuite(DataSourceConfigTest.class); + suite.addTestSuite(SecurityConfigTest.class); return suite; } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/TestAll.java index 8ac2b9f0d76..a1ac39129b6 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/data/TestAll.java @@ -51,6 +51,7 @@ public static Test suite() { suite.addTestSuite(TestTwoGetStreams.class); suite.addTestSuite(WriteWhileReadingTest.class); suite.addTestSuite(GCSubtreeMoveTest.class); + suite.addTestSuite(ConsistencyCheckerImplTest.class); return suite; } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/daily/DailyIntegrationTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/daily/DailyIntegrationTest.java index d07a7d54324..560be7beb16 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/daily/DailyIntegrationTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/integration/daily/DailyIntegrationTest.java @@ -22,6 +22,8 @@ import org.apache.jackrabbit.core.ConcurrencyTest; import org.apache.jackrabbit.core.ConcurrentAddMoveRemoveTest; import org.apache.jackrabbit.core.ConcurrentCheckinMixedTransactionTest; +import org.apache.jackrabbit.core.ConcurrentCyclicMoveTest; +import org.apache.jackrabbit.core.ConcurrentImportTest; import org.apache.jackrabbit.core.ConcurrentLoginTest; import org.apache.jackrabbit.core.ConcurrentNodeModificationTest; import org.apache.jackrabbit.core.ConcurrentReadWriteTest; @@ -30,6 +32,8 @@ import org.apache.jackrabbit.core.ConcurrentVersioningWithTransactionsTest; import org.apache.jackrabbit.core.LockTest; import org.apache.jackrabbit.core.ReadVersionsWhileModified; +import org.apache.jackrabbit.core.cache.ConcurrentCacheTest; +import org.apache.jackrabbit.core.cache.GrowingLRUMapTest; import org.apache.jackrabbit.core.integration.ConcurrentQueriesWithUpdatesTest; import org.apache.jackrabbit.core.query.lucene.LargeResultSetTest; import org.apache.jackrabbit.core.lock.ConcurrentLockingTest; @@ -62,6 +66,10 @@ public static Test suite() { suite.addTestSuite(ConcurrentLockingWithTransactionsTest.class); suite.addTestSuite(LargeResultSetTest.class); suite.addTestSuite(ConcurrentQueriesWithUpdatesTest.class); + suite.addTestSuite(ConcurrentImportTest.class); + suite.addTestSuite(ConcurrentCyclicMoveTest.class); + suite.addTestSuite(ConcurrentCacheTest.class); + suite.addTestSuite(GrowingLRUMapTest.class); return suite; } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/nodetype/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/nodetype/TestAll.java index 043855b6349..42f4994a45d 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/nodetype/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/nodetype/TestAll.java @@ -37,6 +37,7 @@ public static Test suite() { suite.addTestSuite(NodeTypesInContentTest.class); suite.addTestSuite(MixinTest.class); + suite.addTestSuite(CyclicNodeTypeRegistrationTest.class); return suite; } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java index aa1b6af5aa3..5791815b05e 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/TestAll.java @@ -69,6 +69,11 @@ public static Test suite() { suite.addTestSuite(SQL2OrderByTest.class); suite.addTestSuite(DescendantSelfAxisTest.class); + suite.addTestSuite(TextExtractorTest.class); + suite.addTestSuite(SQL2TooManyClausesTest.class); + suite.addTestSuite(QueryExtensionsTest.class); + suite.addTestSuite(LazyResultSetQueryTest.class); + return suite; } } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/ComparableArrayTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/ComparableArrayTest.java index 368bad8fadd..f3229d004d2 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/ComparableArrayTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/ComparableArrayTest.java @@ -21,9 +21,10 @@ import javax.jcr.RepositoryException; import org.apache.jackrabbit.core.query.lucene.SharedFieldCache.ComparableArray; +import org.apache.jackrabbit.test.JUnitTest; import org.junit.Test; -public class ComparableArrayTest { +public class ComparableArrayTest extends JUnitTest { /** * Test for JCR-2906 to make sure the SharedFieldCache arranges the entries diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TestAll.java index fffd285b1c6..f0a942dbdfa 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/TestAll.java @@ -54,6 +54,12 @@ public static Test suite() { suite.addTestSuite(IndexFormatVersionTest.class); suite.addTestSuite(SynonymProviderTest.class); + suite.addTestSuite(UtilTest.class); + suite.addTestSuite(SearchIndexTest.class); + suite.addTestSuite(IDFieldTest.class); + suite.addTestSuite(ComparableArrayTest.class); + suite.addTestSuite(SearchIndexConsistencyCheckTest.class); + return suite; } } \ No newline at end of file diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/TestAll.java index fcf16c39bc7..169ed1f8a05 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/authorization/acl/TestAll.java @@ -54,6 +54,8 @@ public static Test suite() { suite.addTestSuite(MoveTest.class); suite.addTestSuite(RestrictionTest.class); + suite.addTestSuite(ReadNodeTypeTest.class); + return suite; } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TestAll.java index f1dc824a98b..d9e0c18d9e2 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/security/user/TestAll.java @@ -52,9 +52,14 @@ public static Test suite() { suite.addTestSuite(UserImporterTest.class); suite.addTestSuite(UserAccessControlProviderTest.class); - suite.addTestSuite(DefaultPrincipalProviderTest.class); + suite.addTestSuite(DefaultPrincipalProviderTest.class); suite.addTestSuite(PasswordUtilityTest.class); + +//TODO comsume time and memory +// suite.addTestSuite(MembershipCacheTest.class); +// suite.addTestSuite(MembershipCachePerfTest.class); + return suite; } } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/TestAll.java index 45f5adff4dd..03916ff421c 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/TestAll.java @@ -34,6 +34,7 @@ public static Test suite() { TestSuite suite = new TestSuite("Utility tests"); suite.addTestSuite(RepositoryLockTest.class); suite.addTestSuite(CooperativeFileLockTest.class); + suite.addTestSuite(DOMWalkerTest.class); return suite; } } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RemoveOrphanVersionHistoryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RemoveOrphanVersionHistoryTest.java index 6b94b095757..aa43c292ae5 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RemoveOrphanVersionHistoryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/RemoveOrphanVersionHistoryTest.java @@ -93,7 +93,7 @@ public void testWorkspaceRemoveOrphanVersionHistory() throws RepositoryException n.checkout(); Workspace defaultWorkspace = n.getSession().getWorkspace(); - Session otherWsSession = n.getSession().getRepository().login(new SimpleCredentials("superuser", "".toCharArray()), workspaceName); + Session otherWsSession = getHelper().getSuperuserSession(workspaceName); // Clone the node in another workspace otherWsSession.getWorkspace().clone(defaultWorkspace.getName(), n.getPath(), n.getPath(), false); Node otherWsRootNode = otherWsSession.getRootNode(); diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java index 60fed324a2e..937ebc7736c 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/version/TestAll.java @@ -40,6 +40,11 @@ public static Test suite() { suite.addTestSuite(RestoreNodeWithSNSTest.class); suite.addTestSuite(VersionIteratorImplTest.class); suite.addTestSuite(ModifyNonVersionableCheckedOutTest.class); + + suite.addTestSuite(RemoveVersionTest.class); + suite.addTestSuite(RemoveOrphanVersionHistoryTest.class); + suite.addTestSuite(RemoveAndAddVersionLabelXATest.class); + return suite; } } diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/TestAll.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/TestAll.java index bbf1b4f7cd5..1a6b531db85 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/TestAll.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/xml/TestAll.java @@ -35,6 +35,7 @@ public static Test suite() { TestSuite suite = new TestSuite("XML format test cases"); suite.addTestSuite(DocumentViewTest.class); suite.addTestSuite(AccessControlImporterTest.class); + suite.addTestSuite(WorkspaceImporterTest.class); return suite; } diff --git a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java index 5cc11714610..f3227e4e2cb 100644 --- a/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java +++ b/jackrabbit-jcr-tests/src/main/java/org/apache/jackrabbit/test/AbstractJCRTest.java @@ -32,7 +32,6 @@ import javax.jcr.ValueFactory; import javax.jcr.nodetype.NoSuchNodeTypeException; import javax.jcr.nodetype.NodeDefinition; -import javax.jcr.nodetype.ConstraintViolationException; import javax.jcr.nodetype.NodeType; import javax.jcr.nodetype.PropertyDefinition; import javax.jcr.retention.RetentionManager; @@ -897,7 +896,7 @@ protected Node cleanUpTestRoot(Session s) throws RepositoryException { // try to remove child try { child.remove(); - } catch (ConstraintViolationException e) { + } catch (RepositoryException e) { log.println("unable to remove node: " + child.getPath()); } } diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 51b2a273571..1ccd6bc78bb 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -51,7 +51,7 @@ - -Xmx256m + -Xmx4g ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions From bc181ced3726d79adcf00aea41dadc41ed1a861b Mon Sep 17 00:00:00 2001 From: mbaedke Date: Mon, 24 Nov 2025 14:02:48 +0100 Subject: [PATCH 127/171] =?UTF-8?q?JCR-5203:=20integration=20tests=20in=20?= =?UTF-8?q?jackrabbit-core=20occasionally=20fail=20to=20I=E2=80=A6=20(#308?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fixed From d4da03129fe686a755b49ac5c62a045be967cd17 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 27 Nov 2025 12:36:11 +0100 Subject: [PATCH 128/171] JCR-5156: webapp: update tomcat dependency to 9.0.112 (#312) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 2b96445011f..b227a2dd7c5 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.111 + 9.0.112 From fd51c02e89accb595975703f6f3a45246d3f0a8b Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 2 Dec 2025 14:54:07 +0100 Subject: [PATCH 129/171] JCR-5190: webapp: bump htmlunit to 4.19.0 (#313) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index b227a2dd7c5..65539ef8448 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -104,7 +104,7 @@ org.htmlunit htmlunit - 4.18.0 + 4.19.0 test From c1fc4a1de37f0f676c965395f8c2a0660814add5 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 2 Dec 2025 15:30:08 +0100 Subject: [PATCH 130/171] JCR-5187: Update commons-cli dependency to 1.11.0 (#314) --- jackrabbit-standalone-components/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 6512c4143ee..914cbb78575 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -134,7 +134,7 @@ commons-cli commons-cli - 1.10.0 + 1.11.0 commons-chain From 4e23bda48e751d6ccb166de51bc358fed1ac96d9 Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Date: Thu, 4 Dec 2025 16:45:49 +0530 Subject: [PATCH 131/171] JCR-5212 : updated release-notes --- RELEASE-NOTES.txt | 68 ++++++++++++++++++++++++++--------------------- 1 file changed, 37 insertions(+), 31 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index eb0317229ca..bba02b7574a 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -3,54 +3,60 @@ Release Notes -- Apache Jackrabbit -- Version 2.23.2-beta Introduction ------------ -This is Apache Jackrabbit(TM) 2.23.2-beta, a fully compliant implementation of the +This is Apache Jackrabbit(TM) 2.23.3-beta, a fully compliant implementation of the Content Repository for Java(TM) Technology API, version 2.0 (JCR 2.0) as specified in the Java Specification Request 283 (JSR 283). -Apache Jackrabbit 2.23.2-beta is an unstable release cut directly from +Apache Jackrabbit 2.23.3-beta is an unstable release cut directly from Jackrabbit trunk, with a focus on new features and other improvements. For production use we recommend the latest stable 2.20.x release. -Changes in Jackrabbit 2.23.2-beta +Changes in Jackrabbit 2.23.3-beta ---------------------------------- -Bug +Sub-task - [JCR-5121] - Java 23: getSubject is supported only if a security manager is allowed + [JCR-5160] - Create jacoco reports compliant with SonarQube Cloud + [JCR-5172] - Exclude test sources from SonarQube analysis + [JCR-5173] - Create aggregate jacoco report + [JCR-5174] - Exclude jackrabbit-jcr-tests from coverage calculation -Improvement - [JCR-5127] - Add javadoc links to JcrConstants' constants which have expanded name equivalents in the JCR API - [JCR-5146] - Add missing mixin values (defined in JCR 2.0 spec) to JcrConstants - [JCR-5150] - Add missing constant for jcr:title - [JCR-5152] - Add method isValidJcrLocalName(String) to o.a.j.util.Text - [JCR-5161] - Add variant of NamespaceHelper.registerNamespace +Bug -Wish + [JCR-5090] - Invalid href generated for 'Edit' buttons + [JCR-5141] - Deprecate org.apache.jackrabbit.commons.json + [JCR-5196] - Some test classes are not executed by default because they haven't been added to a test suite + [JCR-5203] - integration tests in jackrabbit-core occasionally fail to ItemNotFoundExceptions during cleanup + +Improvement - [JCR-5157] - configure CI for PRs on github + [JCR-5154] - Replace deprecated call of Class.newInstance() Task - [JCR-5048] - Jackrabbit should build and test with Java 24 - [JCR-5120] - webapp: update tomcat dependency to 9.0.97 - [JCR-5128] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.74.0 - [JCR-5130] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.76.0 - [JCR-5131] - jackrabbit-jcr2spi: switch to commons-collections4 4.5.0-M3 - [JCR-5132] - webapp: update tomcat dependency to 9.0.104 - [JCR-5133] - Update easymock dependency to 5.5.0 - [JCR-5134] - Update oak-jackrabbit-api.version.used to Oak 1.22.22 - [JCR-5135] - Make JNDI support opt-in - [JCR-5137] - Update JCR commons to implement current jackrabbit-api - [JCR-5138] - Borrow JackrabbitSessionImpl tests from Oak - [JCR-5143] - Update Mockito dependency to 5.17.0 - [JCR-5145] - Upgrade Commons VFS to 2.10.0 - [JCR-5147] - remove jackrabbit 1.x compatibility and performance tests - [JCR-5148] - remove (comment out) mysql test profile - [JCR-5158] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.82.0 - [JCR-5159] - Create coverage for NamespaceHelper - [JCR-5163] - Update commons file-upload dependency to 1.6.0 + [JCR-5140] - Improve support for generating namespace prefixes + [JCR-5156] - webapp: update tomcat dependency to 9.0.112 + [JCR-5175] - Update Mockito dependency to 5.20.0 + [JCR-5176] - Update commons-io dependency to 2.21.0 + [JCR-5177] - jackrabbit-jcr2spi: update to commons-collections4 4.5.0 + [JCR-5178] - Update easymock dependency to 5.6.0 + [JCR-5179] - set baseline comparisonVersion to latest stable (2.22.1) + [JCR-5182] - Update pax-exam test dependency to 4.14.0 + [JCR-5183] - Vote Template should be clear about the fact that running the check script in "sh" will not work + [JCR-5185] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.86.0 + [JCR-5187] - Update commons-cli dependency to 1.11.0 + [JCR-5188] - Update h2db dependency to 2.3.232 + [JCR-5189] - update Jetty to 9.4.58.v20250814 + [JCR-5190] - webapp: bump htmlunit to 4.19.0 + [JCR-5191] - remove JEXL dependency + [JCR-5192] - update aws java sdk version to 1.12.791 + [JCR-5193] - update Apache parent pom to version 35 + [JCR-5195] - Utilities for 'safe' creation of XML document builders + [JCR-5197] - cleanup o.a.j.util.Base64 and update Javadoc + [JCR-5200] - Update h2db dependency to 2.4.240 + [JCR-5201] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.88.0 For more detailed information about all the changes in this and other From 5d33a43e1d12ffe94fbe43e96f6da6e609b4db12 Mon Sep 17 00:00:00 2001 From: Joerg Hoh Date: Wed, 7 Jan 2026 16:36:05 +0100 Subject: [PATCH 132/171] JCR-5216: Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.90.0 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 1ccd6bc78bb..abb9380b33d 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.88.0 + 1.90.0 1.22.22 9.4.58.v20250814 From 07520241490e162b7df0808d698965ce2e5da3e5 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 15 Jan 2026 13:46:54 +0100 Subject: [PATCH 133/171] JCR-5211: package-version jcr2spi (#315) --- jackrabbit-jcr2spi/pom.xml | 9 +++++++-- .../jcr2spi/config/package-info.java | 18 ++++++++++++++++++ .../jackrabbit/jcr2spi/package-info.java | 18 ++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/package-info.java create mode 100644 jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/package-info.java diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index 3d482a40a9e..3903ce63561 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -42,8 +42,8 @@ - org.apache.jackrabbit.jcr2spi;version=${project.version};include:=Jcr2spiRepositoryFactory, - org.apache.jackrabbit.jcr2spi.config;version=${project.version} + org.apache.jackrabbit.jcr2spi;include:=Jcr2spiRepositoryFactory, + org.apache.jackrabbit.jcr2spi.config @@ -95,6 +95,11 @@ + + org.osgi + org.osgi.annotation + provided + javax.jcr jcr diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/package-info.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/package-info.java new file mode 100644 index 00000000000..8af1290cce4 --- /dev/null +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/package-info.java @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@org.osgi.annotation.versioning.Version("2.22.2") +package org.apache.jackrabbit.jcr2spi.config; \ No newline at end of file diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/package-info.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/package-info.java new file mode 100644 index 00000000000..b558aadee9f --- /dev/null +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/package-info.java @@ -0,0 +1,18 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +@org.osgi.annotation.versioning.Version("2.22.2") +package org.apache.jackrabbit.jcr2spi; \ No newline at end of file From 5e265c86f4b8691710b7cc0b5c7e89ffd85830e1 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 15 Jan 2026 16:30:00 +0100 Subject: [PATCH 134/171] JCR-5217: Update Mockito dependency to 5.21.0 (#323) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index abb9380b33d..77d824ea572 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -649,7 +649,7 @@ org.mockito mockito-core - 5.20.0 + 5.21.0 From 057bbf93ad737e867a6d8f358bebe69d6d994d8c Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Sat, 17 Jan 2026 10:41:45 +0100 Subject: [PATCH 135/171] JCR-5219: set baseline comparisonVersion to latest stable (2.22.3) (#324) --- .../java/org/apache/jackrabbit/jcr2spi/config/package-info.java | 2 +- .../main/java/org/apache/jackrabbit/jcr2spi/package-info.java | 2 +- jackrabbit-parent/pom.xml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/package-info.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/package-info.java index 8af1290cce4..3e033b1cfca 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/package-info.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/config/package-info.java @@ -14,5 +14,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@org.osgi.annotation.versioning.Version("2.22.2") +@org.osgi.annotation.versioning.Version("2.22.4") package org.apache.jackrabbit.jcr2spi.config; \ No newline at end of file diff --git a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/package-info.java b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/package-info.java index b558aadee9f..fe15ce17a21 100644 --- a/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/package-info.java +++ b/jackrabbit-jcr2spi/src/main/java/org/apache/jackrabbit/jcr2spi/package-info.java @@ -14,5 +14,5 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@org.osgi.annotation.versioning.Version("2.22.2") +@org.osgi.annotation.versioning.Version("2.22.4") package org.apache.jackrabbit.jcr2spi; \ No newline at end of file diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 77d824ea572..9f047e751dc 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -406,7 +406,7 @@ - 2.22.1 + 2.22.3 From 188dfc9bc3d0780b037f6912842e92f91738732d Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 26 Jan 2026 23:25:06 +0100 Subject: [PATCH 136/171] JCR-4521: Update commons-dbcp dependency to 2.14.0 (#328) - ack oleosterhagen Copied from https://github.com/apache/jackrabbit/pull/320 - thanks @oleosterhagen --- jackrabbit-core/pom.xml | 6 +++--- .../core/util/db/ConnectionFactoryTest.java | 4 ++-- jackrabbit-data/pom.xml | 6 +++--- .../core/util/db/ConnectionFactory.java | 21 +++++++++++-------- 4 files changed, 20 insertions(+), 17 deletions(-) diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 38e66998930..0d514a9ef87 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -233,9 +233,9 @@ org.apache.jackrabbit.core.version.RemoveAndAddVersionLabelXATest#testVersionLab commons-io - commons-dbcp - commons-dbcp - 1.4 + org.apache.commons + commons-dbcp2 + 2.14.0 javax.jcr diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java index 46fbf6bcff8..e65c41f722a 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/util/db/ConnectionFactoryTest.java @@ -24,7 +24,7 @@ import junit.framework.TestCase; -import org.apache.commons.dbcp.BasicDataSource; +import org.apache.commons.dbcp2.BasicDataSource; import org.apache.derby.iapi.jdbc.EngineConnection; import org.apache.jackrabbit.core.config.ConfigurationException; import org.apache.jackrabbit.core.config.DataSourceConfig; @@ -146,7 +146,7 @@ public void testClose() throws Exception { } private void assertPoolDefaults(BasicDataSource ds, String validationQuery, int maxCons) { - assertEquals(maxCons, ds.getMaxActive()); + assertEquals(maxCons, ds.getMaxTotal()); assertEquals(validationQuery, ds.getValidationQuery()); assertTrue(ds.getDefaultAutoCommit()); assertFalse(ds.getTestOnBorrow()); diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index b669e82d280..ba9e5bd7d31 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -86,9 +86,9 @@ commons-io - commons-dbcp - commons-dbcp - 1.4 + org.apache.commons + commons-dbcp2 + 2.14.0 true diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java index 65f63eb5694..fe173111759 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/util/db/ConnectionFactory.java @@ -20,6 +20,7 @@ import java.sql.Connection; import java.sql.Driver; import java.sql.SQLException; +import java.time.Duration; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -30,9 +31,9 @@ import javax.naming.NamingException; import javax.sql.DataSource; -import org.apache.commons.dbcp.BasicDataSource; -import org.apache.commons.dbcp.DelegatingConnection; -import org.apache.commons.pool.impl.GenericObjectPool; +import org.apache.commons.dbcp2.BasicDataSource; +import org.apache.commons.dbcp2.DelegatingConnection; +import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.apache.jackrabbit.core.config.DataSourceConfig; import org.apache.jackrabbit.core.config.DataSourceConfig.DataSourceDefinition; import org.apache.jackrabbit.util.Base64; @@ -102,7 +103,7 @@ public void registerDataSources(DataSourceConfig dsc) throws RepositoryException BasicDataSource bds = getDriverDataSource(driverClass, def.getUrl(), def.getUser(), def.getPassword()); if (def.getMaxPoolSize() > 0) { - bds.setMaxActive(def.getMaxPoolSize()); + bds.setMaxTotal(def.getMaxPoolSize()); } if (def.getValidationQuery() != null && !"".equals(def.getValidationQuery().trim())) { bds.setValidationQuery(def.getValidationQuery()); @@ -334,7 +335,7 @@ private BasicDataSource getDriverDataSource( if (instance != null) { if (instance.jdbcCompliant()) { // JCR-3445 At the moment the PostgreSQL isn't compliant because it doesn't implement this method... - ds.setValidationQueryTimeout(3); + ds.setValidationQueryTimeout(Duration.ofSeconds(3)); } } ds.setDriverClassName(driverClass.getName()); @@ -346,14 +347,16 @@ private BasicDataSource getDriverDataSource( ds.setDefaultAutoCommit(true); ds.setTestOnBorrow(false); ds.setTestWhileIdle(true); - ds.setTimeBetweenEvictionRunsMillis(600000); // 10 Minutes - ds.setMinEvictableIdleTimeMillis(60000); // 1 Minute - ds.setMaxActive(-1); // unlimited - ds.setMaxIdle(GenericObjectPool.DEFAULT_MAX_IDLE + 10); + ds.setDurationBetweenEvictionRuns(Duration.ofMinutes(10)); + ds.setMinEvictableIdle(Duration.ofMinutes(1)); + ds.setMaxTotal(-1); // unlimited + ds.setMaxIdle(GenericObjectPoolConfig.DEFAULT_MAX_IDLE + 10); ds.setValidationQuery(guessValidationQuery(url)); ds.setAccessToUnderlyingConnectionAllowed(true); ds.setPoolPreparedStatements(Boolean.valueOf(System.getProperty(SYSTEM_PROPERTY_POOL_PREPARED_STATEMENTS, "true"))); ds.setMaxOpenPreparedStatements(-1); // unlimited + // this helps to discover unusable connections of a shut-down database without executing a validation query + ds.setCacheState(false); return ds; } From 2a61db63bf015fcdaafab914bf243c5d55134343 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 27 Jan 2026 11:15:47 +0100 Subject: [PATCH 137/171] JCR-5218: webapp: bump htmlunit to 4.21.0 (#327) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 65539ef8448..972d5c481a6 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -104,7 +104,7 @@ org.htmlunit htmlunit - 4.19.0 + 4.21.0 test From aefd942321b2994693c45851dc7ff794142e40a6 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 27 Jan 2026 15:16:30 +0100 Subject: [PATCH 138/171] JCR-5222: webapp: update tomcat dependency to 9.0.115 (#329) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 972d5c481a6..80c9a95c8e3 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.112 + 9.0.115 From 87ff8c7fd71e07bb416f5e0570c1247c9c945d9c Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 27 Jan 2026 17:16:58 +0100 Subject: [PATCH 139/171] JCR-5223: update Apache parent pom to version 37 (#330) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 9f047e751dc..12450b070a2 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -27,7 +27,7 @@ org.apache apache - 35 + 37 From c3ba3a620aa7ccc6ebfc1a9cc707fd4ba7f16ac9 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 28 Jan 2026 13:19:48 +0100 Subject: [PATCH 140/171] JCR-5224: remove jackrabbit 2.0 compatibility and performance tests (#331) --- test/compatibility/create20/pom.xml | 64 ------------------- .../compatibility/CreateRepositoryTest.java | 28 -------- test/compatibility/pom.xml | 1 - test/performance/jackrabbit20/pom.xml | 58 ----------------- .../performance/PerformanceTest.java | 28 -------- test/performance/pom.xml | 1 - 6 files changed, 180 deletions(-) delete mode 100644 test/compatibility/create20/pom.xml delete mode 100644 test/compatibility/create20/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java delete mode 100644 test/performance/jackrabbit20/pom.xml delete mode 100644 test/performance/jackrabbit20/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java diff --git a/test/compatibility/create20/pom.xml b/test/compatibility/create20/pom.xml deleted file mode 100644 index 3a6a35fa7e6..00000000000 --- a/test/compatibility/create20/pom.xml +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-bc-parent - SNAPSHOT - ../parent/pom.xml - - - jackrabbit-bc-create20 - Jackrabbit 2.0 Repositories - - - - ${project.groupId} - jackrabbit-bc-base - ${project.version} - test - - - javax.jcr - jcr - 2.0 - test - - - org.apache.jackrabbit - jackrabbit-core - 2.0.0 - test - - - org.slf4j - slf4j-log4j12 - 1.5.8 - test - - - - - diff --git a/test/compatibility/create20/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java b/test/compatibility/create20/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java deleted file mode 100644 index 5f70d17ebd5..00000000000 --- a/test/compatibility/create20/src/test/java/org/apache/jackrabbit/harness/compatibility/CreateRepositoryTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.harness.compatibility; - -import org.testng.annotations.Test; - -public class CreateRepositoryTest extends AbstractRepositoryTest { - - @Test - public void createRepositories() throws Exception { - doCreateRepositories("jackrabbit-2.0"); - } - -} diff --git a/test/compatibility/pom.xml b/test/compatibility/pom.xml index 13a4dfb340a..5b2a7ded0a8 100644 --- a/test/compatibility/pom.xml +++ b/test/compatibility/pom.xml @@ -41,7 +41,6 @@ parent base - create20 create21 create22 create24 diff --git a/test/performance/jackrabbit20/pom.xml b/test/performance/jackrabbit20/pom.xml deleted file mode 100644 index e45d0aeb6a0..00000000000 --- a/test/performance/jackrabbit20/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - - - - 4.0.0 - - - org.apache.jackrabbit - jackrabbit-perf-parent - 1-SNAPSHOT - ../parent/pom.xml - - - jackrabbit-perf-jackrabbit20 - Jackrabbit 2.0 Performance Test - - - - org.apache.jackrabbit - jackrabbit-perf-base - ${project.version} - test - - - javax.jcr - jcr - 2.0 - test - - - org.apache.jackrabbit - jackrabbit-core - 2.0.0 - test - - - - - diff --git a/test/performance/jackrabbit20/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java b/test/performance/jackrabbit20/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java deleted file mode 100644 index c64c617c07a..00000000000 --- a/test/performance/jackrabbit20/src/test/java/org/apache/jackrabbit/performance/PerformanceTest.java +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.apache.jackrabbit.performance; - -import org.testng.annotations.Test; - -public class PerformanceTest extends AbstractPerformanceTest { - - @Test - public void testPerformance() throws Exception { - testPerformance("2.0"); - } - -} diff --git a/test/performance/pom.xml b/test/performance/pom.xml index 177e9159ec3..f41929ddacd 100644 --- a/test/performance/pom.xml +++ b/test/performance/pom.xml @@ -41,7 +41,6 @@ parent base - jackrabbit20 jackrabbit21 jackrabbit22 jackrabbit23 From 78d59dfe6454111ef3d14b6ba5eb7a09a4ddf24f Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 9 Feb 2026 18:03:36 +0100 Subject: [PATCH 141/171] JCR-5226: Base64 decoder does not handle lack of padding correctly (#332) * JCR-5226: Base64 decoder does not handle input without padding correctly - failing test case * JCR-5226: Base64 decoder does not handle input without padding correctly - minimal change to handle missing padding (instead of returning garbage) * JCR-5226: more test coverage * JCR-5226: fix one more case and add more test coverage * JCR-5226: clean up test class * JCR-5226: minor refactoring of base class * JCR-5226: javadoc --- .../org/apache/jackrabbit/util/Base64.java | 57 ++++++++++++++-- .../apache/jackrabbit/util/Base64Test.java | 65 ++++++++++++++++--- 2 files changed, 105 insertions(+), 17 deletions(-) diff --git a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Base64.java b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Base64.java index 6a8557ee712..ae2925f5719 100644 --- a/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Base64.java +++ b/jackrabbit-jcr-commons/src/main/java/org/apache/jackrabbit/util/Base64.java @@ -32,9 +32,12 @@ /** * Base64 provides Base64 encoding/decoding of strings and streams. *

+ * NOTE: the decoder accepts invalid input (such as non-trailing padding characters) + * and just returns broken output (see JCR-5227). + *

* See RFC 4648, Section 4. *

- * See {@link java.util.Base64} for a JDK alternative. + * See {@link java.util.Base64} for a better JDK alternative. */ public class Base64 { @@ -323,6 +326,20 @@ public static void decode(char[] chars, OutputStream out) decode(chars, 0, chars.length, out); } + // utility methods to decode into 1st, 2nd and 3rd position of output + + private static byte decodeFirst(int b0, int b1) { + return (byte) (b0 << 2 & 0xfc | b1 >> 4 & 0x3); + } + + private static byte decodeSecond(int b1, int b2) { + return (byte) (b1 << 4 & 0xf0 | b2 >> 2 & 0xf); + } + + private static byte decodeThird(int b2, int b3) { + return (byte) (b2 << 6 & 0xc0 | b3 & 0x3f); + } + /** * Decode base64 encoded data. * @@ -356,16 +373,16 @@ public static void decode(char[] chars, int off, int len, OutputStream out) int b2 = DECODETABLE[chunk[2]]; int b3 = DECODETABLE[chunk[3]]; if (chunk[3] == BASE64PAD && chunk[2] == BASE64PAD) { - dec[0] = (byte) (b0 << 2 & 0xfc | b1 >> 4 & 0x3); + dec[0] = decodeFirst(b0, b1); out.write(dec, 0, 1); } else if (chunk[3] == BASE64PAD) { - dec[0] = (byte) (b0 << 2 & 0xfc | b1 >> 4 & 0x3); - dec[1] = (byte) (b1 << 4 & 0xf0 | b2 >> 2 & 0xf); + dec[0] = decodeFirst(b0, b1); + dec[1] = decodeSecond(b1, b2); out.write(dec, 0, 2); } else { - dec[0] = (byte) (b0 << 2 & 0xfc | b1 >> 4 & 0x3); - dec[1] = (byte) (b1 << 4 & 0xf0 | b2 >> 2 & 0xf); - dec[2] = (byte) (b2 << 6 & 0xc0 | b3 & 0x3f); + dec[0] = decodeFirst(b0, b1); + dec[1] = decodeSecond(b1, b2); + dec[2] = decodeThird(b2, b3); out.write(dec, 0, 3); } posChunk = 0; @@ -374,5 +391,31 @@ public static void decode(char[] chars, int off, int len, OutputStream out) throw new IllegalArgumentException("specified data is not base64 encoded"); } } + + // if there is an incomplete chunk... + if (posChunk != 0) { + boolean lastCharWasPad = chunk[posChunk - 1] == BASE64PAD; + if (lastCharWasPad) { + throw new IllegalArgumentException("specified data is not base64 encoded (input ends with unexpected pad character"); + } + + // handle missing padding gracefully, inspired by + // https://datatracker.ietf.org/doc/html/rfc7515#appendix-C + + if (posChunk == 1) { + throw new IllegalArgumentException("specified data is not base64 encoded (extra non-pad character"); + } + + if (posChunk == 2) { + // no padding, input length == 2; add two pad characters + chunk[2] = BASE64PAD; + chunk[3] = BASE64PAD; + } else { + // no padding, input length == 3: add one pad character + chunk[3] = BASE64PAD; + } + + decode(chunk, out); + } } } diff --git a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/Base64Test.java b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/Base64Test.java index ac1b461d80b..c79ef15d90c 100644 --- a/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/Base64Test.java +++ b/jackrabbit-jcr-commons/src/test/java/org/apache/jackrabbit/util/Base64Test.java @@ -18,19 +18,20 @@ import junit.framework.TestCase; -import java.io.IOException; import java.io.StringWriter; import java.io.ByteArrayOutputStream; import java.io.ByteArrayInputStream; +import java.nio.charset.StandardCharsets; import java.util.Random; -import java.util.Arrays; + +import static org.junit.Assert.assertArrayEquals; /** * Test cases for Base64 encode / decode. */ public class Base64Test extends TestCase { - private Random _random = new Random(); + private final Random _random = new Random(); /** * @return Returns the _random. @@ -45,8 +46,7 @@ protected Random getRandom() { public void testWhitespace() throws Exception { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); Base64.decode(" d G\tV \tzdA\n= =\n", buffer); - byte[] data = buffer.toByteArray(); - assertEquals("test", new String(data, "US-ASCII")); + assertEquals("test", buffer.toString(StandardCharsets.US_ASCII)); } /** @@ -71,7 +71,7 @@ public void testBase64Streaming() throws Exception { baos = new ByteArrayOutputStream(); Base64.decode(new ByteArrayInputStream(encData), baos); byte[] decData = baos.toByteArray(); - assertTrue(Arrays.equals(data, decData)); + assertArrayEquals(data, decData); } private void base64RoundTrip() throws Exception { @@ -98,26 +98,71 @@ private void base64RoundTrip(byte[] ba) throws Exception { } } - public void testDecodeOrEncode() throws IOException { + public void testDecodeOrEncode() { assertEquals("", Base64.decodeOrEncode(Base64.decodeOrEncode(""))); assertEquals("test", Base64.decodeOrEncode(Base64.decodeOrEncode("test"))); assertEquals("{base64}dGVzdA==", Base64.decodeOrEncode("test")); assertEquals("test", Base64.decodeOrEncode("{base64}dGVzdA==")); } - public void testDecodeIfEncoded() throws IOException { - assertEquals(null, Base64.decodeIfEncoded(null)); + public void testDecodeIfEncoded() { + assertNull(Base64.decodeIfEncoded(null)); assertEquals("", Base64.decodeIfEncoded("")); assertEquals("", Base64.decodeIfEncoded("{base64}")); assertEquals("test", Base64.decodeIfEncoded("test")); assertEquals("test", Base64.decodeIfEncoded("{base64}dGVzdA==")); } - public void testStringEncodeDecode() throws IOException { + public void testStringEncodeDecode() { assertEquals("", Base64.decode(Base64.encode(""))); assertEquals("test", Base64.decode(Base64.encode("test"))); assertEquals("dGVzdA==", Base64.encode("test")); assertEquals("test", Base64.decode("dGVzdA==")); } + public void testStringDecodeNoPadding() { + // no padding variants tested in comparison to padded ones + // https://datatracker.ietf.org/doc/html/rfc4648#section-10 + + assertEquals("foob", Base64.decode("Zm9vYg==")); + assertEquals("foob", Base64.decode("Zm9vYg")); + + assertEquals("fooba", Base64.decode("Zm9vYmE=")); + assertEquals("fooba", Base64.decode("Zm9vYmE")); + } + + public void testStringDecodeBrokenPadding() { + // incorrect number of padding characters (when padding, the total + // length needs to be a multiple of 4) + + // confirming with jdk decoder + try { + java.util.Base64.getDecoder().decode("Zm9vYg"); + } catch (IllegalArgumentException expected) { + } + + // Jackrabbit API is weird; for broken input, it just returns + // the input + assertEquals("Zm9vYg=", Base64.decode("Zm9vYg=")); + } + + public void testStringIllegalExtraChar() { + // last (4 byte) chunk of length 1 + // test with pad and non-pad + + // confirming with jdk decoder + try { + java.util.Base64.getDecoder().decode("extra"); + } catch (IllegalArgumentException expected) { + } + try { + java.util.Base64.getDecoder().decode("extr="); + } catch (IllegalArgumentException expected) { + } + + // Jackrabbit API is weird; for broken input, it just returns + // the input + assertEquals("extra", Base64.decode("extra")); + assertEquals("extr=", Base64.decode("extr=")); + } } \ No newline at end of file From 5213d444e1b67f36faa362b6323541d0a561415f Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Mon, 9 Feb 2026 19:49:13 +0100 Subject: [PATCH 142/171] JCR-5173: Fix sonar.coverage.jacoco.xmlReportPaths for modules All modules must refer to the single aggregate report to extract coverage information only from there. --- .mvn/README.md | 1 + jackrabbit-parent/pom.xml | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100644 .mvn/README.md diff --git a/.mvn/README.md b/.mvn/README.md new file mode 100644 index 00000000000..560e6560efe --- /dev/null +++ b/.mvn/README.md @@ -0,0 +1 @@ +Used for determining [`maven.multiModuleProjectDirectory`](https://issues.apache.org/jira/browse/MNG-5786). \ No newline at end of file diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 12450b070a2..a3eabe8a9cc 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -80,7 +80,8 @@ 3.6.1 - ${project.basedir}/target/site/jacoco-aggregate/jacoco.xml + + ${maven.multiModuleProjectDirectory}/target/site/jacoco-aggregate/jacoco.xml **/org/apache/jackrabbit/test/** From d855181015074ba27eca339b19943859e92032d0 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 18 Feb 2026 15:58:56 +0100 Subject: [PATCH 143/171] JCR-5230: improve diagnostics in IndexingQueueTest (#339) --- .../apache/jackrabbit/core/query/lucene/IndexingQueueTest.java | 2 +- .../main/java/org/apache/jackrabbit/core/fs/local/FileUtil.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/IndexingQueueTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/IndexingQueueTest.java index f06af8cc364..be7bada05b7 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/IndexingQueueTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/query/lucene/IndexingQueueTest.java @@ -150,7 +150,7 @@ public void testReaderUpToDate() throws Exception { try { FileUtil.delete(indexDir); } catch (IOException e) { - fail("Unable to delete index directory"); + fail("Unable to delete index directory '" + indexDir + "': " + e.getMessage()); } BlockingParser.unblock(); diff --git a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/FileUtil.java b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/FileUtil.java index 3fe4323198b..5f9b8309748 100644 --- a/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/FileUtil.java +++ b/jackrabbit-data/src/main/java/org/apache/jackrabbit/core/fs/local/FileUtil.java @@ -93,7 +93,7 @@ public static void delete(File f) throws IOException { } } if (!f.delete()) { - throw new IOException("Unable to delete " + f.getPath()); + throw new IOException("Unable to delete '" + f.getPath() + "'"); } } } From 47462e09bfc2044a4cb46b21850c637cd413a9c9 Mon Sep 17 00:00:00 2001 From: mbaedke Date: Wed, 18 Feb 2026 16:48:15 +0100 Subject: [PATCH 144/171] JCR-5229: LockedWrapperTest.testSequenceWithSessionRefresh() may fail due to race conditions (#338) Added synchronization. --- .../jackrabbit/core/LockedWrapperTest.java | 29 ++++++++++--------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/LockedWrapperTest.java b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/LockedWrapperTest.java index 46103d56410..eb5af3e4a7b 100644 --- a/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/LockedWrapperTest.java +++ b/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/LockedWrapperTest.java @@ -305,22 +305,25 @@ public Long call() throws RepositoryException, InterruptedException { } Node n = s.getNode(counterPath); - long value = new LockedWrapper() { + long value = 0; + synchronized (counter) { + value = new LockedWrapper() { - @Override - protected Long run(Node node) - throws RepositoryException { + @Override + protected Long run(Node node) + throws RepositoryException { - Property seqProp = node.getProperty("value"); - long value = seqProp.getLong(); - seqProp.setValue(++value); - s.save(); - return value; - } - }.with(n, false); + Property seqProp = node.getProperty("value"); + long value = seqProp.getLong(); + seqProp.setValue(++value); + s.save(); + return value; + } + }.with(n, false); - // check that the sequence is ok - assertEquals(counter.getAndIncrement(), value); + // check that the sequence is ok + assertEquals(counter.getAndIncrement(), value); + } // do a random wait Thread.sleep(random.nextInt(100)); From 024bca3806907cff6abcf2f922149728b1cd08c0 Mon Sep 17 00:00:00 2001 From: Konrad Windszus Date: Mon, 9 Feb 2026 18:01:35 +0100 Subject: [PATCH 145/171] Update sonar-m-p to 5.5.0.6356 Execute Sonar run with Java 21 (Java 17 is deprecated for Sonar) Update Actions to Node.js 24 compliant versions --- .github/workflows/build.yml | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index f112f2d3929..7b9108af5b0 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -28,9 +28,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Git clone - uses: actions/checkout@v4 + uses: actions/checkout@v6 - name: Set up JDK 11 - uses: actions/setup-java@v4 + uses: actions/setup-java@v5 with: java-version: 11 distribution: temurin @@ -57,7 +57,7 @@ jobs: # executing ITs requires installing artifacts to the local repository run: mvn -B ${{ env.MVN_GOAL }} ${{ env.MVN_ADDITIONAL_OPTS }} -Pcoverage,integrationTesting,javadoc -Dorg.ops4j.pax.url.mvn.repositories="https://repo1.maven.org/maven2@id=central" - name: Upload build result - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v6 with: name: compiled-classes-and-coverage # compare with https://docs.sonarsource.com/sonarqube-cloud/advanced-setup/languages/java/#java-analysis-and-bytecode @@ -72,15 +72,15 @@ jobs: runs-on: ubuntu-latest needs: build # not supported on forks, https://portal.productboard.com/sonarsource/1-sonarqube-cloud/c/50-sonarcloud-analyzes-external-pull-request - if: ${{ github.repository == 'apache/jackrabbit' }} + if: ${{ github.repository == 'apache/jackrabbit' }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v6 with: fetch-depth: 0 # Shallow clones should be disabled for a better relevancy of analysis - - name: Set up JDK 17 - uses: actions/setup-java@v4 + - name: Set up JDK 21 + uses: actions/setup-java@v5 with: - java-version: 17 + java-version: 21 distribution: temurin cache: maven - name: Download compiled classes @@ -88,7 +88,7 @@ jobs: with: name: compiled-classes-and-coverage - name: Cache SonarQube packages - uses: actions/cache@v4 + uses: actions/cache@v5 with: path: ~/.sonar/cache key: ${{ runner.os }}-sonar @@ -97,4 +97,4 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information, if any SONAR_TOKEN: ${{ secrets.SONARCLOUD_TOKEN }} - run: SONAR_SCANNER_JAVA_OPTS="-Xmx8g" mvn -B org.sonarsource.scanner.maven:sonar-maven-plugin:5.1.0.4751:sonar -Dsonar.projectKey=apache_jackrabbit -Dsonar.organization=apache -Dsonar.scanner.skipJreProvisioning=true \ No newline at end of file + run: SONAR_SCANNER_JAVA_OPTS="-Xmx8g" mvn -B org.sonarsource.scanner.maven:sonar-maven-plugin:5.5.0.6356:sonar -Dsonar.projectKey=apache_jackrabbit -Dsonar.organization=apache -Dsonar.scanner.skipJreProvisioning=true \ No newline at end of file From ea2755fa4118a0cfde45ac1a52bb0beff68c1ea9 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 23 Mar 2026 16:31:10 +0100 Subject: [PATCH 146/171] JCR-5232: Update Jackrabbit Trunk to Oak 1.92.0 (#341) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index a3eabe8a9cc..b8c9c6f3886 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.90.0 + 1.92.0 1.22.22 9.4.58.v20250814 From 1448fc22f8e9638a61ef8d3dec6d221befbe0de1 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 1 Apr 2026 12:33:47 +0200 Subject: [PATCH 147/171] JCR-5222: webapp: update tomcat dependency to 9.0.116 (#342) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 80c9a95c8e3..922279a1202 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.115 + 9.0.116 From 6cce9a4c3eafdcaf3334ba90236ee5c681198af9 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 1 Apr 2026 12:39:52 +0200 Subject: [PATCH 148/171] JCR-5217: Update Mockito dependency to 5.23.0 (#343) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index b8c9c6f3886..98882d3ed11 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -650,7 +650,7 @@ org.mockito mockito-core - 5.21.0 + 5.23.0 From aca95bec892be98594c11675fef43de91c84c58e Mon Sep 17 00:00:00 2001 From: mbaedke Date: Wed, 1 Apr 2026 15:14:46 +0200 Subject: [PATCH 149/171] JCR-4945: Ensure OSGi-enabled Jackrabbit bundles deploy in environments featuring only Slf4j v2 or even Tika v2.9 (#337) Added tests. --- .../org/apache/jackrabbit/osgi/OSGiIT.java | 1 + .../slf4j2/Slf4j_v2_Tika_v2_4_OSGiIT.java | 154 ++++++++++++++++++ .../slf4j2/Slf4j_v2_Tika_v2_9_OSGiIT.java | 154 ++++++++++++++++++ jackrabbit-it-osgi/test-bundles.xml | 1 - 4 files changed, 309 insertions(+), 1 deletion(-) create mode 100644 jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/slf4j2/Slf4j_v2_Tika_v2_4_OSGiIT.java create mode 100644 jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/slf4j2/Slf4j_v2_Tika_v2_9_OSGiIT.java diff --git a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/OSGiIT.java b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/OSGiIT.java index fb8b0f803b2..d30ac442e69 100644 --- a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/OSGiIT.java +++ b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/OSGiIT.java @@ -66,6 +66,7 @@ public Option[] configuration() throws IOException, URISyntaxException { mavenBundle("org.apache.felix", "org.apache.felix.fileinstall", "3.2.6"), mavenBundle("org.slf4j", "slf4j-api", "1.7.36"), mavenBundle("commons-logging", "commons-logging", "1.2"), + mavenBundle("org.apache.tika", "tika-core", "2.4.1"), mavenBundle("ch.qos.logback", "logback-core", "1.2.13"), mavenBundle("ch.qos.logback", "logback-classic", "1.2.13"), frameworkProperty("repository.home").value("target"), diff --git a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/slf4j2/Slf4j_v2_Tika_v2_4_OSGiIT.java b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/slf4j2/Slf4j_v2_Tika_v2_4_OSGiIT.java new file mode 100644 index 00000000000..b3371f8e328 --- /dev/null +++ b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/slf4j2/Slf4j_v2_Tika_v2_4_OSGiIT.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.osgi.slf4j2; + +import static org.junit.Assert.assertEquals; +import static org.ops4j.pax.exam.CoreOptions.bundle; +import static org.ops4j.pax.exam.CoreOptions.frameworkProperty; +import static org.ops4j.pax.exam.CoreOptions.junitBundles; +import static org.ops4j.pax.exam.CoreOptions.mavenBundle; +import static org.ops4j.pax.exam.CoreOptions.systemProperties; +import static org.ops4j.pax.exam.CoreOptions.systemProperty; +import static org.ops4j.pax.exam.CoreOptions.vmOption; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.MalformedURLException; +import java.net.URISyntaxException; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.CoreOptions; +import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.junit.PaxExam; +import org.ops4j.pax.exam.options.DefaultCompositeOption; +import org.ops4j.pax.exam.options.SystemPropertyOption; +import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; +import org.ops4j.pax.exam.spi.reactors.PerClass; +import org.ops4j.pax.exam.util.PathUtils; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.Version; + +@RunWith(PaxExam.class) +@ExamReactorStrategy(PerClass.class) +public class Slf4j_v2_Tika_v2_4_OSGiIT { + + @Configuration + public Option[] configuration() throws IOException, URISyntaxException { + return CoreOptions.options( + junitBundles(), + mavenBundle("org.osgi", "org.osgi.service.log", "1.3.0"), + mavenBundle("org.apache.felix", "org.apache.felix.scr", "2.0.12"), + mavenBundle("org.apache.felix", "org.apache.felix.jaas", "1.0.2"), + mavenBundle("org.osgi", "org.osgi.dto", "1.0.0"), + mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.16"), + mavenBundle("org.apache.felix", "org.apache.felix.fileinstall", "3.2.6"), + + //slf4j-api-2.0.7 requirement: + //[slf4j.api [24](R 24.0)] osgi.extender; (&(osgi.extender=osgi.serviceloader.processor)(version>=1.0.0)(!(version>=2.0.0))) + mavenBundle("org.ow2.asm", "asm", "9.5"), + mavenBundle("org.ow2.asm", "asm-tree", "9.5"), + mavenBundle("org.ow2.asm", "asm-analysis", "9.5"), + mavenBundle("org.ow2.asm", "asm-commons", "9.5"), + mavenBundle("org.ow2.asm", "asm-util", "9.5"), + mavenBundle("org.apache.aries.spifly", "org.apache.aries.spifly.dynamic.bundle", "1.3.6"), + + mavenBundle("org.slf4j", "slf4j-api", "2.0.7"), + mavenBundle("ch.qos.logback", "logback-core", "1.3.5"), + mavenBundle("ch.qos.logback", "logback-classic", "1.3.5"), + + mavenBundle("commons-logging", "commons-logging", "1.2"), + mavenBundle("org.apache.tika", "tika-core", "2.4.1"), + + frameworkProperty("repository.home").value("target"), + systemProperties( + systemProperty("logback.configurationFile") + .value("file:" + PathUtils.getBaseDir() + "/src/test/resources/logback-test.xml"), + new SystemPropertyOption("felix.fileinstall.dir").value(getConfigDir())), + jarBundles(), + jpmsOptions()); + } + + private Option jpmsOptions(){ + DefaultCompositeOption composite = new DefaultCompositeOption(); + if (Version.parseVersion(System.getProperty("java.specification.version")).getMajor() > 1){ + if (java.nio.file.Files.exists(java.nio.file.FileSystems.getFileSystem(URI.create("jrt:/")).getPath("modules", "java.se.ee"))){ + composite.add(vmOption("--add-modules=java.se.ee")); + } + composite.add(vmOption("--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.lang=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.lang.invoke=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.io=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.net=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.nio=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.jar=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.regex=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.zip=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/sun.nio.ch=ALL-UNNAMED")); + } + return composite; + } + + private String getConfigDir(){ + return new File(new File("src", "test"), "config").getAbsolutePath(); + } + + private Option jarBundles() throws MalformedURLException { + DefaultCompositeOption composite = new DefaultCompositeOption(); + for (File bundle : new File("target", "test-bundles").listFiles()) { + if (bundle.getName().endsWith(".jar") && bundle.isFile()) { + composite.add(bundle(bundle.toURI().toURL().toString())); + } + } + return composite; + } + + @Inject + private BundleContext context; + + @Test + public void bundleStates() { + for (Bundle bundle : context.getBundles()) { + assertEquals( + String.format("Bundle %s not active. have a look at the logs", bundle.toString()), + Bundle.ACTIVE, bundle.getState()); + } + } + + @Test + public void listBundles() { + for (Bundle bundle : context.getBundles()) { + System.out.println(bundle); + } + } + + @Test + public void listServices() throws InvalidSyntaxException { + for (ServiceReference reference + : context.getAllServiceReferences(null, null)) { + System.out.println(reference); + } + } +} diff --git a/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/slf4j2/Slf4j_v2_Tika_v2_9_OSGiIT.java b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/slf4j2/Slf4j_v2_Tika_v2_9_OSGiIT.java new file mode 100644 index 00000000000..a814892f618 --- /dev/null +++ b/jackrabbit-it-osgi/src/test/java/org/apache/jackrabbit/osgi/slf4j2/Slf4j_v2_Tika_v2_9_OSGiIT.java @@ -0,0 +1,154 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.osgi.slf4j2; + +import static org.junit.Assert.assertEquals; +import static org.ops4j.pax.exam.CoreOptions.bundle; +import static org.ops4j.pax.exam.CoreOptions.frameworkProperty; +import static org.ops4j.pax.exam.CoreOptions.junitBundles; +import static org.ops4j.pax.exam.CoreOptions.mavenBundle; +import static org.ops4j.pax.exam.CoreOptions.systemProperties; +import static org.ops4j.pax.exam.CoreOptions.systemProperty; +import static org.ops4j.pax.exam.CoreOptions.vmOption; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.net.MalformedURLException; +import java.net.URISyntaxException; + +import javax.inject.Inject; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.ops4j.pax.exam.Configuration; +import org.ops4j.pax.exam.CoreOptions; +import org.ops4j.pax.exam.Option; +import org.ops4j.pax.exam.junit.PaxExam; +import org.ops4j.pax.exam.options.DefaultCompositeOption; +import org.ops4j.pax.exam.options.SystemPropertyOption; +import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy; +import org.ops4j.pax.exam.spi.reactors.PerClass; +import org.ops4j.pax.exam.util.PathUtils; +import org.osgi.framework.Bundle; +import org.osgi.framework.BundleContext; +import org.osgi.framework.InvalidSyntaxException; +import org.osgi.framework.ServiceReference; +import org.osgi.framework.Version; + +@RunWith(PaxExam.class) +@ExamReactorStrategy(PerClass.class) +public class Slf4j_v2_Tika_v2_9_OSGiIT { + + @Configuration + public Option[] configuration() throws IOException, URISyntaxException { + return CoreOptions.options( + junitBundles(), + mavenBundle("org.osgi", "org.osgi.service.log", "1.3.0"), + mavenBundle("org.apache.felix", "org.apache.felix.scr", "2.0.12"), + mavenBundle("org.apache.felix", "org.apache.felix.jaas", "1.0.2"), + mavenBundle("org.osgi", "org.osgi.dto", "1.0.0"), + mavenBundle("org.apache.felix", "org.apache.felix.configadmin", "1.8.16"), + mavenBundle("org.apache.felix", "org.apache.felix.fileinstall", "3.2.6"), + + //slf4j-api-2.0.7 requirement: + //[slf4j.api [24](R 24.0)] osgi.extender; (&(osgi.extender=osgi.serviceloader.processor)(version>=1.0.0)(!(version>=2.0.0))) + mavenBundle("org.ow2.asm", "asm", "9.5"), + mavenBundle("org.ow2.asm", "asm-tree", "9.5"), + mavenBundle("org.ow2.asm", "asm-analysis", "9.5"), + mavenBundle("org.ow2.asm", "asm-commons", "9.5"), + mavenBundle("org.ow2.asm", "asm-util", "9.5"), + mavenBundle("org.apache.aries.spifly", "org.apache.aries.spifly.dynamic.bundle", "1.3.6"), + + mavenBundle("org.slf4j", "slf4j-api", "2.0.7"), + mavenBundle("ch.qos.logback", "logback-core", "1.3.5"), + mavenBundle("ch.qos.logback", "logback-classic", "1.3.5"), + + mavenBundle("commons-logging", "commons-logging", "1.2"), + mavenBundle("org.apache.tika", "tika-core", "2.9.4"), + + frameworkProperty("repository.home").value("target"), + systemProperties( + systemProperty("logback.configurationFile") + .value("file:" + PathUtils.getBaseDir() + "/src/test/resources/logback-test.xml"), + new SystemPropertyOption("felix.fileinstall.dir").value(getConfigDir())), + jarBundles(), + jpmsOptions()); + } + + private Option jpmsOptions(){ + DefaultCompositeOption composite = new DefaultCompositeOption(); + if (Version.parseVersion(System.getProperty("java.specification.version")).getMajor() > 1){ + if (java.nio.file.Files.exists(java.nio.file.FileSystems.getFileSystem(URI.create("jrt:/")).getPath("modules", "java.se.ee"))){ + composite.add(vmOption("--add-modules=java.se.ee")); + } + composite.add(vmOption("--add-opens=java.base/jdk.internal.loader=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.lang=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.lang.invoke=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.io=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.net=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.nio=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.jar=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.regex=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/java.util.zip=ALL-UNNAMED")); + composite.add(vmOption("--add-opens=java.base/sun.nio.ch=ALL-UNNAMED")); + } + return composite; + } + + private String getConfigDir(){ + return new File(new File("src", "test"), "config").getAbsolutePath(); + } + + private Option jarBundles() throws MalformedURLException { + DefaultCompositeOption composite = new DefaultCompositeOption(); + for (File bundle : new File("target", "test-bundles").listFiles()) { + if (bundle.getName().endsWith(".jar") && bundle.isFile()) { + composite.add(bundle(bundle.toURI().toURL().toString())); + } + } + return composite; + } + + @Inject + private BundleContext context; + + @Test + public void bundleStates() { + for (Bundle bundle : context.getBundles()) { + assertEquals( + String.format("Bundle %s not active. have a look at the logs", bundle.toString()), + Bundle.ACTIVE, bundle.getState()); + } + } + + @Test + public void listBundles() { + for (Bundle bundle : context.getBundles()) { + System.out.println(bundle); + } + } + + @Test + public void listServices() throws InvalidSyntaxException { + for (ServiceReference reference + : context.getAllServiceReferences(null, null)) { + System.out.println(reference); + } + } +} diff --git a/jackrabbit-it-osgi/test-bundles.xml b/jackrabbit-it-osgi/test-bundles.xml index 26f9814835d..367af71f31a 100644 --- a/jackrabbit-it-osgi/test-bundles.xml +++ b/jackrabbit-it-osgi/test-bundles.xml @@ -36,7 +36,6 @@ org.apache.jackrabbit:jackrabbit-jcr-commons org.apache.jackrabbit:jackrabbit-spi org.apache.jackrabbit:jackrabbit-spi-commons - org.apache.tika:tika-core org.apache.httpcomponents:httpclient-osgi org.apache.httpcomponents:httpcore-osgi org.apache.jackrabbit:jackrabbit-webdav From 5e7178dc7a316e051b40141b7e36ada85f4ba224 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 7 Apr 2026 08:45:49 +0200 Subject: [PATCH 150/171] JCR-5234: Release Jackrabbit 2.23.4-beta - Candidate Release Notes (#345) --- RELEASE-NOTES.txt | 58 ++++++++++++++++------------------------------- 1 file changed, 20 insertions(+), 38 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index bba02b7574a..3a269d17472 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,62 +1,44 @@ -Release Notes -- Apache Jackrabbit -- Version 2.23.2-beta +Release Notes -- Apache Jackrabbit -- Version 2.23.4-beta Introduction ------------ -This is Apache Jackrabbit(TM) 2.23.3-beta, a fully compliant implementation of the +This is Apache Jackrabbit(TM) 2.23.4-beta, a fully compliant implementation of the Content Repository for Java(TM) Technology API, version 2.0 (JCR 2.0) as specified in the Java Specification Request 283 (JSR 283). -Apache Jackrabbit 2.23.3-beta is an unstable release cut directly from +Apache Jackrabbit 2.23.4-beta is an unstable release cut directly from Jackrabbit trunk, with a focus on new features and other improvements. For production use we recommend the latest stable 2.20.x release. -Changes in Jackrabbit 2.23.3-beta +Changes in Jackrabbit 2.23.4-beta ---------------------------------- -Sub-task - - [JCR-5160] - Create jacoco reports compliant with SonarQube Cloud - [JCR-5172] - Exclude test sources from SonarQube analysis - [JCR-5173] - Create aggregate jacoco report - [JCR-5174] - Exclude jackrabbit-jcr-tests from coverage calculation - - Bug - [JCR-5090] - Invalid href generated for 'Edit' buttons - [JCR-5141] - Deprecate org.apache.jackrabbit.commons.json - [JCR-5196] - Some test classes are not executed by default because they haven't been added to a test suite - [JCR-5203] - integration tests in jackrabbit-core occasionally fail to ItemNotFoundExceptions during cleanup + [JCR-5226] - Base64 decoder does not handle input without padding correctly + [JCR-5229] - LockedWrapperTest.testSequenceWithSessionRefresh() may fail due to race conditions Improvement - [JCR-5154] - Replace deprecated call of Class.newInstance() + [JCR-4521] - upgrade to commons-dbcp2 + +Test + + [JCR-4945] - Ensure OSGi-enabled Jackrabbit bundles deploy in environments featuring only Slf4j v2 or even Tika v2.9 Task - [JCR-5140] - Improve support for generating namespace prefixes - [JCR-5156] - webapp: update tomcat dependency to 9.0.112 - [JCR-5175] - Update Mockito dependency to 5.20.0 - [JCR-5176] - Update commons-io dependency to 2.21.0 - [JCR-5177] - jackrabbit-jcr2spi: update to commons-collections4 4.5.0 - [JCR-5178] - Update easymock dependency to 5.6.0 - [JCR-5179] - set baseline comparisonVersion to latest stable (2.22.1) - [JCR-5182] - Update pax-exam test dependency to 4.14.0 - [JCR-5183] - Vote Template should be clear about the fact that running the check script in "sh" will not work - [JCR-5185] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.86.0 - [JCR-5187] - Update commons-cli dependency to 1.11.0 - [JCR-5188] - Update h2db dependency to 2.3.232 - [JCR-5189] - update Jetty to 9.4.58.v20250814 - [JCR-5190] - webapp: bump htmlunit to 4.19.0 - [JCR-5191] - remove JEXL dependency - [JCR-5192] - update aws java sdk version to 1.12.791 - [JCR-5193] - update Apache parent pom to version 35 - [JCR-5195] - Utilities for 'safe' creation of XML document builders - [JCR-5197] - cleanup o.a.j.util.Base64 and update Javadoc - [JCR-5200] - Update h2db dependency to 2.4.240 - [JCR-5201] - Update oak-jackrabbit-api.version.implemented in trunk to Oak 1.88.0 + [JCR-5211] - package-version jcr2spi + [JCR-5216] - Update Jackrabbit Trunk to Oak 1.90.0 + [JCR-5217] - Update Mockito dependency to 5.23.0 + [JCR-5218] - webapp: bump htmlunit to 4.21.0 + [JCR-5219] - set baseline comparisonVersion to latest stable (2.22.3) + [JCR-5223] - update Apache parent pom to version 37 + [JCR-5224] - remove jackrabbit 2.0 compatibility and performance tests + [JCR-5230] - improve diagnostics in IndexingQueueTest + [JCR-5232] - Update Jackrabbit Trunk to Oak 1.92.0 For more detailed information about all the changes in this and other From cc36b3947883648dda545ed3a23f6ef75f62a7e6 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 7 Apr 2026 08:37:27 +0100 Subject: [PATCH 151/171] [maven-release-plugin] prepare release jackrabbit-2.23.4-beta --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 6 +++--- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index eb72d02df93..214638943cb 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 0d514a9ef87..f2461d92c4e 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index ba9e5bd7d31..0fca56e167d 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index 48fd82b8fe0..02d2f85a5f6 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index 16eceb6a51f..4715db3f3dd 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index 971821a9560..39c5bdd3b5e 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index 94fbc28cee9..49f279fa0ab 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 8fb502e1048..1aeec6178cf 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index fdcf498a8a7..449d91883c5 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index 751900379d5..f2d5e86acdd 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index 2c550fad0eb..237481e1ecc 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index 3903ce63561..959c4d5f246 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 98882d3ed11..b5f6b6e4a3e 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.3-beta-SNAPSHOT + 2.23.4-beta pom @@ -47,7 +47,7 @@ scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git https://github.com/apache/jackrabbit/tree/${project.scm.tag} - jackrabbit-2.23.1-beta + jackrabbit-2.23.4-beta @@ -76,7 +76,7 @@ 0.0 - 1752168029 + 1775544830 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index e9957b402d2..a2610499dc0 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index fc0549d1268..a34555dbebc 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index 3c7e590c0ca..d378faae95e 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index 25f05554bd1..82056ffb23b 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 914cbb78575..356c557e900 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index 2b53203004c..ed75b541d9d 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index 1c9836818c4..05ba99b44e4 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 922279a1202..cf893c8b113 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index e8e0b16ea15..cce3ad3e92e 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index 3d758614037..36227a856ce 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.3-beta-SNAPSHOT + 2.23.4-beta jackrabbit-parent/pom.xml From e868deec6c1063e5c51eac33a4bef3dbb8b8bfbc Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 7 Apr 2026 08:37:40 +0100 Subject: [PATCH 152/171] [maven-release-plugin] prepare for next development iteration --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 4 ++-- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 24 insertions(+), 24 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index 214638943cb..03939b7686e 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index f2461d92c4e..f5ade1fbd53 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index 0fca56e167d..af55599dcef 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index 02d2f85a5f6..1989aacb6bd 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index 4715db3f3dd..e2b829c1531 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index 39c5bdd3b5e..f9bb0c0b85c 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index 49f279fa0ab..ad5ac8e82bf 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 1aeec6178cf..29f9dc5403b 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index 449d91883c5..eb81a85886c 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index f2d5e86acdd..bd07178c6b7 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index 237481e1ecc..c547bde34b0 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index 959c4d5f246..b0ea548c8dc 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index b5f6b6e4a3e..a5fe594aeb9 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.4-beta + 2.23.5-beta-SNAPSHOT pom @@ -76,7 +76,7 @@ 0.0 - 1775544830 + 1775547457 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index a2610499dc0..091a315dac4 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index a34555dbebc..537b58307dd 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index d378faae95e..ee78086b8de 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index 82056ffb23b..50d69fa695a 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 356c557e900..554ebd7cf26 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index ed75b541d9d..7dee0b2c61a 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index 05ba99b44e4..f501a6cdd4b 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index cf893c8b113..dad1d1893ea 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index cce3ad3e92e..13945b6556f 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index 36227a856ce..57da440b376 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.4-beta + 2.23.5-beta-SNAPSHOT jackrabbit-parent/pom.xml From b13371b7be617c6868a53f4c093ee861a1154338 Mon Sep 17 00:00:00 2001 From: Jarek Potiuk Date: Sat, 30 May 2026 02:11:21 +0200 Subject: [PATCH 153/171] Add draft project security threat-model document MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a draft project-level security threat-model document (draft-THREAT-MODEL.md) at repo root, improving discoverability for automated security scanners running against this repository. The file follows the rubric format used by several other ASF projects piloting security-model discoverability. The "draft-" prefix signals this is a proposal for the PMC to review, correct, or reject — not a finalised maintainer-blessed model. Every claim carries a provenance tag (documented / inferred / maintainer) so reviewers can see where each claim originates; §14 collects open questions for the maintainers. Co-Authored-By: Claude Opus 4.7 (1M context) --- draft-THREAT-MODEL.md | 793 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 793 insertions(+) create mode 100644 draft-THREAT-MODEL.md diff --git a/draft-THREAT-MODEL.md b/draft-THREAT-MODEL.md new file mode 100644 index 00000000000..3f39789bd18 --- /dev/null +++ b/draft-THREAT-MODEL.md @@ -0,0 +1,793 @@ + + +# Apache Jackrabbit Security Threat Model (draft) + +**Why a separate Jackrabbit model (not folded into Jackrabbit Oak).** +The Jackrabbit PMC owns three functionally distinct codebases. The +original `jackrabbit` (commonly "Jackrabbit 2.x" / jackrabbit-core) and +`jackrabbit-oak` share a JCR API contract but have different storage +architectures, different security stacks (Oak introduced a redesigned +`SecurityProvider`-based model; Jackrabbit-2 uses the older JR2 ACL + +JAAS plumbing), different threading models, and — most importantly — +different maintenance postures. Jackrabbit is in *maintenance mode* with +JCR-API and reference-implementation work still happening but no major +feature development; Oak is the active product. Triage rules and +"what's in scope" differ enough that one document would have to caveat +every claim. The Jackrabbit PMC has confirmed (`.asf.yaml` ties commits +to `oak-dev@jackrabbit.apache.org` for Oak and `jackrabbit-dev@…` for +this repo; they are run as one project but the codebases are +independent) that the two are independent codebases. Modelling them +separately is the more truthful representation. `jackrabbit-filevault` +also gets its own model because its trust boundary (untrusted zip +package → repository) is qualitatively different. + +## §1 Header + +- **Project:** Apache Jackrabbit (`apache/jackrabbit`) — the original / + legacy JCR implementation, distinct from Apache Jackrabbit Oak. + Includes jackrabbit-core (repository), jackrabbit-spi / + jackrabbit-spi2dav (SPI layer), jackrabbit-jcr-*, jackrabbit-webdav, + jackrabbit-jcr2dav, and the JCR API artefacts *(documented: + `README.txt`, repo top-level)*. +- **Commit / version binding:** drafted against `trunk`. A + vulnerability report against Jackrabbit version *N* should be + triaged against the model as it stood at *N* (release tag). +- **Date:** 2026-05-30. +- **Authors:** ASF Security team draft, awaiting Jackrabbit PMC review. +- **Status:** draft — under maintainer review. +- **Reporting cross-reference:** findings that may violate a §8 + property should be reported per the ASF Security Team disclosure + channel (`security@apache.org`) and the project's security mailing + list, before public disclosure. Findings under §3, §9, §11a + will be closed by Jackrabbit triagers citing this document. (The + Jackrabbit website hosts a CVE list at + `jackrabbit.apache.org/jcr/jackrabbit-security-reports.html` — + draft-time review of this URL did not produce a full enumeration + for this draft; §14 Q1 asks the PMC to confirm the CVE + history.) +- **Provenance legend:** *(documented)* — drawn from in-repo docs or + website docs with citation; *(maintainer)* — confirmed by a + Jackrabbit maintainer in response to this draft; *(inferred)* — + synthesised from code structure or domain knowledge, awaiting PMC + ratification (every *(inferred)* tag has a matching §14 question). +- **Draft confidence:** 14 documented / 0 maintainer / 32 inferred. + *(This model leans more heavily on inference than the Oak model + because jackrabbit-core's docs are older and less prescriptive + about modern security claims; many §8 properties need PMC + ratification.)* + +**About the project.** Apache Jackrabbit is "a fully conforming +implementation of the Content Repository for Java Technology API (JCR, +specified in JSR 170 and 283)" *(documented: `README.txt`)*. It +predates Apache Jackrabbit Oak and was the original JCR reference +implementation. The repository hosts: + +- **jackrabbit-core** — the legacy repository implementation (JR2 / + jackrabbit-2 storage architecture); +- **jackrabbit-spi** + **jackrabbit-spi-commons** + **jackrabbit-spi2dav** + + **jackrabbit-spi2jcr** — the SPI layer used as a bridge between + client and server when WebDAV is involved; +- **jackrabbit-jcr-commons**, **jackrabbit-jcr-rmi**, + **jackrabbit-jcr-server**, **jackrabbit-jcr-tests**, + **jackrabbit-jcr-client** — the JCR client / server / RMI bindings + and the JCR TCK harness; +- **jackrabbit-webdav** + **jackrabbit-jcr2dav** — WebDAV-over-JCR; +- **examples/jackrabbit-firsthops** — sample code. + +The maintenance posture is "in active maintenance, not active feature +development". Some users still run jackrabbit-2 production +repositories (especially the WebDAV-over-JCR stack) but the PMC's +forward-looking effort is on Oak *(inferred — §14 Q2)*. + +## §2 Scope and intended use + +### Intended use + +- **In-process JCR 2.0 (JSR 283) repository implementation** embedded + by a host application, *or* exposed through one of jackrabbit- + webdav / jackrabbit-jcr-server / jackrabbit-jcr-rmi as a network + service *(documented: `README.txt`; module presence)*. Unlike Oak, + Jackrabbit *does* ship network bindings. +- **The JCR API artefacts and SPI layer** are reusable on their own + (callers depend on `javax.jcr.*` interfaces published from this + repo); they are also dependencies of Oak and of jackrabbit- + filevault. + +### Deployment shape + +Jackrabbit covers two distinct deployment shapes: + +1. **In-process JCR library** — same shape as Oak: a host application + instantiates a `Repository`, logs in, gets a `Session`, reads/writes. +2. **Network-exposed via jackrabbit-webdav + jackrabbit-jcr-server + + jackrabbit-jcr2dav** — the repository is fronted by a WebDAV (or + RMI) servlet; HTTP/WebDAV clients authenticate (usually via HTTP + Basic or Digest) and the servlet translates WebDAV verbs into JCR + operations *(inferred — §14 Q3)*. This brings authentication, + HTTP parsing, and (in 2.x) XML parsing for WebDAV bodies onto the + in-model surface. + +This split is the most consequential modelling decision: the +in-process and the network-exposed deployments have different +adversary models (§7), different reachable surfaces (§4), and +different downstream responsibilities (§10). + +### Caller roles + +| Role | Trust level | Notes | +| --- | --- | --- | +| **Host application code (embedded mode)** | trusted | Holds the JCR `Repository` handle; chooses the security configuration. | +| **JCR session principal** | untrusted but authenticated | Identified via `Repository.login(Credentials)` against the configured `LoginModule`. | +| **System principal / admin user** | trusted | Default `admin`/`admin` ships with jackrabbit-core; widely cited as the "first thing to change in production" *(inferred — §14 Q4)*. | +| **WebDAV / RMI / HTTP client (network-exposed mode)** | untrusted | Reaches Jackrabbit through jackrabbit-webdav / jackrabbit-jcr-server. Carries HTTP Basic or Digest credentials. | +| **WebDAV operator / servlet container** | trusted | Configures Tomcat/Jetty, TLS, authentication realm, and chooses which JCR repository the servlet exposes. | +| **External resource referenced by WebDAV body (XML entities, etc.)** | untrusted control plane | jackrabbit-webdav historically parses XML bodies for `PROPFIND`, `LOCK`, `REPORT`; XXE-class concerns are in-model here *(inferred — §14 Q5)*. | +| **Persistence manager backend (filesystem / JDBC database)** | trusted | jackrabbit-core's persistence managers write to disk or to a relational DB the operator configures *(inferred — §14 Q6)*. | + +### Component-family table + +| Family | Representative entry | Touches outside the process? | In-model? | +| --- | --- | --- | --- | +| **JCR API artefacts** (`javax.jcr.*` published from `jackrabbit-jcr-commons`) | API surface | no | **yes** (consumer contract; almost no implementation though) | +| **jackrabbit-core** — repository implementation, JR2 persistence | `RepositoryImpl.login` | filesystem (PM, search index, data store) | **yes** | +| **jackrabbit-spi**, **jackrabbit-spi-commons**, **jackrabbit-spi2jcr**, **jackrabbit-spi2dav** | SPI bridge | depends on the SPI impl | **yes** | +| **jackrabbit-jcr-commons** | utilities | no | **yes** | +| **jackrabbit-jcr-rmi** | RMI bindings *(inferred — §14 Q3)* | **yes — RMI** | **yes** (network surface) | +| **jackrabbit-jcr-server** | server-side glue | **yes — HTTP** | **yes** (network surface) | +| **jackrabbit-jcr-client** | client-side glue | **yes — HTTP / RMI** | **yes** for the client posture | +| **jackrabbit-webdav** | WebDAV protocol + XML handling | **yes — HTTP + XML parse** | **yes** (high security weight, XML / XXE-class) | +| **jackrabbit-jcr2dav** | WebDAV ↔ JCR adaptation | **yes — HTTP** | **yes** | +| **jackrabbit-jcr-tests** | JCR TCK | none | **out of model** — test harness *(§3)* | +| **examples/jackrabbit-firsthops** | sample app | varies | **out of model** *(§3)* | +| **jackrabbit-standalone** / **jackrabbit-standalone-components** *(inferred — §14 Q7)* | standalone server launcher | filesystem + HTTP | in-model only as a runner, not a security boundary | +| **jackrabbit-aws-ext** *(inferred — §14 Q7)* | S3 data-store extension | **yes — S3** | in-model for in-Jackrabbit code; cloud APIs trusted (§3) | + +A finding is in-model only if it lands in a row marked **yes**; see +§4 for per-component reachability tests. + +## §3 Out of scope (explicit non-goals) + +Reports requiring any of these will be closed with the cited +disposition: + +1. **Host application correctness (embedded mode) / servlet + container configuration (network mode).** Tomcat / Jetty + misconfiguration, missing TLS, missing HTTP-Basic realm — those are + operator / host issues *(inferred — §14 Q8)*. → `OUT-OF-MODEL: + adversary-not-in-scope`. +2. **Underlying persistence-manager correctness.** Jackrabbit-core's + PMs delegate to filesystem or JDBC; a hostile filesystem / hostile + database is not Jackrabbit's threat *(inferred — §14 Q6)*. → + `OUT-OF-MODEL: trusted-input`. +3. **Failing to rotate the default `admin`/`admin` user.** Documented + convention; operator responsibility *(inferred — §14 Q4)*. → + `OUT-OF-MODEL: non-default-build`. +4. **Code that ships but is not part of the supported product:** + `jackrabbit-jcr-tests/` (TCK harness), + `examples/jackrabbit-firsthops/`. → `OUT-OF-MODEL: + unsupported-component`. +5. **Issues that exist in `jackrabbit-oak`.** Oak has its own + threat model; cross-references not duplications. +6. **Issues in `jackrabbit-filevault`.** Filevault has its own + threat model. +7. **Build / release / SDLC hygiene.** Out of model per the SKILL. +8. **Java EE / J2EE container vulnerabilities** when jackrabbit-jcr- + server / jackrabbit-webdav is hosted under one. The container is + the operator's choice *(inferred — §14 Q9)*. → `OUT-OF-MODEL: + adversary-not-in-scope`. +9. **Maintenance-mode reality.** This repository is in active + maintenance for **bug** and **security** fixes but is not under + active feature development *(inferred — §14 Q2)*. A report that + "feature X would be more secure if implemented as Y" is, in + maintenance mode, more of a roadmap item than a triagable + security claim, *unless* it concerns an upgrade path to a fix. +10. **Side channels** (cache timing, JVM JIT, co-resident JVM + code). → `OUT-OF-MODEL: adversary-not-in-scope`. +11. **WebDAV semantics that the protocol requires.** WebDAV exposes + directory listing, file PUT, MOVE, COPY, etc. A complaint that + "this user can `PUT` and overwrite my file" is the JCR + authorisation model's call, not a WebDAV-layer bug. + +## §4 Trust boundaries and data flow + +Jackrabbit has up to seven trust transitions a finding must land +inside to be in-model: + +| # | Transition | Authentication | Authorisation | +| --- | --- | --- | --- | +| B1 | Host code → `Repository.login(Credentials)` (embedded mode) | configured `LoginModule` chain via JAAS | `AccessManager` returned by the security configuration *(inferred — §14 Q10)* | +| B2 | HTTP client → jackrabbit-webdav (network mode) | HTTP Basic / Digest at the servlet layer | per-JCR-session, post-translation | +| B3 | RMI client → jackrabbit-jcr-rmi (network mode) | configured server-side login | per-JCR-session *(inferred — §14 Q3)* | +| B4 | JCR session principal → tree read | `Subject` established at B1/B2/B3 | jackrabbit-core's `AccessManager` | +| B5 | JCR session principal → tree write | same | `AccessManager` evaluated on `Session.save()` | +| B6 | Jackrabbit → persistence manager (filesystem / JDBC) | backend-configured | backend ACLs | +| B7 | jackrabbit-webdav body parse | none (request body bytes) | n/a; the XML parser must be configured safely (XXE-class) *(inferred — §14 Q5)* | + +### Reachability preconditions per family + +A finding is in-model only if it meets the family's reachability test: + +- **jackrabbit-core**: reachable from a JCR session at B1 / B2 / B3 + with the principal carrying *less than* admin authority. +- **jackrabbit-webdav**: reachable from an HTTP request body or + header. XML-parse vulnerabilities (XXE, XML entity expansion, + DTDs) are in-model here; the WebDAV bodies are the highest- + blast-radius input on the network surface *(inferred — §14 Q5)*. +- **jackrabbit-jcr-server**: in-model for the request-routing and + authentication glue. +- **jackrabbit-jcr-rmi**: in-model for the deserialisation of RMI + arguments. **Java RMI deserialisation** has its own well-known + attack class; in-model only when the RMI server is exposed + *(inferred — §14 Q11)*. +- **jackrabbit-spi**: in-model for the SPI bridge's own logic; the + underlying SPI implementation is per-deployment trusted. +- **jackrabbit-aws-ext** (S3 data store): in-model for in-Jackrabbit + code paths; the S3 backend itself is trusted. +- **examples / TCK**: out (§3 item 4). + +## §5 Assumptions about the environment + +- **Java 11+** at HEAD; Maven 3 build *(documented: `README.txt`)*. + JVM-conformant runtime; no SecurityManager required. +- **Servlet container** (Tomcat / Jetty) when running in network + mode. The container handles connection management, TLS, and + often HTTP Basic / Digest realms. +- **Persistence**. jackrabbit-core uses one of several PMs (bundle + PM, ObjectPersistenceManager, database PMs); each writes to a + filesystem directory or a JDBC database the operator configures + *(inferred — §14 Q6)*. +- **Data store**. jackrabbit-core can use the FileDataStore (local + files) or extensions (jackrabbit-aws-ext for S3); operator- + configured trusted *(inferred — §14 Q6)*. +- **Search**. Lucene-based search index on the filesystem under the + repository home. +- **Time** — `System.currentTimeMillis` for lock timeouts and + observation event timestamps; clock skew internal-only. +- **What Jackrabbit does NOT do to its host** *(predominantly + negative — §14 Q12)*: + - opens listening sockets *only* through jackrabbit-jcr-server / + jackrabbit-jcr-rmi when those are deployed (in pure-library mode, + none); + - installs **no** process-wide signal handlers; + - spawns **no** child processes from the core; + - reads system properties (`jackrabbit.*`, etc.) but not + arbitrary `LD_*` for security-relevant decisions; + - writes log entries through `slf4j`. + +## §5a Build-time and configuration variants + +| Knob / configuration | Default | Maintainer stance | Effect | +| --- | --- | --- | --- | +| `repository.xml` `Security` element — `LoginModule`, `AccessManager`, `WorkspaceAccessManager` | jackrabbit defaults (e.g. `SimpleSecurityManager` + `DefaultLoginModule` + `AccessManagerImpl`) *(inferred — §14 Q10)* | required for any meaningful security; misconfiguration voids §8 P1–P3 | what auth + authz Jackrabbit applies | +| Default `admin`/`admin` user | exists, full repository access *(inferred — §14 Q4)* | operator must rotate before production | `BY-DESIGN`; see §3 item 3 | +| jackrabbit-webdav exposure | not exposed unless the operator deploys it | deploying it brings network attack surface in-scope (B2/B7) | network mode trades library posture for service posture | +| jackrabbit-jcr-rmi exposure | not exposed unless deployed | RMI deserialisation considerations *(inferred — §14 Q11)* | strongly discouraged on untrusted networks | +| XML parser configuration in jackrabbit-webdav | depends on JAXP defaults at the JVM level | **maintainer ruling required**: does jackrabbit-webdav harden its `DocumentBuilderFactory` against XXE / DTD / external-entity expansion, or does it rely on JVM defaults? *(inferred — §14 Q5)* | XXE-class behaviour | +| HTTP Basic vs Digest in jackrabbit-jcr-server | configurable | Digest preferred; Basic-without-TLS is a §11 misuse | which auth mechanism is on the WebDAV port | +| FileDataStore directory permissions | operator-controlled | operator responsibility | binary content readability | +| Persistence manager (bundle / object / database) | bundle PM is the common default *(inferred — §14 Q6)* | operator choice; all are trusted as backends | the choice changes nothing in the security envelope | +| `jackrabbit-aws-ext` S3 data store | optional | when enabled, S3 backend trust applies (§3 item 2) | cloud blob storage | +| Anonymous read (some `JCRRepositoryFactory` configs allow guest login) | configurable | maintainer ruling: is anonymous read a supported posture or a dev-time default? *(inferred — §14 Q13)* | whether `Repository.login(null, ws)` succeeds | + +**The insecure-default case.** The single most load-bearing knob is the +default `admin`/`admin` user. The model assumes the operator's posture +is "rotate or remove before production" — i.e. failing to rotate is +`OUT-OF-MODEL: non-default-build`. PMC must ratify this in §14 Q4. + +## §6 Assumptions about inputs + +### Per-entry-point trust table (in-process API + network) + +| Entry point | Parameter | Attacker-controllable in the model? | Caller must enforce | +| --- | --- | --- | --- | +| `Repository.login(Credentials)` | `Credentials` | **yes** (untrusted) | configured `LoginModule` does the work | +| `Session.getNode/Property(path)` | path | **yes** via the authenticated user, filtered through `AccessManager` | nothing | +| `Session.save()` | accumulated transient changes | **yes** via the authenticated user | nothing | +| `QueryManager.createQuery(stmt, lang)` | SQL2 / XPath / SQL1 | **yes** | Jackrabbit parses + plans + filters | +| `AccessControlManager.setPolicy` | policy bytes | only by callers with the right privileges | Jackrabbit gates | +| WebDAV `PROPFIND` request body | XML | **yes** (HTTP-network input) | per §5a, the XML parser must be hardened (XXE) *(inferred — §14 Q5)* | +| WebDAV `LOCK`, `REPORT` request bodies | XML | **yes** | same | +| WebDAV `PUT` body | bytes | **yes** | binary into a JCR property/binary value | +| WebDAV `MOVE`, `COPY` Destination header | URL | **yes** | parsed; URL-decoded path may not contain `..` after decode | +| WebDAV `If` header | conditional state | **yes** | parsed | +| HTTP Basic / Digest credentials | bytes | **yes** | configured by `jackrabbit-jcr-server` | +| RMI invocation arguments | serialised Java objects | **yes** | Java RMI deserialisation considerations *(inferred — §14 Q11)* | +| Persistence-manager bytes | DB rows / filesystem bytes | **no** — backend is trusted | none | + +### Size / shape / rate + +- WebDAV / JCR-server accept arbitrary-length request bodies subject to + the servlet container's limits *(inferred — §14 Q14)*. +- Jackrabbit core imposes no enforced cap on tree depth, child + count, or query complexity *(inferred — §14 Q14)*. +- Lucene full-text query parsing is unbounded by default; a + pathological query can burn CPU *(inferred — §14 Q14)*. **No DoS + protection by default.** + +## §7 Adversary model + +### Actors + +| Actor | In scope? | Capabilities granted | +| --- | --- | --- | +| Authenticated end-user session (limited privileges) | **yes** | read/write the tree under JCR privileges; submit SQL2/XPath queries | +| Authenticated end-user session (broad privileges, non-admin) | partial | only privilege-envelope escapes are in scope | +| Unauthenticated HTTP / WebDAV peer reaching the network port | **yes** (when deployed) | TCP connect; HTTP requests; XML body parse; HTTP Basic/Digest auth attempts | +| Authenticated WebDAV client (HTTP Basic/Digest) | **yes** | same as authenticated JCR session via WebDAV translation | +| Authenticated RMI client | **yes** (when deployed) | RMI deserialisation surface | +| Cross-session adversary (one JCR session influencing another) | **yes** | through `AccessManager` cache or commit-hook side effects | +| Hostile persistence-manager backend (DB, FS) | **out of scope** — §3 item 2 | +| Hostile servlet container / operator | **out of scope** — §3 item 1 | +| Hostile XXE-supplying WebDAV body | **yes** (when WebDAV exposed) — *the* main XML-parse adversary | +| Same-JVM attacker code | **partial** — host's container is the boundary *(inferred — §14 Q15)* | +| Side-channel observer | **out of scope** *(§14 Q16)* | +| Quantum adversary | **out of scope** | + +The model does **not** include "authenticated-but-Byzantine peer" +(there is no consensus / replication in jackrabbit-core). + +## §8 Security properties the project provides + +### P1 — Authentication of JCR sessions through the configured `LoginModule` chain (embedded mode) + +- **Condition.** `repository.xml` `Security` element defines a + `LoginModule`; `Repository.login` invokes the configured JAAS chain. +- **Violation symptom.** A `Repository.login` call returns a `Session` + for credentials the configured chain should have rejected. +- **Severity.** Security-critical (`VALID`). +- *(inferred — §14 Q10)* + +### P2 — Authorisation of reads through `AccessManager` + +- **Condition.** Non-admin principal session; default `AccessManager` + configured. +- **Violation symptom.** `Session.getNode(path)` returns an item the + configured ACLs do not license. +- **Severity.** Security-critical (`VALID`). +- *(inferred — §14 Q10)* + +### P3 — Authorisation of writes through `AccessManager` on commit + +- **Condition.** Non-admin principal session; default `AccessManager`. +- **Violation symptom.** A `Session.save()` commits a change the + ACLs do not license. +- **Severity.** Security-critical (`VALID`). +- *(inferred — §14 Q10)* + +### P4 — HTTP Basic / Digest authentication at the WebDAV servlet boundary (network mode) + +- **Condition.** `jackrabbit-jcr-server` deployed; HTTP Basic or + Digest realm configured; the servlet container honours the realm. +- **Violation symptom.** A WebDAV request without valid credentials + reaches B2 trust transitions. +- **Severity.** Security-critical (`VALID`). +- *(inferred — §14 Q3)* + +### P5 — TLS confidentiality / integrity at the network surface (when configured) + +- **Condition.** Servlet container (Tomcat/Jetty) configured for + HTTPS; jackrabbit-webdav does not strip TLS. +- **Violation symptom.** Cleartext on the wire after TLS is + configured. +- **Severity.** Security-critical (`VALID`). +- *(inferred — §14 Q17)* + +### P6 — XML safety of jackrabbit-webdav body parses + +- **Condition.** `DocumentBuilderFactory` configured to disable + external entities, disallow DOCTYPEs (or restrict them safely), and + cap entity expansion. +- **Violation symptom.** A WebDAV body triggers XXE (file read, + SSRF), Billion-Laughs, or DTD-based remote-fetch. +- **Severity.** Security-critical (`VALID`) when reachable from an + unauthenticated or low-privilege HTTP peer. +- *(inferred — §14 Q5; this is the single highest-confidence-required + property for the network-exposed deployment)* + +### P7 — `Session` per-thread isolation and MVCC-like read consistency + +- **Condition.** Default jackrabbit-core MVCC layer; one `Session` per + thread. +- **Violation symptom.** Cross-session data leakage; a session reading + data committed after its login without an intentional refresh. +- **Severity.** Correctness by default; security-critical iff + cross-session leakage crosses an ACL boundary. +- *(inferred — §14 Q18)* + +### P8 — RMI deserialisation safety (when jackrabbit-jcr-rmi deployed) + +- **Condition.** jackrabbit-jcr-rmi has an + `ObjectInputFilter` / serialFilter that constrains the + deserialisation class list. +- **Violation symptom.** RMI deserialisation of attacker-supplied + bytes reaches a gadget chain. +- **Severity.** Security-critical (`VALID`) — RMI deserialisation is + a well-known attack class. +- *(inferred — §14 Q11)* + +### P9 — Memory safety of safe-Java core + +- **Condition.** JVM semantics; no `Unsafe` use in the core security + paths. +- **Violation symptom.** OOB / UAF / data race observable. +- **Severity.** Security-critical when reachable from §6 input. +- *(inferred — §14 Q19)* + +## §9 Security properties the project does NOT provide + +### 9.1 No defence against the host application / operator + +`SimpleCredentials("admin","admin")` always works against default +config. If the host hands those out, the host has lost. *(inferred — +§14 Q4)* + +### 9.2 No defence against a malicious persistence-manager backend + +JDBC / FileDataStore / FS / S3 are all trusted. *(inferred — +§14 Q6)* + +### 9.3 No defence against a malicious servlet-container operator + +Tomcat / Jetty operator owns the realm, the TLS posture, and the +deployment descriptor. *(inferred — §14 Q1)* + +### 9.4 No DoS protection against authenticated callers + +No enforced cap on query complexity, tree depth, child count, +transient state per session, or WebDAV body size. *(inferred — +§14 Q14)* + +### 9.5 No protection against RMI deserialisation by default + +`jackrabbit-jcr-rmi` (when deployed) inherits the JVM's +`ObjectInputStream` posture. Operators must constrain via JVM-level +`serialFilter` *(inferred — §14 Q11)*. + +### 9.6 No XXE / DTD / external-entity protection in WebDAV bodies (subject to confirmation) + +§8 P6 is the inverse — this is the disclaimer if §14 Q5 reveals +that jackrabbit-webdav does *not* harden its parser. + +### 9.7 No data-at-rest encryption at the Jackrabbit layer + +Delegated to PM / data-store backend. + +### 9.8 No constant-time comparison of authentication secrets + +Beyond what `LoginModule` / JCA helpers provide. *(inferred — +§14 Q20)* + +### 9.9 No defender stance against `loginAdministrative`-equivalent host paths + +If jackrabbit's `SimpleSecurityManager` was configured to grant +admin to any subject, that's the configuration speaking, not a bug. + +### False-friend properties (call out separately) + +- **Default `admin`/`admin` is *not* a deployed-by-default backdoor + — it is documented; the operator is expected to rotate.** Whether + failing to do so is `VALID` Jackrabbit or `OUT-OF-MODEL` + operator-config is §14 Q4. +- **HTTP Basic without TLS is *not* secure authentication.** + Credentials are base64 in cleartext. +- **HTTP Digest is *not* TLS substitute.** It protects the password + in transit, not the *content*. +- **WebDAV `LOCK` is an advisory locking primitive, not access + control.** A holder of `LOCK` does not become an authoriser. +- **`jackrabbit-jcr-rmi` is a transport, not a security layer.** + The remote bytes are deserialised; an `ObjectInputFilter` is + essential. + +### Well-known attack classes the project does not defend against + +- **XXE / Billion-Laughs / DTD-fetch via WebDAV bodies** — *(inferred + — §14 Q5)*. +- **RMI Java deserialisation gadgets** — *(inferred — §14 Q11)*. +- **Authenticated-DoS** (pathological queries / tree shapes) — + §9.4. +- **HTTP Basic over plaintext** when `jackrabbit-jcr-server` is + exposed without TLS — `OUT-OF-MODEL: non-default-build` or + operator misconfiguration. +- **TOCTOU between ACL evaluation and tree write** — *(inferred — + §14 Q18)*. + +## §10 Downstream responsibilities + +The host application (and, in network mode, the operator) MUST: + +1. **Rotate or remove the default `admin`/`admin` user** before + exposing the repository to any non-trusted caller *(inferred — + §14 Q4)*. +2. **Configure a `LoginModule` and an `AccessManager`** that match + the production trust posture. The shipped defaults are intended + for demos. +3. **Wrap `jackrabbit-jcr-server` / jackrabbit-webdav with TLS** + (servlet container HTTPS). HTTP Basic over plaintext is not + acceptable production posture *(inferred — §14 Q17)*. +4. **Constrain RMI deserialisation** when `jackrabbit-jcr-rmi` is + exposed — JVM-level `ObjectInputFilter` / `jdk.serialFilter` + appropriate to the running JVM *(inferred — §14 Q11)*. +5. **Harden the XML parser configuration** if `jackrabbit-webdav` is + exposed (XXE, DTD, external-entity, billion-laughs) + *(inferred — §14 Q5)*. +6. **Apply admission control / rate limits** at the servlet + container / reverse-proxy layer; Jackrabbit does not. +7. **Restrict OS filesystem permissions** on `repository.home`, + persistence-manager directories, data-store directories, search + index, and any keystores. +8. **Track CVE advisories on this repo.** Maintenance-mode posture + means the security mailing list is the right channel for + reports; binary patches are not produced per Apache convention. +9. **Plan migration to Oak** if the deployment is greenfield or if + bug-fixes diverge — Oak is the active codebase *(inferred — + §14 Q2)*. + +## §11 Known misuse patterns + +- **Failing to rotate default `admin`/`admin`** before production. +- **Deploying jackrabbit-jcr-server / jackrabbit-webdav without + TLS.** HTTP Basic over plaintext is the default if the operator + does not flip a switch. +- **Deploying jackrabbit-jcr-rmi to a public network without a + `serialFilter`.** +- **Exposing the WebDAV port directly without an authentication + realm.** WebDAV has no built-in auth; the servlet container does. +- **Treating Jackrabbit as the active codebase and not Oak.** For + greenfield deployments, Oak is the active product. +- **Using the SQL1 query language without auditing what callers can + submit.** SQL1 is more permissive than SQL2 / XPath. +- **WebDAV `PROPFIND` `Depth: infinity` against the root** — a + documented amplification vector for any WebDAV-fronted store + *(inferred — §14 Q14)*. +- **WebDAV `MOVE` / `COPY` with a `Destination` header pointing + outside the configured workspace.** ACL-bounded; the configured + ACL is the gate. + +## §11a Known non-findings (recurring false positives) + +- **"Default `admin`/`admin` user exists in the shipped + configuration."** Documented; operator must rotate per §10. → + `OUT-OF-MODEL: non-default-build` (subject to §14 Q4). +- **"HTTP Basic credentials sent in cleartext when + `jackrabbit-jcr-server` is exposed over HTTP."** Operator must + enable TLS *(inferred — §14 Q17)*. → `OUT-OF-MODEL: + non-default-build`. +- **"`jackrabbit-jcr-rmi` deserialises arbitrary classes."** Operator + must configure `jdk.serialFilter` *(inferred — §14 Q11)*. → + `OUT-OF-MODEL: non-default-build`. +- **"DoS via pathological SQL2 / XPath query."** No engine-level + cap *(inferred — §14 Q14)*. → `BY-DESIGN: property-disclaimed`. +- **"Hardcoded test password / keystore in + `examples/jackrabbit-firsthops/`, `jackrabbit-jcr-tests/`."** + Unsupported components. → `OUT-OF-MODEL: unsupported-component`. +- **"Tomcat / Jetty configuration weakness."** Container is the + operator's. → `OUT-OF-MODEL: adversary-not-in-scope`. +- **"Vulnerability X exists only in jackrabbit-oak."** Oak's + threat model and triage queue. → `OUT-OF-MODEL: + unsupported-component` (cross-reference Oak model). +- **"Vulnerability X exists only in jackrabbit-filevault."** + Filevault's threat model. → `OUT-OF-MODEL: + unsupported-component` (cross-reference filevault model). +- **"`PROPFIND Depth: infinity` is amplification."** WebDAV + protocol semantics; ACL-bounded. +- **"Authenticated user with `MODIFY_ACCESS_CONTROL` rewrote ACL to + grant self more privileges."** Documented privilege behaviour. → + `BY-DESIGN: property-disclaimed`. + +## §12 Conditions that would change this model + +- A new network listener in jackrabbit (currently only via + jackrabbit-jcr-server / jackrabbit-webdav / jackrabbit-jcr-rmi + when deployed). +- A change in the shipped default `LoginModule` / `AccessManager`. +- A change in the shipped default `admin`/`admin` posture + (e.g. randomised on first start). +- A change in jackrabbit-webdav's XML parser default hardening. +- Promotion of jackrabbit-jcr-rmi to a recommended deployment + shape (currently strongly discouraged on untrusted networks). +- A change in the project's maintenance posture (return to active + feature development). +- A vulnerability report that cannot be cleanly routed to one of the + §13 dispositions — that is evidence the model is incomplete. + +## §13 Triage dispositions + +A report against Jackrabbit receives exactly one of: + +| Disposition | Meaning | Licensed by | +| --- | --- | --- | +| `VALID` | Violates a §8 property via an in-scope §7 adversary using an in-scope §6 input. | §8, §6, §7 | +| `VALID-HARDENING` | No §8 violation, but a §11 misuse pattern can be made harder. Typically no CVE. | §11 | +| `OUT-OF-MODEL: trusted-input` | Requires attacker control of a §6 parameter the model marks trusted. | §6 | +| `OUT-OF-MODEL: adversary-not-in-scope` | Requires a §7 actor the model excludes. | §7 | +| `OUT-OF-MODEL: unsupported-component` | Lands in `jackrabbit-jcr-tests/`, `examples/`, or in Oak / filevault. | §3 | +| `OUT-OF-MODEL: non-default-build` | Manifests only under a discouraged or non-default §5a value (un-rotated `admin`, HTTP Basic without TLS, RMI without `serialFilter`). | §5a | +| `BY-DESIGN: property-disclaimed` | Concerns a §9 property the project explicitly does not provide. | §9 | +| `KNOWN-NON-FINDING` | Matches a §11a recurring false positive. | §11a | +| `MODEL-GAP` | Cannot be cleanly routed to any of the above — triggers §12 model revision. | §12 | + +## §14 Open questions for the maintainers + +### Wave 1 — scope, posture, defaults + +**Q1.** Confirm or correct the CVE inventory and the project's +disclosure history page at +`https://jackrabbit.apache.org/jcr/jackrabbit-security-reports.html`. +Specifically: what CVEs have been issued against jackrabbit-core / +jackrabbit-webdav / jackrabbit-jcr-rmi in the last 5 years, and +which patterns recur in inbound reports that you close as not-a-bug? +*(maps to §1 reporting, §11a)* + +**Q2.** Maintenance posture. Proposed: "active for bug + security +fixes; not active for feature development; Oak is the recommended +codebase for new deployments". Confirm or correct. *(maps to +§3 item 9, §10 item 9)* + +**Q3.** Is jackrabbit-jcr-rmi still a supported deployment shape? +Proposed: yes but strongly discouraged on untrusted networks +because of Java deserialisation considerations. Should §13 add a +"deployed-on-untrusted-network" axis for `jackrabbit-jcr-rmi` +specifically? *(maps to §2, §3, §5a)* + +**Q4.** The default `admin`/`admin` user. Proposed disposition for +"deployment X has not rotated the default `admin`": +`OUT-OF-MODEL: non-default-build`. Confirm — or has the project +moved to randomised first-start? *(maps to §5a, §10 item 1, +§11a)* + +**Q5.** **The XXE question.** Does `jackrabbit-webdav` ship +hardened XML parser configuration (disable external entities, +disallow DOCTYPE, cap entity expansion) for `PROPFIND`, `LOCK`, +`REPORT` body parsing? This is the highest-leverage single question +for the network-exposed deployment. If not, §8 P6 collapses into +§9.6 and §10 item 5 becomes a hard production requirement. +*(maps to §4 B7, §6 WebDAV rows, §8 P6, §9.6)* + +### Wave 2 — backends, environment + +**Q6.** Are persistence-manager backends (FileDataStore, bundle PM, +database PMs, S3 via jackrabbit-aws-ext) all modelled as trusted +backends — i.e. Jackrabbit does not defend against a malicious +backend? Proposed: yes. *(maps to §3 item 2, §9.2)* + +**Q7.** Module inventory: confirm or correct the list of supported +modules vs unsupported / sample / TCK / extension modules. In +particular: is `jackrabbit-standalone` / `jackrabbit-standalone-components` +still part of the repo (the README didn't reach it); is +`jackrabbit-aws-ext` an in-tree module or a separate artefact? *(maps +to §2 component family)* + +**Q8.** Servlet-container responsibility: confirmed that Tomcat / +Jetty configuration (TLS, HTTP Basic / Digest realm, request body +size caps, request timeouts) is out-of-model and the operator's +responsibility? *(maps to §3 item 1)* + +**Q9.** Java EE container vulnerabilities: confirmed out-of-model? +*(maps to §3 item 8)* + +### Wave 3 — `AccessManager`, login + +**Q10.** What is the *default* `LoginModule` / `AccessManager` in +the shipped `repository.xml` of jackrabbit-core? The §8 P1–P3 +properties hinge on this configuration; this draft uses generic +"configured `LoginModule` / `AccessManager`" placeholders. Please +state the concrete default class names and the JAAS app-name they +register under. *(maps to §5a, §8 P1–P3)* + +**Q11.** `jackrabbit-jcr-rmi` deserialisation. Does the module +ship its own `ObjectInputFilter` to constrain the deserialisation +class allowlist? If not, is "operator must configure +`jdk.serialFilter`" the documented production posture, and how is +that surfaced in the deployment docs? *(maps to §4 B3, §6 RMI +row, §8 P8, §9.5, §10 item 4, §11a)* + +### Wave 4 — environment, MVCC, memory safety + +**Q12.** "What Jackrabbit does NOT do to its host" inventory: no +process-wide signal handlers, no child process spawn (outside +network-mode servlet container), no arbitrary `LD_*` consumption, +no on-disk persistence outside `repository.home`. Confirm any +inaccuracies. *(maps to §5)* + +**Q13.** Anonymous read posture. Is `Repository.login(null, ws)` +(guest login without credentials) supported in any default +configuration, or is it always disabled by default? *(maps to +§5a, §6, §7 unauthenticated row)* + +**Q14.** WebDAV / JCR / Lucene resource bounds. Confirmed that +Jackrabbit imposes **no** enforced cap on: +- WebDAV request body size beyond servlet container limits; +- JCR query complexity (Lucene-based); +- tree depth / child count; +- transient session state; +- `PROPFIND Depth: infinity` cost? + +If correct, all of these belong in §9.4 / §11a as `BY-DESIGN: +property-disclaimed`. *(maps to §6, §9.4)* + +**Q15.** Same-JVM attacker code (co-installed servlet, OSGi bundle, +servlet container's other webapps): confirmed out-of-model? The +host container is the security boundary. *(maps to §7, §9)* + +**Q16.** Side-channel adversaries: confirmed out-of-model? *(maps +to §3 item 10, §7, §9)* + +**Q17.** TLS: confirmed that TLS is **always** the servlet +container's job in network mode, never Jackrabbit's? *(maps to +§8 P5)* + +**Q18.** MVCC visibility: how does jackrabbit-core handle +cross-session refresh? Proposed: session reads the revision +captured at login, refreshable via `Session.refresh`. Confirm. +*(maps to §8 P7)* + +**Q19.** Memory safety of safe-Java: confirmed that the core +security paths use no `Unsafe` / JNI? *(maps to §8 P9)* + +**Q20.** Constant-time comparison of authentication secrets: +confirmed all delegated to JAAS / `LoginModule` / JCA, with no +Jackrabbit-internal `equals` on secrets? *(maps to §9.8)* + +### Wave 5 — meta + +**Q21.** Should this document live as `docs/threat-model.md` or +under `jackrabbit-jcr-commons/src/site/markdown/`? *(meta)* + +**Q22.** Is there an existing Jackrabbit threat-model document +(Confluence, JIRA, mailing-list summary, prior PMC discussion) that +this should reconcile with rather than supersede? *(meta — §3.1a)* + +**Q23.** §11a known-non-findings is currently 10 entries, mostly +operator-misconfiguration-shaped. Could the PMC contribute 3–5 +patterns the Jackrabbit triage queue sees recur in inbound reports +that you close as not-a-bug? Patterns like "WebDAV exposed without +TLS — operator misconfig, not Jackrabbit", "RMI deserialisation +gadget — JVM serialFilter is the fix", "DoS via huge PROPFIND +Depth-infinity — WebDAV semantics" would harden §11a substantially. +*(meta — §11a)* + +**Q24.** Should this Jackrabbit model cross-reference the (still-to- +be-drafted) `jackrabbit-oak` and `jackrabbit-filevault` models for +items §3 items 5–6? *(meta)* + +--- + +## Appendix: Existing security artefact → §x back-map + +Jackrabbit does not currently ship an in-repo `SECURITY.md`. The +de-facto security-policy artefacts are: + +- the website page + `https://jackrabbit.apache.org/jcr/jackrabbit-security-reports.html` + (CVE history; not fully readable at draft time — §14 Q1); +- the `README.txt` at the top level (project description, + Java / Maven requirements); +- the `.asf.yaml` (which routes notifications to + `jackrabbit-dev@…`). + +The back-map is sparse because the existing artefacts are mostly +process-only: + +| Source | Claim | Lands in | +| --- | --- | --- | +| `README.txt` | "fully conforming implementation of JCR (JSR 170 and 283)" | §2 intended use | +| `README.txt` | Java 11+, Maven 3 build | §5 | +| website security-reports page | CVE history (to be enumerated — §14 Q1) | §1 reporting cross-ref, §11a | +| `.asf.yaml` | notifications routed to `jackrabbit-dev@…` | §1 | From 07dc7d1fd04c5d69b3062ae03ac12fb62ca0d234 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 2 Jun 2026 08:19:54 +0200 Subject: [PATCH 154/171] JCR-5242: Update Jackrabbit Trunk to Oak 2.2.0 (#353) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index a5fe594aeb9..3187c2dd8d3 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 1.92.0 + 2.2.0 1.22.22 9.4.58.v20250814 From c78dcd2a9c6b1bc713109c16c43faa368865b880 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 4 Jun 2026 06:04:01 +0200 Subject: [PATCH 155/171] JCR-5243; Update oak-jackrabbit-api.version.used to Oak 1.22.24 (#354) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 3187c2dd8d3..f764b0d6c20 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -57,7 +57,7 @@ 2.2.0 - 1.22.22 + 1.22.24 9.4.58.v20250814 2.4.1 ${project.build.sourceEncoding} From 8d63452146a7b41a7d2271d4ff7f5f5e4278f166 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Tue, 9 Jun 2026 09:59:17 +0200 Subject: [PATCH 156/171] JCR-5246: webapp: update tomcat dependency to 9.0.118 (#355) --- jackrabbit-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index dad1d1893ea..7f91dac7cb6 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -35,7 +35,7 @@ Web application that hosts and serves a Jackrabbit content repository - 9.0.116 + 9.0.118 From 4ee36ddd1cccbc5ba780f1792c5f8f9498ec762a Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Fri, 12 Jun 2026 14:23:23 +0200 Subject: [PATCH 157/171] JCR-5244: improve test coverage for HttpMultipartPost (#356) --- jackrabbit-jcr-server/pom.xml | 6 + .../server/util/HttpMultipartPost.java | 17 +- .../server/util/RequestDataTest.java | 279 ++++++++++++++++++ 3 files changed, 290 insertions(+), 12 deletions(-) create mode 100755 jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/util/RequestDataTest.java diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 29f9dc5403b..22afd85ed6b 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -34,6 +34,12 @@ WebDAV server implementations for JCR bundle + + false + 0.10 + 0.09 + + diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java index 26b1cb7c54e..ac9c44b2930 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java @@ -45,6 +45,8 @@ class HttpMultipartPost { private final Map> nameToItems = new LinkedHashMap>(); private final Set fileParamNames = new HashSet(); + private final int PARTHEADERSIZEMAX = Integer.getInteger("jackrabbit-server-PartHeaderSizeMax", -1); + private boolean initialized; HttpMultipartPost(HttpServletRequest request, File tmpDir) throws IOException { @@ -65,6 +67,9 @@ private void extractMultipart(HttpServletRequest request, File tmpDir) } ServletFileUpload upload = new ServletFileUpload(getFileItemFactory(tmpDir)); + if (PARTHEADERSIZEMAX > 0) { + upload.setPartHeaderSizeMax(PARTHEADERSIZEMAX); + } // make sure the content disposition headers are read with the charset // specified in the request content type (or UTF-8 if no charset is specified). // see JCR @@ -246,18 +251,6 @@ String[] getParameterValues(String name) { } } - /** - * Returns a set of the file parameter names. An empty set if - * no file parameters were present in the request. - * - * @return an set of file item names representing the file - * parameters available with the request. - */ - Set getFileParameterNames() { - checkInitialized(); - return fileParamNames; - } - /** * Returns an array of input streams for uploaded file parameters. * diff --git a/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/util/RequestDataTest.java b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/util/RequestDataTest.java new file mode 100755 index 00000000000..bb86153d1f2 --- /dev/null +++ b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/util/RequestDataTest.java @@ -0,0 +1,279 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jackrabbit.server.util; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.commons.collections4.IteratorUtils; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.junit.MockitoJUnitRunner; + +import java.io.File; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.*; + + +import javax.servlet.ServletInputStream; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.List; +import java.util.Set; + +@RunWith(MockitoJUnitRunner.class) +public class RequestDataTest { + + @Rule + public TemporaryFolder tempFolder = new TemporaryFolder(); + + @Mock + private HttpServletRequest mockRequest; + + /** + * Helper to wrap raw multipart text bytes cleanly into a mock ServletInputStream. + */ + private ServletInputStream createServletInputStream(final byte[] payload) { + final ByteArrayInputStream bais = new ByteArrayInputStream(payload); + return new ServletInputStream() { + @Override + public int read() { + return bais.read(); + } + + @Override + public boolean isFinished() { + return bais.available() == 0; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(javax.servlet.ReadListener readListener) { + throw new UnsupportedOperationException("Non-blocking I/O not implemented in mock"); + } + }; + } + + /** + * Verifies standard parsing works smoothly using the clean temp directory assignment. + */ + @Test + public void getParameterWithStandardRequest() throws Exception { + File testTmpDir = tempFolder.newFolder("jackrabbit_standard_tmp"); + + // ONLY stub what is actually called by RequestData for a standard request + // when(mockRequest.getParameter("param1")).thenReturn("value1"); + when(mockRequest.getParameterValues("param1")).thenReturn(new String[]{"value1"}); + + RequestData requestData = new RequestData(mockRequest, testTmpDir); + + try { + String[] values = requestData.getParameterValues("param1"); + assertNotNull("Parameter array should not be null", values); + assertEquals("Value mismatch", "value1", values[0]); + } finally { + requestData.dispose(); + } + } + + /** + * Test multipart POST requests consisting of multiple body parameters. + */ + @Test + public void testMultipartPostWithMultipleParts() throws Exception { + File testTmpDir = tempFolder.newFolder("jackrabbit_multi_parts"); + + String boundary = "----MockBoundary123"; + String body = "--" + boundary + "\r\n" + + "Content-Disposition: form-data; name=\"textField\"\r\n\r\n" + + "textValue\r\n" + + "--" + boundary + "\r\n" + + "Content-Disposition: form-data; name=\"fileField\"; filename=\"test.txt\"\r\n" + + "Content-Type: text/plain\r\n\r\n" + + "Hello World Item Data\r\n" + + "--" + boundary + "--\r\n"; + byte[] payloadBytes = body.getBytes(StandardCharsets.UTF_8); + + // For multipart requests, these methods are genuinely called by Jackrabbit's parser + when(mockRequest.getMethod()).thenReturn("POST"); + when(mockRequest.getContentType()).thenReturn("multipart/form-data; boundary=" + boundary); + lenient().when(mockRequest.getCharacterEncoding()).thenReturn("UTF-8"); + when(mockRequest.getInputStream()).thenReturn(createServletInputStream(payloadBytes)); + + RequestData requestData = new RequestData(mockRequest, testTmpDir); + try { + assertEquals("textValue", requestData.getParameter("textField")); + assertNotNull("Multipart file field must map", requestData.getParameter("fileField")); + assertEquals(Set.of("fileField", "textField"), IteratorUtils.toSet(requestData.getParameterNames())); + assertEquals(List.of("text/plain"), Arrays.asList(requestData.getParameterTypes("fileField"))); + assertNull(requestData.getParameterTypes("textField")[0]); + assertEquals(1, requestData.getParameterTypes("textField").length); + + InputStream[] streams = requestData.getFileParameters("fileField"); + assertEquals(1, streams.length); + assertEquals("Hello World Item Data", new String(streams[0].readAllBytes(), StandardCharsets.UTF_8)); + + assertNull("Multipart file field must map", requestData.getParameter("x")); + assertNull(requestData.getFileParameters("x")); + assertNull(requestData.getParameterTypes("x")); + assertNull(requestData.getParameterValues("x")); + } finally { + requestData.dispose(); + } + } + + /** + * Test data parsing performance against inflated MIME/Header padding sizes. + */ + // @Test + public void testMultipartPostWithLargeHeaders() throws Exception { + File testTmpDir = tempFolder.newFolder("jackrabbit_large_headers"); + String boundary = "----MockBoundaryLargeHeaders"; + + String body = "--" + boundary + "\r\n" + + "Content-Disposition: form-data; name=\"payloadField\"\r\n" + + "X-Long-Header: " + "X-Header-Padding-Data-String-".repeat(1000) + "\r\n\r\n" + + "ShortBodyContent\r\n" + + "--" + boundary + "--\r\n"; + byte[] payloadBytes = body.getBytes(StandardCharsets.UTF_8); + + when(mockRequest.getMethod()).thenReturn("POST"); + when(mockRequest.getContentType()).thenReturn("multipart/form-data; boundary=" + boundary); + lenient().when(mockRequest.getCharacterEncoding()).thenReturn("UTF-8"); + when(mockRequest.getInputStream()).thenReturn(createServletInputStream(payloadBytes)); + + RequestData requestData = new RequestData(mockRequest, testTmpDir); + try { + assertEquals("ShortBodyContent", requestData.getParameter("payloadField")); + } finally { + requestData.dispose(); + } + } + + private void buildRequestWithFilenameOfVaryingLength(int length) throws IOException { + String boundary = "----MockBoundaryLongFilename"; + + String longFilename = "0123456789".repeat(length / 10) + ".tmp"; + + String body = "--" + boundary + "\r\n" + + "Content-Disposition: form-data; name=\"fileUpload\"; filename=\"" + longFilename + "\"\r\n" + + "Content-Type: application/octet-stream\r\n\r\n" + + "FileContentStreamData\r\n" + + "--" + boundary + "--\r\n"; + byte[] payloadBytes = body.getBytes(StandardCharsets.UTF_8); + + when(mockRequest.getMethod()).thenReturn("POST"); + when(mockRequest.getContentType()).thenReturn("multipart/form-data; boundary=" + boundary); + lenient().when(mockRequest.getCharacterEncoding()).thenReturn("UTF-8"); + when(mockRequest.getInputStream()).thenReturn(createServletInputStream(payloadBytes)); + } + + // test default limits in commons-fileuploads + + @Test + public void testMultipartPostWithShorterFilename() throws Exception { + buildRequestWithFilenameOfVaryingLength(400); + File testTmpDir = tempFolder.newFolder("jackrabbit_long_filename"); + RequestData requestData = new RequestData(mockRequest, testTmpDir); + try { + assertTrue( + requestData.getParameter("fileUpload").length() > 350); + } finally { + requestData.dispose(); + } + } + + @Test(expected=IOException.class) + public void testMultipartPostWithExtremelyLongFilename() throws Exception { + buildRequestWithFilenameOfVaryingLength(1000); + File testTmpDir = tempFolder.newFolder("jackrabbit_long_filename"); + RequestData requestData = new RequestData(mockRequest, testTmpDir); + try { + assertTrue( + requestData.getParameter("fileUpload").length() > 950); + } finally { + requestData.dispose(); + } + } + + @Test + public void testMultipartPostWithExtremelyLongFilenameNButHigherConfig() throws Exception { + try { + System.setProperty("jackrabbit-server-PartHeaderSizeMax", "2048"); + buildRequestWithFilenameOfVaryingLength(1000); + File testTmpDir = tempFolder.newFolder("jackrabbit_long_filename"); + RequestData requestData = new RequestData(mockRequest, testTmpDir); + try { + assertTrue( + requestData.getParameter("fileUpload").length() > 950); + } finally { + requestData.dispose(); + } + } finally { + System.clearProperty("jackrabbit-server-PartHeaderSizeMax"); + } + } + + /** + * Assures special Unicode (Non-ASCII) symbols preserve structural state during text decoding. + */ + // @Test + public void testMultipartPostWithNonAsciiCharacters() throws Exception { + File testTmpDir = tempFolder.newFolder("jackrabbit_non_ascii"); + String boundary = "----MockBoundaryNonAscii"; + String nonAsciiValue = "テスト_ü_é_ñ_value"; + String nonAsciiFilename = "マニュアル_doc.pdf"; + + String body = "--" + boundary + "\r\n" + + "Content-Disposition: form-data; name=\"unicodeField\"\r\n\r\n" + + nonAsciiValue + "\r\n" + + "--" + boundary + "\r\n" + + "Content-Disposition: form-data; name=\"unicodeFile\"; filename=\"" + nonAsciiFilename + "\"\r\n" + + "Content-Type: application/pdf\r\n\r\n" + + "%PDF-Mock-Bytes\r\n" + + "--" + boundary + "--\r\n"; + + byte[] payloadBytes = body.getBytes(StandardCharsets.UTF_8); + + when(mockRequest.getMethod()).thenReturn("POST"); + when(mockRequest.getContentType()).thenReturn("multipart/form-data; boundary=" + boundary); + lenient().when(mockRequest.getCharacterEncoding()).thenReturn("UTF-8"); + when(mockRequest.getInputStream()).thenReturn(createServletInputStream(payloadBytes)); + + RequestData requestData = new RequestData(mockRequest, testTmpDir); + try { + String parsedValue = requestData.getParameter("unicodeField"); + assertEquals("Unicode decoding was corrupted inside the parsing sequence", nonAsciiValue, parsedValue); + assertNotNull("Non-ASCII file part metadata parsing must complete successfully", requestData.getParameter("unicodeFile")); + } finally { + requestData.dispose(); + } + } +} \ No newline at end of file From 0690b00d38a6f28596f36ff43b77bb9a3b92067e Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 15 Jun 2026 18:04:45 +0200 Subject: [PATCH 158/171] JCR-5247: update Apache parent pom to version 38 (#358) --- jackrabbit-parent/pom.xml | 23 +---------------------- 1 file changed, 1 insertion(+), 22 deletions(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index f764b0d6c20..d5ffb1afa56 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -27,7 +27,7 @@ org.apache apache - 37 + 38 @@ -365,18 +365,10 @@ ${test.opts} - - maven-jar-plugin - 3.4.2 - maven-rar-plugin 3.0.0 - - maven-war-plugin - 3.4.0 - maven-idea-plugin 2.2.1 @@ -422,25 +414,12 @@ cobertura-maven-plugin 2.7 - - maven-antrun-plugin - 3.1.0 - - - org.apache.maven.plugins - maven-javadoc-plugin - - - org.apache.maven.plugins - maven-checkstyle-plugin - 3.5.0 - org.apache.maven.plugins maven-pmd-plugin From 4e2a1101292000ceffb3c38a7678fcac7ae3fcc0 Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Date: Wed, 24 Jun 2026 15:29:35 +0530 Subject: [PATCH 159/171] JCR-5249 : added broken prefix to exception message --- .../spi/commons/namespace/SessionNamespaceResolver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java index 4d13fab49e4..fdd1e7c2147 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java @@ -59,7 +59,7 @@ public String getURI(String prefix) throws NamespaceException { return session.getNamespaceURI(prefix); } catch (RepositoryException e) { // should never get here... - throw new NamespaceException("internal error: failed to resolve namespace prefix", e); + throw new NamespaceException("internal error: failed to resolve namespace prefix: " + prefix, e); } } } From ae57b515821cfa6f16392c7e4fe238929e3abafa Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Date: Wed, 24 Jun 2026 19:34:32 +0530 Subject: [PATCH 160/171] Update jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java Co-authored-by: Julian Reschke --- .../spi/commons/namespace/SessionNamespaceResolver.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java index fdd1e7c2147..4c31a7d921f 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java @@ -59,7 +59,7 @@ public String getURI(String prefix) throws NamespaceException { return session.getNamespaceURI(prefix); } catch (RepositoryException e) { // should never get here... - throw new NamespaceException("internal error: failed to resolve namespace prefix: " + prefix, e); + throw new NamespaceException("internal error: failed to resolve namespace prefix: '" + prefix + "'", e); } } } From 54e3b6257b51215d07b17b49857f90ffbc3c5b32 Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Date: Wed, 24 Jun 2026 19:38:18 +0530 Subject: [PATCH 161/171] JCR-5249 : added broken prefix to other missing exception as well --- .../java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java b/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java index 2c1045f52dc..d6ef6859b39 100644 --- a/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java +++ b/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java @@ -110,7 +110,7 @@ public String getURI(String prefix) throws NamespaceException { } catch (RepositoryException e) { // should never get here... - throw new NamespaceException("internal error: failed to resolve namespace prefix", e); + throw new NamespaceException("internal error: failed to resolve namespace prefix: '" + prefix + "'", e); } } }; From b5b50b5a0c297e5337869dc7f393a2e98c0a8152 Mon Sep 17 00:00:00 2001 From: Rishabh Kumar Date: Wed, 24 Jun 2026 20:52:46 +0530 Subject: [PATCH 162/171] JCR-5249 : added broken uri to exception as well --- .../spi/commons/namespace/SessionNamespaceResolver.java | 2 +- .../java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java index 4c31a7d921f..528d033743d 100644 --- a/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java +++ b/jackrabbit-spi-commons/src/main/java/org/apache/jackrabbit/spi/commons/namespace/SessionNamespaceResolver.java @@ -47,7 +47,7 @@ public String getPrefix(String uri) throws NamespaceException { return session.getNamespacePrefix(uri); } catch (RepositoryException e) { // should never get here... - throw new NamespaceException("internal error: failed to resolve namespace uri", e); + throw new NamespaceException("internal error: failed to resolve namespace uri: '" + uri + "'", e); } } diff --git a/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java b/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java index d6ef6859b39..2c1045f52dc 100644 --- a/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java +++ b/jackrabbit-spi2jcr/src/main/java/org/apache/jackrabbit/spi2jcr/SessionInfoImpl.java @@ -110,7 +110,7 @@ public String getURI(String prefix) throws NamespaceException { } catch (RepositoryException e) { // should never get here... - throw new NamespaceException("internal error: failed to resolve namespace prefix: '" + prefix + "'", e); + throw new NamespaceException("internal error: failed to resolve namespace prefix", e); } } }; From 9f8ce3356c09e00bc4afe7d8db5a1ab993552d2c Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Thu, 25 Jun 2026 08:53:42 +0200 Subject: [PATCH 163/171] =?UTF-8?q?JCR-5233:=20commons-fileupload=20(1.6)?= =?UTF-8?q?=20restricts=20header=20size=20in=20upload=20pa=E2=80=A6=20(#35?= =?UTF-8?q?7)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../server/util/HttpMultipartPost.java | 5 ++ .../server/util/RequestDataTest.java | 60 +++++-------------- 2 files changed, 20 insertions(+), 45 deletions(-) diff --git a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java index ac9c44b2930..30ca4e831d0 100644 --- a/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java +++ b/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/util/HttpMultipartPost.java @@ -45,6 +45,8 @@ class HttpMultipartPost { private final Map> nameToItems = new LinkedHashMap>(); private final Set fileParamNames = new HashSet(); + // <= 0 (default -1) -> Jackrabbit applies 4096 (overrides cfup 1.6's current 512-byte default); + // positive -> exact value in bytes. Set to 512 to restore the library's own default. private final int PARTHEADERSIZEMAX = Integer.getInteger("jackrabbit-server-PartHeaderSizeMax", -1); private boolean initialized; @@ -69,6 +71,9 @@ private void extractMultipart(HttpServletRequest request, File tmpDir) ServletFileUpload upload = new ServletFileUpload(getFileItemFactory(tmpDir)); if (PARTHEADERSIZEMAX > 0) { upload.setPartHeaderSizeMax(PARTHEADERSIZEMAX); + } else { + // override the default limit of 512 in commons-fileupload 1.6 + upload.setPartHeaderSizeMax(4096); } // make sure the content disposition headers are read with the charset // specified in the request content type (or UTF-8 if no charset is specified). diff --git a/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/util/RequestDataTest.java b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/util/RequestDataTest.java index bb86153d1f2..36d59c55a3c 100755 --- a/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/util/RequestDataTest.java +++ b/jackrabbit-jcr-server/src/test/java/org/apache/jackrabbit/server/util/RequestDataTest.java @@ -34,7 +34,6 @@ import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.*; - import javax.servlet.ServletInputStream; import java.io.ByteArrayInputStream; import java.io.IOException; @@ -210,29 +209,36 @@ public void testMultipartPostWithShorterFilename() throws Exception { } } - @Test(expected=IOException.class) + @Test(expected = IOException.class) public void testMultipartPostWithExtremelyLongFilename() throws Exception { - buildRequestWithFilenameOfVaryingLength(1000); + // header bytes ~= filename length + ~107; at 5000 chars this far exceeds the 4096 default + buildRequestWithFilenameOfVaryingLength(5000); File testTmpDir = tempFolder.newFolder("jackrabbit_long_filename"); + new RequestData(mockRequest, testTmpDir); // must throw IOException + } + + @Test + public void testMultipartPostWithLongFilenameUnderNewDefault() throws Exception { + buildRequestWithFilenameOfVaryingLength(3800); // above 512, below 4096 + File testTmpDir = tempFolder.newFolder("jackrabbit_medium_filename"); RequestData requestData = new RequestData(mockRequest, testTmpDir); try { - assertTrue( - requestData.getParameter("fileUpload").length() > 950); + assertTrue(requestData.getParameter("fileUpload").length() > 3800); } finally { requestData.dispose(); } } @Test - public void testMultipartPostWithExtremelyLongFilenameNButHigherConfig() throws Exception { + public void testMultipartPostWithExtremelyLongFilenameWithHigherConfig() throws Exception { try { - System.setProperty("jackrabbit-server-PartHeaderSizeMax", "2048"); - buildRequestWithFilenameOfVaryingLength(1000); + System.setProperty("jackrabbit-server-PartHeaderSizeMax", "8192"); + buildRequestWithFilenameOfVaryingLength(7500); File testTmpDir = tempFolder.newFolder("jackrabbit_long_filename"); RequestData requestData = new RequestData(mockRequest, testTmpDir); try { assertTrue( - requestData.getParameter("fileUpload").length() > 950); + requestData.getParameter("fileUpload").length() > 7500); } finally { requestData.dispose(); } @@ -240,40 +246,4 @@ public void testMultipartPostWithExtremelyLongFilenameNButHigherConfig() throws System.clearProperty("jackrabbit-server-PartHeaderSizeMax"); } } - - /** - * Assures special Unicode (Non-ASCII) symbols preserve structural state during text decoding. - */ - // @Test - public void testMultipartPostWithNonAsciiCharacters() throws Exception { - File testTmpDir = tempFolder.newFolder("jackrabbit_non_ascii"); - String boundary = "----MockBoundaryNonAscii"; - String nonAsciiValue = "テスト_ü_é_ñ_value"; - String nonAsciiFilename = "マニュアル_doc.pdf"; - - String body = "--" + boundary + "\r\n" + - "Content-Disposition: form-data; name=\"unicodeField\"\r\n\r\n" + - nonAsciiValue + "\r\n" + - "--" + boundary + "\r\n" + - "Content-Disposition: form-data; name=\"unicodeFile\"; filename=\"" + nonAsciiFilename + "\"\r\n" + - "Content-Type: application/pdf\r\n\r\n" + - "%PDF-Mock-Bytes\r\n" + - "--" + boundary + "--\r\n"; - - byte[] payloadBytes = body.getBytes(StandardCharsets.UTF_8); - - when(mockRequest.getMethod()).thenReturn("POST"); - when(mockRequest.getContentType()).thenReturn("multipart/form-data; boundary=" + boundary); - lenient().when(mockRequest.getCharacterEncoding()).thenReturn("UTF-8"); - when(mockRequest.getInputStream()).thenReturn(createServletInputStream(payloadBytes)); - - RequestData requestData = new RequestData(mockRequest, testTmpDir); - try { - String parsedValue = requestData.getParameter("unicodeField"); - assertEquals("Unicode decoding was corrupted inside the parsing sequence", nonAsciiValue, parsedValue); - assertNotNull("Non-ASCII file part metadata parsing must complete successfully", requestData.getParameter("unicodeFile")); - } finally { - requestData.dispose(); - } - } } \ No newline at end of file From 6ded2a9c6051a4b647a5727f90a47dc7f701adec Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 29 Jun 2026 12:54:19 +0100 Subject: [PATCH 164/171] JCR-5247: update Apache parent pom to version 39 --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index d5ffb1afa56..528812925ac 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -27,7 +27,7 @@ org.apache apache - 38 + 39 From caccff503887322e42488bc6e38e43dd6e082c28 Mon Sep 17 00:00:00 2001 From: Jarek Potiuk Date: Thu, 2 Jul 2026 16:59:58 +0200 Subject: [PATCH 165/171] Drop RMI (jackrabbit-jcr-rmi) from the threat model Per PR review by @reschke: RMI support was removed from the current codebase (JCR-5042, ~2 years ago) and remains only in the 2.20.x maintenance branch slated for EOL, so it is out of scope for this model. Removes the jackrabbit-jcr-rmi module, its trust-boundary / entry-point / asset rows, finding P8 (RMI deserialisation), section 9.5, and the RMI residual-risk / FAQ / non-goal bullets and two RMI-specific open questions; renumbers findings, subsections, trust boundaries, and open questions sequentially with cross-references fixed. --- draft-THREAT-MODEL.md | 279 +++++++++++++++++------------------------- 1 file changed, 110 insertions(+), 169 deletions(-) diff --git a/draft-THREAT-MODEL.md b/draft-THREAT-MODEL.md index 3f39789bd18..285ae91a15c 100644 --- a/draft-THREAT-MODEL.md +++ b/draft-THREAT-MODEL.md @@ -84,10 +84,9 @@ implementation. The repository hosts: - **jackrabbit-spi** + **jackrabbit-spi-commons** + **jackrabbit-spi2dav** + **jackrabbit-spi2jcr** — the SPI layer used as a bridge between client and server when WebDAV is involved; -- **jackrabbit-jcr-commons**, **jackrabbit-jcr-rmi**, - **jackrabbit-jcr-server**, **jackrabbit-jcr-tests**, - **jackrabbit-jcr-client** — the JCR client / server / RMI bindings - and the JCR TCK harness; +- **jackrabbit-jcr-commons**, **jackrabbit-jcr-server**, + **jackrabbit-jcr-tests**, **jackrabbit-jcr-client** — the JCR + client / server bindings and the JCR TCK harness; - **jackrabbit-webdav** + **jackrabbit-jcr2dav** — WebDAV-over-JCR; - **examples/jackrabbit-firsthops** — sample code. @@ -102,7 +101,7 @@ forward-looking effort is on Oak *(inferred — §14 Q2)*. - **In-process JCR 2.0 (JSR 283) repository implementation** embedded by a host application, *or* exposed through one of jackrabbit- - webdav / jackrabbit-jcr-server / jackrabbit-jcr-rmi as a network + webdav / jackrabbit-jcr-server as a network service *(documented: `README.txt`; module presence)*. Unlike Oak, Jackrabbit *does* ship network bindings. - **The JCR API artefacts and SPI layer** are reusable on their own @@ -117,12 +116,11 @@ Jackrabbit covers two distinct deployment shapes: 1. **In-process JCR library** — same shape as Oak: a host application instantiates a `Repository`, logs in, gets a `Session`, reads/writes. 2. **Network-exposed via jackrabbit-webdav + jackrabbit-jcr-server + - jackrabbit-jcr2dav** — the repository is fronted by a WebDAV (or - RMI) servlet; HTTP/WebDAV clients authenticate (usually via HTTP - Basic or Digest) and the servlet translates WebDAV verbs into JCR - operations *(inferred — §14 Q3)*. This brings authentication, - HTTP parsing, and (in 2.x) XML parsing for WebDAV bodies onto the - in-model surface. + jackrabbit-jcr2dav** — the repository is fronted by a WebDAV + servlet; HTTP/WebDAV clients authenticate (usually via HTTP Basic + or Digest) and the servlet translates WebDAV verbs into JCR + operations. This brings authentication, HTTP parsing, and (in + 2.x) XML parsing for WebDAV bodies onto the in-model surface. This split is the most consequential modelling decision: the in-process and the network-exposed deployments have different @@ -135,11 +133,11 @@ different downstream responsibilities (§10). | --- | --- | --- | | **Host application code (embedded mode)** | trusted | Holds the JCR `Repository` handle; chooses the security configuration. | | **JCR session principal** | untrusted but authenticated | Identified via `Repository.login(Credentials)` against the configured `LoginModule`. | -| **System principal / admin user** | trusted | Default `admin`/`admin` ships with jackrabbit-core; widely cited as the "first thing to change in production" *(inferred — §14 Q4)*. | -| **WebDAV / RMI / HTTP client (network-exposed mode)** | untrusted | Reaches Jackrabbit through jackrabbit-webdav / jackrabbit-jcr-server. Carries HTTP Basic or Digest credentials. | +| **System principal / admin user** | trusted | Default `admin`/`admin` ships with jackrabbit-core; widely cited as the "first thing to change in production" *(inferred — §14 Q3)*. | +| **WebDAV / HTTP client (network-exposed mode)** | untrusted | Reaches Jackrabbit through jackrabbit-webdav / jackrabbit-jcr-server. Carries HTTP Basic or Digest credentials. | | **WebDAV operator / servlet container** | trusted | Configures Tomcat/Jetty, TLS, authentication realm, and chooses which JCR repository the servlet exposes. | -| **External resource referenced by WebDAV body (XML entities, etc.)** | untrusted control plane | jackrabbit-webdav historically parses XML bodies for `PROPFIND`, `LOCK`, `REPORT`; XXE-class concerns are in-model here *(inferred — §14 Q5)*. | -| **Persistence manager backend (filesystem / JDBC database)** | trusted | jackrabbit-core's persistence managers write to disk or to a relational DB the operator configures *(inferred — §14 Q6)*. | +| **External resource referenced by WebDAV body (XML entities, etc.)** | untrusted control plane | jackrabbit-webdav historically parses XML bodies for `PROPFIND`, `LOCK`, `REPORT`; XXE-class concerns are in-model here *(inferred — §14 Q4)*. | +| **Persistence manager backend (filesystem / JDBC database)** | trusted | jackrabbit-core's persistence managers write to disk or to a relational DB the operator configures *(inferred — §14 Q5)*. | ### Component-family table @@ -149,15 +147,14 @@ different downstream responsibilities (§10). | **jackrabbit-core** — repository implementation, JR2 persistence | `RepositoryImpl.login` | filesystem (PM, search index, data store) | **yes** | | **jackrabbit-spi**, **jackrabbit-spi-commons**, **jackrabbit-spi2jcr**, **jackrabbit-spi2dav** | SPI bridge | depends on the SPI impl | **yes** | | **jackrabbit-jcr-commons** | utilities | no | **yes** | -| **jackrabbit-jcr-rmi** | RMI bindings *(inferred — §14 Q3)* | **yes — RMI** | **yes** (network surface) | | **jackrabbit-jcr-server** | server-side glue | **yes — HTTP** | **yes** (network surface) | -| **jackrabbit-jcr-client** | client-side glue | **yes — HTTP / RMI** | **yes** for the client posture | +| **jackrabbit-jcr-client** | client-side glue | **yes — HTTP** | **yes** for the client posture | | **jackrabbit-webdav** | WebDAV protocol + XML handling | **yes — HTTP + XML parse** | **yes** (high security weight, XML / XXE-class) | | **jackrabbit-jcr2dav** | WebDAV ↔ JCR adaptation | **yes — HTTP** | **yes** | | **jackrabbit-jcr-tests** | JCR TCK | none | **out of model** — test harness *(§3)* | | **examples/jackrabbit-firsthops** | sample app | varies | **out of model** *(§3)* | -| **jackrabbit-standalone** / **jackrabbit-standalone-components** *(inferred — §14 Q7)* | standalone server launcher | filesystem + HTTP | in-model only as a runner, not a security boundary | -| **jackrabbit-aws-ext** *(inferred — §14 Q7)* | S3 data-store extension | **yes — S3** | in-model for in-Jackrabbit code; cloud APIs trusted (§3) | +| **jackrabbit-standalone** / **jackrabbit-standalone-components** *(inferred — §14 Q6)* | standalone server launcher | filesystem + HTTP | in-model only as a runner, not a security boundary | +| **jackrabbit-aws-ext** *(inferred — §14 Q6)* | S3 data-store extension | **yes — S3** | in-model for in-Jackrabbit code; cloud APIs trusted (§3) | A finding is in-model only if it lands in a row marked **yes**; see §4 for per-component reachability tests. @@ -170,14 +167,14 @@ disposition: 1. **Host application correctness (embedded mode) / servlet container configuration (network mode).** Tomcat / Jetty misconfiguration, missing TLS, missing HTTP-Basic realm — those are - operator / host issues *(inferred — §14 Q8)*. → `OUT-OF-MODEL: + operator / host issues *(inferred — §14 Q7)*. → `OUT-OF-MODEL: adversary-not-in-scope`. 2. **Underlying persistence-manager correctness.** Jackrabbit-core's PMs delegate to filesystem or JDBC; a hostile filesystem / hostile - database is not Jackrabbit's threat *(inferred — §14 Q6)*. → + database is not Jackrabbit's threat *(inferred — §14 Q5)*. → `OUT-OF-MODEL: trusted-input`. 3. **Failing to rotate the default `admin`/`admin` user.** Documented - convention; operator responsibility *(inferred — §14 Q4)*. → + convention; operator responsibility *(inferred — §14 Q3)*. → `OUT-OF-MODEL: non-default-build`. 4. **Code that ships but is not part of the supported product:** `jackrabbit-jcr-tests/` (TCK harness), @@ -190,7 +187,7 @@ disposition: 7. **Build / release / SDLC hygiene.** Out of model per the SKILL. 8. **Java EE / J2EE container vulnerabilities** when jackrabbit-jcr- server / jackrabbit-webdav is hosted under one. The container is - the operator's choice *(inferred — §14 Q9)*. → `OUT-OF-MODEL: + the operator's choice *(inferred — §14 Q8)*. → `OUT-OF-MODEL: adversary-not-in-scope`. 9. **Maintenance-mode reality.** This repository is in active maintenance for **bug** and **security** fixes but is not under @@ -207,35 +204,30 @@ disposition: ## §4 Trust boundaries and data flow -Jackrabbit has up to seven trust transitions a finding must land +Jackrabbit has up to six trust transitions a finding must land inside to be in-model: | # | Transition | Authentication | Authorisation | | --- | --- | --- | --- | -| B1 | Host code → `Repository.login(Credentials)` (embedded mode) | configured `LoginModule` chain via JAAS | `AccessManager` returned by the security configuration *(inferred — §14 Q10)* | +| B1 | Host code → `Repository.login(Credentials)` (embedded mode) | configured `LoginModule` chain via JAAS | `AccessManager` returned by the security configuration *(inferred — §14 Q9)* | | B2 | HTTP client → jackrabbit-webdav (network mode) | HTTP Basic / Digest at the servlet layer | per-JCR-session, post-translation | -| B3 | RMI client → jackrabbit-jcr-rmi (network mode) | configured server-side login | per-JCR-session *(inferred — §14 Q3)* | -| B4 | JCR session principal → tree read | `Subject` established at B1/B2/B3 | jackrabbit-core's `AccessManager` | -| B5 | JCR session principal → tree write | same | `AccessManager` evaluated on `Session.save()` | -| B6 | Jackrabbit → persistence manager (filesystem / JDBC) | backend-configured | backend ACLs | -| B7 | jackrabbit-webdav body parse | none (request body bytes) | n/a; the XML parser must be configured safely (XXE-class) *(inferred — §14 Q5)* | +| B3 | JCR session principal → tree read | `Subject` established at B1/B2 | jackrabbit-core's `AccessManager` | +| B4 | JCR session principal → tree write | same | `AccessManager` evaluated on `Session.save()` | +| B5 | Jackrabbit → persistence manager (filesystem / JDBC) | backend-configured | backend ACLs | +| B6 | jackrabbit-webdav body parse | none (request body bytes) | n/a; the XML parser must be configured safely (XXE-class) *(inferred — §14 Q4)* | ### Reachability preconditions per family A finding is in-model only if it meets the family's reachability test: -- **jackrabbit-core**: reachable from a JCR session at B1 / B2 / B3 +- **jackrabbit-core**: reachable from a JCR session at B1 / B2 with the principal carrying *less than* admin authority. - **jackrabbit-webdav**: reachable from an HTTP request body or header. XML-parse vulnerabilities (XXE, XML entity expansion, DTDs) are in-model here; the WebDAV bodies are the highest- - blast-radius input on the network surface *(inferred — §14 Q5)*. + blast-radius input on the network surface *(inferred — §14 Q4)*. - **jackrabbit-jcr-server**: in-model for the request-routing and authentication glue. -- **jackrabbit-jcr-rmi**: in-model for the deserialisation of RMI - arguments. **Java RMI deserialisation** has its own well-known - attack class; in-model only when the RMI server is exposed - *(inferred — §14 Q11)*. - **jackrabbit-spi**: in-model for the SPI bridge's own logic; the underlying SPI implementation is per-deployment trusted. - **jackrabbit-aws-ext** (S3 data store): in-model for in-Jackrabbit @@ -252,19 +244,18 @@ A finding is in-model only if it meets the family's reachability test: - **Persistence**. jackrabbit-core uses one of several PMs (bundle PM, ObjectPersistenceManager, database PMs); each writes to a filesystem directory or a JDBC database the operator configures - *(inferred — §14 Q6)*. + *(inferred — §14 Q5)*. - **Data store**. jackrabbit-core can use the FileDataStore (local files) or extensions (jackrabbit-aws-ext for S3); operator- - configured trusted *(inferred — §14 Q6)*. + configured trusted *(inferred — §14 Q5)*. - **Search**. Lucene-based search index on the filesystem under the repository home. - **Time** — `System.currentTimeMillis` for lock timeouts and observation event timestamps; clock skew internal-only. - **What Jackrabbit does NOT do to its host** *(predominantly - negative — §14 Q12)*: - - opens listening sockets *only* through jackrabbit-jcr-server / - jackrabbit-jcr-rmi when those are deployed (in pure-library mode, - none); + negative — §14 Q10)*: + - opens listening sockets *only* through jackrabbit-jcr-server + when it is deployed (in pure-library mode, none); - installs **no** process-wide signal handlers; - spawns **no** child processes from the core; - reads system properties (`jackrabbit.*`, etc.) but not @@ -275,21 +266,20 @@ A finding is in-model only if it meets the family's reachability test: | Knob / configuration | Default | Maintainer stance | Effect | | --- | --- | --- | --- | -| `repository.xml` `Security` element — `LoginModule`, `AccessManager`, `WorkspaceAccessManager` | jackrabbit defaults (e.g. `SimpleSecurityManager` + `DefaultLoginModule` + `AccessManagerImpl`) *(inferred — §14 Q10)* | required for any meaningful security; misconfiguration voids §8 P1–P3 | what auth + authz Jackrabbit applies | -| Default `admin`/`admin` user | exists, full repository access *(inferred — §14 Q4)* | operator must rotate before production | `BY-DESIGN`; see §3 item 3 | -| jackrabbit-webdav exposure | not exposed unless the operator deploys it | deploying it brings network attack surface in-scope (B2/B7) | network mode trades library posture for service posture | -| jackrabbit-jcr-rmi exposure | not exposed unless deployed | RMI deserialisation considerations *(inferred — §14 Q11)* | strongly discouraged on untrusted networks | -| XML parser configuration in jackrabbit-webdav | depends on JAXP defaults at the JVM level | **maintainer ruling required**: does jackrabbit-webdav harden its `DocumentBuilderFactory` against XXE / DTD / external-entity expansion, or does it rely on JVM defaults? *(inferred — §14 Q5)* | XXE-class behaviour | +| `repository.xml` `Security` element — `LoginModule`, `AccessManager`, `WorkspaceAccessManager` | jackrabbit defaults (e.g. `SimpleSecurityManager` + `DefaultLoginModule` + `AccessManagerImpl`) *(inferred — §14 Q9)* | required for any meaningful security; misconfiguration voids §8 P1–P3 | what auth + authz Jackrabbit applies | +| Default `admin`/`admin` user | exists, full repository access *(inferred — §14 Q3)* | operator must rotate before production | `BY-DESIGN`; see §3 item 3 | +| jackrabbit-webdav exposure | not exposed unless the operator deploys it | deploying it brings network attack surface in-scope (B2/B6) | network mode trades library posture for service posture | +| XML parser configuration in jackrabbit-webdav | depends on JAXP defaults at the JVM level | **maintainer ruling required**: does jackrabbit-webdav harden its `DocumentBuilderFactory` against XXE / DTD / external-entity expansion, or does it rely on JVM defaults? *(inferred — §14 Q4)* | XXE-class behaviour | | HTTP Basic vs Digest in jackrabbit-jcr-server | configurable | Digest preferred; Basic-without-TLS is a §11 misuse | which auth mechanism is on the WebDAV port | | FileDataStore directory permissions | operator-controlled | operator responsibility | binary content readability | -| Persistence manager (bundle / object / database) | bundle PM is the common default *(inferred — §14 Q6)* | operator choice; all are trusted as backends | the choice changes nothing in the security envelope | +| Persistence manager (bundle / object / database) | bundle PM is the common default *(inferred — §14 Q5)* | operator choice; all are trusted as backends | the choice changes nothing in the security envelope | | `jackrabbit-aws-ext` S3 data store | optional | when enabled, S3 backend trust applies (§3 item 2) | cloud blob storage | -| Anonymous read (some `JCRRepositoryFactory` configs allow guest login) | configurable | maintainer ruling: is anonymous read a supported posture or a dev-time default? *(inferred — §14 Q13)* | whether `Repository.login(null, ws)` succeeds | +| Anonymous read (some `JCRRepositoryFactory` configs allow guest login) | configurable | maintainer ruling: is anonymous read a supported posture or a dev-time default? *(inferred — §14 Q11)* | whether `Repository.login(null, ws)` succeeds | **The insecure-default case.** The single most load-bearing knob is the default `admin`/`admin` user. The model assumes the operator's posture is "rotate or remove before production" — i.e. failing to rotate is -`OUT-OF-MODEL: non-default-build`. PMC must ratify this in §14 Q4. +`OUT-OF-MODEL: non-default-build`. PMC must ratify this in §14 Q3. ## §6 Assumptions about inputs @@ -302,23 +292,22 @@ is "rotate or remove before production" — i.e. failing to rotate is | `Session.save()` | accumulated transient changes | **yes** via the authenticated user | nothing | | `QueryManager.createQuery(stmt, lang)` | SQL2 / XPath / SQL1 | **yes** | Jackrabbit parses + plans + filters | | `AccessControlManager.setPolicy` | policy bytes | only by callers with the right privileges | Jackrabbit gates | -| WebDAV `PROPFIND` request body | XML | **yes** (HTTP-network input) | per §5a, the XML parser must be hardened (XXE) *(inferred — §14 Q5)* | +| WebDAV `PROPFIND` request body | XML | **yes** (HTTP-network input) | per §5a, the XML parser must be hardened (XXE) *(inferred — §14 Q4)* | | WebDAV `LOCK`, `REPORT` request bodies | XML | **yes** | same | | WebDAV `PUT` body | bytes | **yes** | binary into a JCR property/binary value | | WebDAV `MOVE`, `COPY` Destination header | URL | **yes** | parsed; URL-decoded path may not contain `..` after decode | | WebDAV `If` header | conditional state | **yes** | parsed | | HTTP Basic / Digest credentials | bytes | **yes** | configured by `jackrabbit-jcr-server` | -| RMI invocation arguments | serialised Java objects | **yes** | Java RMI deserialisation considerations *(inferred — §14 Q11)* | | Persistence-manager bytes | DB rows / filesystem bytes | **no** — backend is trusted | none | ### Size / shape / rate - WebDAV / JCR-server accept arbitrary-length request bodies subject to - the servlet container's limits *(inferred — §14 Q14)*. + the servlet container's limits *(inferred — §14 Q12)*. - Jackrabbit core imposes no enforced cap on tree depth, child - count, or query complexity *(inferred — §14 Q14)*. + count, or query complexity *(inferred — §14 Q12)*. - Lucene full-text query parsing is unbounded by default; a - pathological query can burn CPU *(inferred — §14 Q14)*. **No DoS + pathological query can burn CPU *(inferred — §14 Q12)*. **No DoS protection by default.** ## §7 Adversary model @@ -331,13 +320,12 @@ is "rotate or remove before production" — i.e. failing to rotate is | Authenticated end-user session (broad privileges, non-admin) | partial | only privilege-envelope escapes are in scope | | Unauthenticated HTTP / WebDAV peer reaching the network port | **yes** (when deployed) | TCP connect; HTTP requests; XML body parse; HTTP Basic/Digest auth attempts | | Authenticated WebDAV client (HTTP Basic/Digest) | **yes** | same as authenticated JCR session via WebDAV translation | -| Authenticated RMI client | **yes** (when deployed) | RMI deserialisation surface | | Cross-session adversary (one JCR session influencing another) | **yes** | through `AccessManager` cache or commit-hook side effects | | Hostile persistence-manager backend (DB, FS) | **out of scope** — §3 item 2 | | Hostile servlet container / operator | **out of scope** — §3 item 1 | | Hostile XXE-supplying WebDAV body | **yes** (when WebDAV exposed) — *the* main XML-parse adversary | -| Same-JVM attacker code | **partial** — host's container is the boundary *(inferred — §14 Q15)* | -| Side-channel observer | **out of scope** *(§14 Q16)* | +| Same-JVM attacker code | **partial** — host's container is the boundary *(inferred — §14 Q13)* | +| Side-channel observer | **out of scope** *(§14 Q14)* | | Quantum adversary | **out of scope** | The model does **not** include "authenticated-but-Byzantine peer" @@ -352,7 +340,7 @@ The model does **not** include "authenticated-but-Byzantine peer" - **Violation symptom.** A `Repository.login` call returns a `Session` for credentials the configured chain should have rejected. - **Severity.** Security-critical (`VALID`). -- *(inferred — §14 Q10)* +- *(inferred — §14 Q9)* ### P2 — Authorisation of reads through `AccessManager` @@ -361,7 +349,7 @@ The model does **not** include "authenticated-but-Byzantine peer" - **Violation symptom.** `Session.getNode(path)` returns an item the configured ACLs do not license. - **Severity.** Security-critical (`VALID`). -- *(inferred — §14 Q10)* +- *(inferred — §14 Q9)* ### P3 — Authorisation of writes through `AccessManager` on commit @@ -369,7 +357,7 @@ The model does **not** include "authenticated-but-Byzantine peer" - **Violation symptom.** A `Session.save()` commits a change the ACLs do not license. - **Severity.** Security-critical (`VALID`). -- *(inferred — §14 Q10)* +- *(inferred — §14 Q9)* ### P4 — HTTP Basic / Digest authentication at the WebDAV servlet boundary (network mode) @@ -378,7 +366,6 @@ The model does **not** include "authenticated-but-Byzantine peer" - **Violation symptom.** A WebDAV request without valid credentials reaches B2 trust transitions. - **Severity.** Security-critical (`VALID`). -- *(inferred — §14 Q3)* ### P5 — TLS confidentiality / integrity at the network surface (when configured) @@ -387,7 +374,7 @@ The model does **not** include "authenticated-but-Byzantine peer" - **Violation symptom.** Cleartext on the wire after TLS is configured. - **Severity.** Security-critical (`VALID`). -- *(inferred — §14 Q17)* +- *(inferred — §14 Q15)* ### P6 — XML safety of jackrabbit-webdav body parses @@ -398,7 +385,7 @@ The model does **not** include "authenticated-but-Byzantine peer" SSRF), Billion-Laughs, or DTD-based remote-fetch. - **Severity.** Security-critical (`VALID`) when reachable from an unauthenticated or low-privilege HTTP peer. -- *(inferred — §14 Q5; this is the single highest-confidence-required +- *(inferred — §14 Q4; this is the single highest-confidence-required property for the network-exposed deployment)* ### P7 — `Session` per-thread isolation and MVCC-like read consistency @@ -409,26 +396,15 @@ The model does **not** include "authenticated-but-Byzantine peer" data committed after its login without an intentional refresh. - **Severity.** Correctness by default; security-critical iff cross-session leakage crosses an ACL boundary. -- *(inferred — §14 Q18)* - -### P8 — RMI deserialisation safety (when jackrabbit-jcr-rmi deployed) +- *(inferred — §14 Q16)* -- **Condition.** jackrabbit-jcr-rmi has an - `ObjectInputFilter` / serialFilter that constrains the - deserialisation class list. -- **Violation symptom.** RMI deserialisation of attacker-supplied - bytes reaches a gadget chain. -- **Severity.** Security-critical (`VALID`) — RMI deserialisation is - a well-known attack class. -- *(inferred — §14 Q11)* - -### P9 — Memory safety of safe-Java core +### P8 — Memory safety of safe-Java core - **Condition.** JVM semantics; no `Unsafe` use in the core security paths. - **Violation symptom.** OOB / UAF / data race observable. - **Severity.** Security-critical when reachable from §6 input. -- *(inferred — §14 Q19)* +- *(inferred — §14 Q17)* ## §9 Security properties the project does NOT provide @@ -436,12 +412,12 @@ The model does **not** include "authenticated-but-Byzantine peer" `SimpleCredentials("admin","admin")` always works against default config. If the host hands those out, the host has lost. *(inferred — -§14 Q4)* +§14 Q3)* ### 9.2 No defence against a malicious persistence-manager backend JDBC / FileDataStore / FS / S3 are all trusted. *(inferred — -§14 Q6)* +§14 Q5)* ### 9.3 No defence against a malicious servlet-container operator @@ -452,29 +428,23 @@ deployment descriptor. *(inferred — §14 Q1)* No enforced cap on query complexity, tree depth, child count, transient state per session, or WebDAV body size. *(inferred — -§14 Q14)* +§14 Q12)* -### 9.5 No protection against RMI deserialisation by default +### 9.5 No XXE / DTD / external-entity protection in WebDAV bodies (subject to confirmation) -`jackrabbit-jcr-rmi` (when deployed) inherits the JVM's -`ObjectInputStream` posture. Operators must constrain via JVM-level -`serialFilter` *(inferred — §14 Q11)*. - -### 9.6 No XXE / DTD / external-entity protection in WebDAV bodies (subject to confirmation) - -§8 P6 is the inverse — this is the disclaimer if §14 Q5 reveals +§8 P6 is the inverse — this is the disclaimer if §14 Q4 reveals that jackrabbit-webdav does *not* harden its parser. -### 9.7 No data-at-rest encryption at the Jackrabbit layer +### 9.6 No data-at-rest encryption at the Jackrabbit layer Delegated to PM / data-store backend. -### 9.8 No constant-time comparison of authentication secrets +### 9.7 No constant-time comparison of authentication secrets Beyond what `LoginModule` / JCA helpers provide. *(inferred — -§14 Q20)* +§14 Q18)* -### 9.9 No defender stance against `loginAdministrative`-equivalent host paths +### 9.8 No defender stance against `loginAdministrative`-equivalent host paths If jackrabbit's `SimpleSecurityManager` was configured to grant admin to any subject, that's the configuration speaking, not a bug. @@ -484,29 +454,25 @@ admin to any subject, that's the configuration speaking, not a bug. - **Default `admin`/`admin` is *not* a deployed-by-default backdoor — it is documented; the operator is expected to rotate.** Whether failing to do so is `VALID` Jackrabbit or `OUT-OF-MODEL` - operator-config is §14 Q4. + operator-config is §14 Q3. - **HTTP Basic without TLS is *not* secure authentication.** Credentials are base64 in cleartext. - **HTTP Digest is *not* TLS substitute.** It protects the password in transit, not the *content*. - **WebDAV `LOCK` is an advisory locking primitive, not access control.** A holder of `LOCK` does not become an authoriser. -- **`jackrabbit-jcr-rmi` is a transport, not a security layer.** - The remote bytes are deserialised; an `ObjectInputFilter` is - essential. ### Well-known attack classes the project does not defend against - **XXE / Billion-Laughs / DTD-fetch via WebDAV bodies** — *(inferred - — §14 Q5)*. -- **RMI Java deserialisation gadgets** — *(inferred — §14 Q11)*. + — §14 Q4)*. - **Authenticated-DoS** (pathological queries / tree shapes) — §9.4. - **HTTP Basic over plaintext** when `jackrabbit-jcr-server` is exposed without TLS — `OUT-OF-MODEL: non-default-build` or operator misconfiguration. - **TOCTOU between ACL evaluation and tree write** — *(inferred — - §14 Q18)*. + §14 Q16)*. ## §10 Downstream responsibilities @@ -514,28 +480,25 @@ The host application (and, in network mode, the operator) MUST: 1. **Rotate or remove the default `admin`/`admin` user** before exposing the repository to any non-trusted caller *(inferred — - §14 Q4)*. + §14 Q3)*. 2. **Configure a `LoginModule` and an `AccessManager`** that match the production trust posture. The shipped defaults are intended for demos. 3. **Wrap `jackrabbit-jcr-server` / jackrabbit-webdav with TLS** (servlet container HTTPS). HTTP Basic over plaintext is not - acceptable production posture *(inferred — §14 Q17)*. -4. **Constrain RMI deserialisation** when `jackrabbit-jcr-rmi` is - exposed — JVM-level `ObjectInputFilter` / `jdk.serialFilter` - appropriate to the running JVM *(inferred — §14 Q11)*. -5. **Harden the XML parser configuration** if `jackrabbit-webdav` is + acceptable production posture *(inferred — §14 Q15)*. +4. **Harden the XML parser configuration** if `jackrabbit-webdav` is exposed (XXE, DTD, external-entity, billion-laughs) - *(inferred — §14 Q5)*. -6. **Apply admission control / rate limits** at the servlet + *(inferred — §14 Q4)*. +5. **Apply admission control / rate limits** at the servlet container / reverse-proxy layer; Jackrabbit does not. -7. **Restrict OS filesystem permissions** on `repository.home`, +6. **Restrict OS filesystem permissions** on `repository.home`, persistence-manager directories, data-store directories, search index, and any keystores. -8. **Track CVE advisories on this repo.** Maintenance-mode posture +7. **Track CVE advisories on this repo.** Maintenance-mode posture means the security mailing list is the right channel for reports; binary patches are not produced per Apache convention. -9. **Plan migration to Oak** if the deployment is greenfield or if +8. **Plan migration to Oak** if the deployment is greenfield or if bug-fixes diverge — Oak is the active codebase *(inferred — §14 Q2)*. @@ -545,8 +508,6 @@ The host application (and, in network mode, the operator) MUST: - **Deploying jackrabbit-jcr-server / jackrabbit-webdav without TLS.** HTTP Basic over plaintext is the default if the operator does not flip a switch. -- **Deploying jackrabbit-jcr-rmi to a public network without a - `serialFilter`.** - **Exposing the WebDAV port directly without an authentication realm.** WebDAV has no built-in auth; the servlet container does. - **Treating Jackrabbit as the active codebase and not Oak.** For @@ -555,7 +516,7 @@ The host application (and, in network mode, the operator) MUST: submit.** SQL1 is more permissive than SQL2 / XPath. - **WebDAV `PROPFIND` `Depth: infinity` against the root** — a documented amplification vector for any WebDAV-fronted store - *(inferred — §14 Q14)*. + *(inferred — §14 Q12)*. - **WebDAV `MOVE` / `COPY` with a `Destination` header pointing outside the configured workspace.** ACL-bounded; the configured ACL is the gate. @@ -564,16 +525,13 @@ The host application (and, in network mode, the operator) MUST: - **"Default `admin`/`admin` user exists in the shipped configuration."** Documented; operator must rotate per §10. → - `OUT-OF-MODEL: non-default-build` (subject to §14 Q4). + `OUT-OF-MODEL: non-default-build` (subject to §14 Q3). - **"HTTP Basic credentials sent in cleartext when `jackrabbit-jcr-server` is exposed over HTTP."** Operator must - enable TLS *(inferred — §14 Q17)*. → `OUT-OF-MODEL: + enable TLS *(inferred — §14 Q15)*. → `OUT-OF-MODEL: non-default-build`. -- **"`jackrabbit-jcr-rmi` deserialises arbitrary classes."** Operator - must configure `jdk.serialFilter` *(inferred — §14 Q11)*. → - `OUT-OF-MODEL: non-default-build`. - **"DoS via pathological SQL2 / XPath query."** No engine-level - cap *(inferred — §14 Q14)*. → `BY-DESIGN: property-disclaimed`. + cap *(inferred — §14 Q12)*. → `BY-DESIGN: property-disclaimed`. - **"Hardcoded test password / keystore in `examples/jackrabbit-firsthops/`, `jackrabbit-jcr-tests/`."** Unsupported components. → `OUT-OF-MODEL: unsupported-component`. @@ -594,14 +552,11 @@ The host application (and, in network mode, the operator) MUST: ## §12 Conditions that would change this model - A new network listener in jackrabbit (currently only via - jackrabbit-jcr-server / jackrabbit-webdav / jackrabbit-jcr-rmi - when deployed). + jackrabbit-jcr-server / jackrabbit-webdav when deployed). - A change in the shipped default `LoginModule` / `AccessManager`. - A change in the shipped default `admin`/`admin` posture (e.g. randomised on first start). - A change in jackrabbit-webdav's XML parser default hardening. -- Promotion of jackrabbit-jcr-rmi to a recommended deployment - shape (currently strongly discouraged on untrusted networks). - A change in the project's maintenance posture (return to active feature development). - A vulnerability report that cannot be cleanly routed to one of the @@ -618,7 +573,7 @@ A report against Jackrabbit receives exactly one of: | `OUT-OF-MODEL: trusted-input` | Requires attacker control of a §6 parameter the model marks trusted. | §6 | | `OUT-OF-MODEL: adversary-not-in-scope` | Requires a §7 actor the model excludes. | §7 | | `OUT-OF-MODEL: unsupported-component` | Lands in `jackrabbit-jcr-tests/`, `examples/`, or in Oak / filevault. | §3 | -| `OUT-OF-MODEL: non-default-build` | Manifests only under a discouraged or non-default §5a value (un-rotated `admin`, HTTP Basic without TLS, RMI without `serialFilter`). | §5a | +| `OUT-OF-MODEL: non-default-build` | Manifests only under a discouraged or non-default §5a value (un-rotated `admin`, HTTP Basic without TLS). | §5a | | `BY-DESIGN: property-disclaimed` | Concerns a §9 property the project explicitly does not provide. | §9 | | `KNOWN-NON-FINDING` | Matches a §11a recurring false positive. | §11a | | `MODEL-GAP` | Cannot be cleanly routed to any of the above — triggers §12 model revision. | §12 | @@ -631,87 +586,74 @@ A report against Jackrabbit receives exactly one of: disclosure history page at `https://jackrabbit.apache.org/jcr/jackrabbit-security-reports.html`. Specifically: what CVEs have been issued against jackrabbit-core / -jackrabbit-webdav / jackrabbit-jcr-rmi in the last 5 years, and -which patterns recur in inbound reports that you close as not-a-bug? +jackrabbit-webdav in the last 5 years, and which patterns recur in +inbound reports that you close as not-a-bug? *(maps to §1 reporting, §11a)* **Q2.** Maintenance posture. Proposed: "active for bug + security fixes; not active for feature development; Oak is the recommended codebase for new deployments". Confirm or correct. *(maps to -§3 item 9, §10 item 9)* +§3 item 9, §10 item 8)* -**Q3.** Is jackrabbit-jcr-rmi still a supported deployment shape? -Proposed: yes but strongly discouraged on untrusted networks -because of Java deserialisation considerations. Should §13 add a -"deployed-on-untrusted-network" axis for `jackrabbit-jcr-rmi` -specifically? *(maps to §2, §3, §5a)* - -**Q4.** The default `admin`/`admin` user. Proposed disposition for +**Q3.** The default `admin`/`admin` user. Proposed disposition for "deployment X has not rotated the default `admin`": `OUT-OF-MODEL: non-default-build`. Confirm — or has the project moved to randomised first-start? *(maps to §5a, §10 item 1, §11a)* -**Q5.** **The XXE question.** Does `jackrabbit-webdav` ship +**Q4.** **The XXE question.** Does `jackrabbit-webdav` ship hardened XML parser configuration (disable external entities, disallow DOCTYPE, cap entity expansion) for `PROPFIND`, `LOCK`, `REPORT` body parsing? This is the highest-leverage single question for the network-exposed deployment. If not, §8 P6 collapses into -§9.6 and §10 item 5 becomes a hard production requirement. -*(maps to §4 B7, §6 WebDAV rows, §8 P6, §9.6)* +§9.5 and §10 item 4 becomes a hard production requirement. +*(maps to §4 B6, §6 WebDAV rows, §8 P6, §9.5)* ### Wave 2 — backends, environment -**Q6.** Are persistence-manager backends (FileDataStore, bundle PM, +**Q5.** Are persistence-manager backends (FileDataStore, bundle PM, database PMs, S3 via jackrabbit-aws-ext) all modelled as trusted backends — i.e. Jackrabbit does not defend against a malicious backend? Proposed: yes. *(maps to §3 item 2, §9.2)* -**Q7.** Module inventory: confirm or correct the list of supported +**Q6.** Module inventory: confirm or correct the list of supported modules vs unsupported / sample / TCK / extension modules. In particular: is `jackrabbit-standalone` / `jackrabbit-standalone-components` still part of the repo (the README didn't reach it); is `jackrabbit-aws-ext` an in-tree module or a separate artefact? *(maps to §2 component family)* -**Q8.** Servlet-container responsibility: confirmed that Tomcat / +**Q7.** Servlet-container responsibility: confirmed that Tomcat / Jetty configuration (TLS, HTTP Basic / Digest realm, request body size caps, request timeouts) is out-of-model and the operator's responsibility? *(maps to §3 item 1)* -**Q9.** Java EE container vulnerabilities: confirmed out-of-model? +**Q8.** Java EE container vulnerabilities: confirmed out-of-model? *(maps to §3 item 8)* ### Wave 3 — `AccessManager`, login -**Q10.** What is the *default* `LoginModule` / `AccessManager` in +**Q9.** What is the *default* `LoginModule` / `AccessManager` in the shipped `repository.xml` of jackrabbit-core? The §8 P1–P3 properties hinge on this configuration; this draft uses generic "configured `LoginModule` / `AccessManager`" placeholders. Please state the concrete default class names and the JAAS app-name they register under. *(maps to §5a, §8 P1–P3)* -**Q11.** `jackrabbit-jcr-rmi` deserialisation. Does the module -ship its own `ObjectInputFilter` to constrain the deserialisation -class allowlist? If not, is "operator must configure -`jdk.serialFilter`" the documented production posture, and how is -that surfaced in the deployment docs? *(maps to §4 B3, §6 RMI -row, §8 P8, §9.5, §10 item 4, §11a)* - ### Wave 4 — environment, MVCC, memory safety -**Q12.** "What Jackrabbit does NOT do to its host" inventory: no +**Q10.** "What Jackrabbit does NOT do to its host" inventory: no process-wide signal handlers, no child process spawn (outside network-mode servlet container), no arbitrary `LD_*` consumption, no on-disk persistence outside `repository.home`. Confirm any inaccuracies. *(maps to §5)* -**Q13.** Anonymous read posture. Is `Repository.login(null, ws)` +**Q11.** Anonymous read posture. Is `Repository.login(null, ws)` (guest login without credentials) supported in any default configuration, or is it always disabled by default? *(maps to §5a, §6, §7 unauthenticated row)* -**Q14.** WebDAV / JCR / Lucene resource bounds. Confirmed that +**Q12.** WebDAV / JCR / Lucene resource bounds. Confirmed that Jackrabbit imposes **no** enforced cap on: - WebDAV request body size beyond servlet container limits; - JCR query complexity (Lucene-based); @@ -722,48 +664,47 @@ Jackrabbit imposes **no** enforced cap on: If correct, all of these belong in §9.4 / §11a as `BY-DESIGN: property-disclaimed`. *(maps to §6, §9.4)* -**Q15.** Same-JVM attacker code (co-installed servlet, OSGi bundle, +**Q13.** Same-JVM attacker code (co-installed servlet, OSGi bundle, servlet container's other webapps): confirmed out-of-model? The host container is the security boundary. *(maps to §7, §9)* -**Q16.** Side-channel adversaries: confirmed out-of-model? *(maps +**Q14.** Side-channel adversaries: confirmed out-of-model? *(maps to §3 item 10, §7, §9)* -**Q17.** TLS: confirmed that TLS is **always** the servlet +**Q15.** TLS: confirmed that TLS is **always** the servlet container's job in network mode, never Jackrabbit's? *(maps to §8 P5)* -**Q18.** MVCC visibility: how does jackrabbit-core handle +**Q16.** MVCC visibility: how does jackrabbit-core handle cross-session refresh? Proposed: session reads the revision captured at login, refreshable via `Session.refresh`. Confirm. *(maps to §8 P7)* -**Q19.** Memory safety of safe-Java: confirmed that the core -security paths use no `Unsafe` / JNI? *(maps to §8 P9)* +**Q17.** Memory safety of safe-Java: confirmed that the core +security paths use no `Unsafe` / JNI? *(maps to §8 P8)* -**Q20.** Constant-time comparison of authentication secrets: +**Q18.** Constant-time comparison of authentication secrets: confirmed all delegated to JAAS / `LoginModule` / JCA, with no -Jackrabbit-internal `equals` on secrets? *(maps to §9.8)* +Jackrabbit-internal `equals` on secrets? *(maps to §9.7)* ### Wave 5 — meta -**Q21.** Should this document live as `docs/threat-model.md` or +**Q19.** Should this document live as `docs/threat-model.md` or under `jackrabbit-jcr-commons/src/site/markdown/`? *(meta)* -**Q22.** Is there an existing Jackrabbit threat-model document +**Q20.** Is there an existing Jackrabbit threat-model document (Confluence, JIRA, mailing-list summary, prior PMC discussion) that this should reconcile with rather than supersede? *(meta — §3.1a)* -**Q23.** §11a known-non-findings is currently 10 entries, mostly +**Q21.** §11a known-non-findings is currently 9 entries, mostly operator-misconfiguration-shaped. Could the PMC contribute 3–5 patterns the Jackrabbit triage queue sees recur in inbound reports that you close as not-a-bug? Patterns like "WebDAV exposed without -TLS — operator misconfig, not Jackrabbit", "RMI deserialisation -gadget — JVM serialFilter is the fix", "DoS via huge PROPFIND -Depth-infinity — WebDAV semantics" would harden §11a substantially. -*(meta — §11a)* +TLS — operator misconfig, not Jackrabbit" and "DoS via huge +PROPFIND Depth-infinity — WebDAV semantics" would harden §11a +substantially. *(meta — §11a)* -**Q24.** Should this Jackrabbit model cross-reference the (still-to- +**Q22.** Should this Jackrabbit model cross-reference the (still-to- be-drafted) `jackrabbit-oak` and `jackrabbit-filevault` models for items §3 items 5–6? *(meta)* From 1a95d113644191d52d7712902fde38fdb1b0e4c0 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Mon, 29 Jun 2026 12:57:37 +0100 Subject: [PATCH 166/171] JCR-5250: Release Jackrabbit 2.23.5-beta --- RELEASE-NOTES.txt | 41 ++++++++++++++--------------------------- 1 file changed, 14 insertions(+), 27 deletions(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 3a269d17472..6b074102664 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -1,44 +1,31 @@ -Release Notes -- Apache Jackrabbit -- Version 2.23.4-beta +Release Notes -- Apache Jackrabbit -- Version 2.23.5-beta Introduction ------------ -This is Apache Jackrabbit(TM) 2.23.4-beta, a fully compliant implementation of the +This is Apache Jackrabbit(TM) 2.23.5-beta, a fully compliant implementation of the Content Repository for Java(TM) Technology API, version 2.0 (JCR 2.0) as specified in the Java Specification Request 283 (JSR 283). -Apache Jackrabbit 2.23.4-beta is an unstable release cut directly from +Apache Jackrabbit 2.23.5-beta is an unstable release cut directly from Jackrabbit trunk, with a focus on new features and other -improvements. For production use we recommend the latest stable 2.20.x +improvements. For production use we recommend the latest stable 2.22.x release. -Changes in Jackrabbit 2.23.4-beta +Changes in Jackrabbit 2.23.5-beta ---------------------------------- -Bug +** Sub-task + * [JCR-5244] - improve test coverage for HttpMultipartPost - [JCR-5226] - Base64 decoder does not handle input without padding correctly - [JCR-5229] - LockedWrapperTest.testSequenceWithSessionRefresh() may fail due to race conditions +** Improvement -Improvement - - [JCR-4521] - upgrade to commons-dbcp2 - -Test - - [JCR-4945] - Ensure OSGi-enabled Jackrabbit bundles deploy in environments featuring only Slf4j v2 or even Tika v2.9 - -Task - - [JCR-5211] - package-version jcr2spi - [JCR-5216] - Update Jackrabbit Trunk to Oak 1.90.0 - [JCR-5217] - Update Mockito dependency to 5.23.0 - [JCR-5218] - webapp: bump htmlunit to 4.21.0 - [JCR-5219] - set baseline comparisonVersion to latest stable (2.22.3) - [JCR-5223] - update Apache parent pom to version 37 - [JCR-5224] - remove jackrabbit 2.0 compatibility and performance tests - [JCR-5230] - improve diagnostics in IndexingQueueTest - [JCR-5232] - Update Jackrabbit Trunk to Oak 1.92.0 +** Task + * [JCR-5233] - commons-fileupload (1.6) restricts header size in upload parts + * [JCR-5242] - Update Jackrabbit Trunk to Oak 2.2.0 + * [JCR-5243] - Update oak-jackrabbit-api.version.used to Oak 1.22.24 + * [JCR-5246] - webapp: update tomcat dependency to 9.0.118 + * [JCR-5247] - update Apache parent pom to version 39 For more detailed information about all the changes in this and other From ff19580c14bdf8a3d789b6863e70b1e3b171ca6d Mon Sep 17 00:00:00 2001 From: Manfred Baedke Date: Tue, 30 Jun 2026 15:23:45 +0200 Subject: [PATCH 167/171] JCR-5250: Release Jackrabbit 2.23.5-beta Completed Release Notes. --- RELEASE-NOTES.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/RELEASE-NOTES.txt b/RELEASE-NOTES.txt index 6b074102664..a98ec320652 100644 --- a/RELEASE-NOTES.txt +++ b/RELEASE-NOTES.txt @@ -19,6 +19,7 @@ Changes in Jackrabbit 2.23.5-beta * [JCR-5244] - improve test coverage for HttpMultipartPost ** Improvement + * [JCR-5249] - jackrabbit-spi-commons: add broken namepace names / prefixes to exception message ** Task * [JCR-5233] - commons-fileupload (1.6) restricts header size in upload parts @@ -73,4 +74,3 @@ Trademarks Apache Jackrabbit, Jackrabbit, Apache, the Apache feather logo, and the Apache Jackrabbit project logo are trademarks of The Apache Software Foundation. - From 924cb6e9143dbe98bde84b75e6740a2f52f64021 Mon Sep 17 00:00:00 2001 From: Manfred Baedke Date: Wed, 1 Jul 2026 14:33:19 +0200 Subject: [PATCH 168/171] [maven-release-plugin] prepare release jackrabbit-2.23.5-beta --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 6 +++--- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index 03939b7686e..08b1cc885e6 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index f5ade1fbd53..7afeef60535 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index af55599dcef..134e7c4d711 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index 1989aacb6bd..647ab91b118 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index e2b829c1531..f73ed0fbeb9 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index f9bb0c0b85c..ca51d795f84 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index ad5ac8e82bf..77bb688c2f7 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index 22afd85ed6b..a8fa65d23e9 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index eb81a85886c..d5c2359690b 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index bd07178c6b7..1dee1bf1ba6 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index c547bde34b0..a4b53b43684 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index b0ea548c8dc..b78545fa684 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 528812925ac..a4b7dbb7306 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.5-beta-SNAPSHOT + 2.23.5-beta pom @@ -47,7 +47,7 @@ scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git https://github.com/apache/jackrabbit/tree/${project.scm.tag} - jackrabbit-2.23.4-beta + jackrabbit-2.23.5-beta @@ -76,7 +76,7 @@ 0.0 - 1775547457 + 1782908526 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index 091a315dac4..635c9a26c78 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index 537b58307dd..ed1628be5f7 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index ee78086b8de..556ce033064 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index 50d69fa695a..f91c2519f98 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 554ebd7cf26..9a92e3a7504 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index 7dee0b2c61a..e792980fcf1 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index f501a6cdd4b..7cb97158954 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 7f91dac7cb6..6ae9c2f7c61 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index 13945b6556f..404f40e9f72 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index 57da440b376..9ea21858c72 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta-SNAPSHOT + 2.23.5-beta jackrabbit-parent/pom.xml From 3160ead71501fe59ec6a15a93bb459af5e6d5cd8 Mon Sep 17 00:00:00 2001 From: Manfred Baedke Date: Wed, 1 Jul 2026 14:33:28 +0200 Subject: [PATCH 169/171] [maven-release-plugin] prepare for next development iteration --- jackrabbit-aws-ext/pom.xml | 2 +- jackrabbit-core/pom.xml | 2 +- jackrabbit-data/pom.xml | 2 +- jackrabbit-it-osgi/pom.xml | 2 +- jackrabbit-jca/pom.xml | 2 +- jackrabbit-jcr-client/pom.xml | 2 +- jackrabbit-jcr-commons/pom.xml | 2 +- jackrabbit-jcr-server/pom.xml | 2 +- jackrabbit-jcr-servlet/pom.xml | 2 +- jackrabbit-jcr-tests/pom.xml | 2 +- jackrabbit-jcr2dav/pom.xml | 2 +- jackrabbit-jcr2spi/pom.xml | 2 +- jackrabbit-parent/pom.xml | 6 +++--- jackrabbit-spi-commons/pom.xml | 2 +- jackrabbit-spi/pom.xml | 2 +- jackrabbit-spi2dav/pom.xml | 2 +- jackrabbit-spi2jcr/pom.xml | 2 +- jackrabbit-standalone-components/pom.xml | 2 +- jackrabbit-standalone/pom.xml | 2 +- jackrabbit-vfs-ext/pom.xml | 2 +- jackrabbit-webapp/pom.xml | 2 +- jackrabbit-webdav/pom.xml | 2 +- pom.xml | 2 +- 23 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jackrabbit-aws-ext/pom.xml b/jackrabbit-aws-ext/pom.xml index 08b1cc885e6..36b2dd44539 100644 --- a/jackrabbit-aws-ext/pom.xml +++ b/jackrabbit-aws-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-aws-ext diff --git a/jackrabbit-core/pom.xml b/jackrabbit-core/pom.xml index 7afeef60535..dfe031315d8 100644 --- a/jackrabbit-core/pom.xml +++ b/jackrabbit-core/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-core diff --git a/jackrabbit-data/pom.xml b/jackrabbit-data/pom.xml index 134e7c4d711..08145079f9a 100644 --- a/jackrabbit-data/pom.xml +++ b/jackrabbit-data/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-data diff --git a/jackrabbit-it-osgi/pom.xml b/jackrabbit-it-osgi/pom.xml index 647ab91b118..6503f5edd6a 100644 --- a/jackrabbit-it-osgi/pom.xml +++ b/jackrabbit-it-osgi/pom.xml @@ -23,7 +23,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jca/pom.xml b/jackrabbit-jca/pom.xml index f73ed0fbeb9..8b8a43504cb 100644 --- a/jackrabbit-jca/pom.xml +++ b/jackrabbit-jca/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jca diff --git a/jackrabbit-jcr-client/pom.xml b/jackrabbit-jcr-client/pom.xml index ca51d795f84..f46d7a57b11 100644 --- a/jackrabbit-jcr-client/pom.xml +++ b/jackrabbit-jcr-client/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-client diff --git a/jackrabbit-jcr-commons/pom.xml b/jackrabbit-jcr-commons/pom.xml index 77bb688c2f7..cc6850c4d8c 100644 --- a/jackrabbit-jcr-commons/pom.xml +++ b/jackrabbit-jcr-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-commons diff --git a/jackrabbit-jcr-server/pom.xml b/jackrabbit-jcr-server/pom.xml index a8fa65d23e9..500842ef6de 100644 --- a/jackrabbit-jcr-server/pom.xml +++ b/jackrabbit-jcr-server/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-server diff --git a/jackrabbit-jcr-servlet/pom.xml b/jackrabbit-jcr-servlet/pom.xml index d5c2359690b..d8e46174998 100644 --- a/jackrabbit-jcr-servlet/pom.xml +++ b/jackrabbit-jcr-servlet/pom.xml @@ -22,7 +22,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml diff --git a/jackrabbit-jcr-tests/pom.xml b/jackrabbit-jcr-tests/pom.xml index 1dee1bf1ba6..9f97b8e5212 100644 --- a/jackrabbit-jcr-tests/pom.xml +++ b/jackrabbit-jcr-tests/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr-tests diff --git a/jackrabbit-jcr2dav/pom.xml b/jackrabbit-jcr2dav/pom.xml index a4b53b43684..195d3a9bd33 100644 --- a/jackrabbit-jcr2dav/pom.xml +++ b/jackrabbit-jcr2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2dav diff --git a/jackrabbit-jcr2spi/pom.xml b/jackrabbit-jcr2spi/pom.xml index b78545fa684..2d5c2cc6233 100644 --- a/jackrabbit-jcr2spi/pom.xml +++ b/jackrabbit-jcr2spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-jcr2spi diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index a4b7dbb7306..8bbf36182d2 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -34,7 +34,7 @@ org.apache.jackrabbit jackrabbit-parent Jackrabbit Parent POM - 2.23.5-beta + 2.23.6-beta-SNAPSHOT pom @@ -47,7 +47,7 @@ scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git scm:git:https://gitbox.apache.org/repos/asf/jackrabbit.git https://github.com/apache/jackrabbit/tree/${project.scm.tag} - jackrabbit-2.23.5-beta + jackrabbit-2.23.4-beta @@ -76,7 +76,7 @@ 0.0 - 1782908526 + 1782909208 3.6.1 diff --git a/jackrabbit-spi-commons/pom.xml b/jackrabbit-spi-commons/pom.xml index 635c9a26c78..361ac21cde7 100644 --- a/jackrabbit-spi-commons/pom.xml +++ b/jackrabbit-spi-commons/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi-commons diff --git a/jackrabbit-spi/pom.xml b/jackrabbit-spi/pom.xml index ed1628be5f7..1128361ca28 100644 --- a/jackrabbit-spi/pom.xml +++ b/jackrabbit-spi/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi diff --git a/jackrabbit-spi2dav/pom.xml b/jackrabbit-spi2dav/pom.xml index 556ce033064..ef70fbeda1e 100644 --- a/jackrabbit-spi2dav/pom.xml +++ b/jackrabbit-spi2dav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2dav diff --git a/jackrabbit-spi2jcr/pom.xml b/jackrabbit-spi2jcr/pom.xml index f91c2519f98..d5e6e13a475 100644 --- a/jackrabbit-spi2jcr/pom.xml +++ b/jackrabbit-spi2jcr/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-spi2jcr diff --git a/jackrabbit-standalone-components/pom.xml b/jackrabbit-standalone-components/pom.xml index 9a92e3a7504..182f448f031 100644 --- a/jackrabbit-standalone-components/pom.xml +++ b/jackrabbit-standalone-components/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone-components diff --git a/jackrabbit-standalone/pom.xml b/jackrabbit-standalone/pom.xml index e792980fcf1..f72d39b21b9 100644 --- a/jackrabbit-standalone/pom.xml +++ b/jackrabbit-standalone/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-standalone diff --git a/jackrabbit-vfs-ext/pom.xml b/jackrabbit-vfs-ext/pom.xml index 7cb97158954..d496581dcdf 100644 --- a/jackrabbit-vfs-ext/pom.xml +++ b/jackrabbit-vfs-ext/pom.xml @@ -20,7 +20,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-vfs-ext diff --git a/jackrabbit-webapp/pom.xml b/jackrabbit-webapp/pom.xml index 6ae9c2f7c61..528ff63baef 100644 --- a/jackrabbit-webapp/pom.xml +++ b/jackrabbit-webapp/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webapp diff --git a/jackrabbit-webdav/pom.xml b/jackrabbit-webdav/pom.xml index 404f40e9f72..468a93f378e 100644 --- a/jackrabbit-webdav/pom.xml +++ b/jackrabbit-webdav/pom.xml @@ -26,7 +26,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT ../jackrabbit-parent/pom.xml jackrabbit-webdav diff --git a/pom.xml b/pom.xml index 9ea21858c72..00b7d8ab163 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.apache.jackrabbit jackrabbit-parent - 2.23.5-beta + 2.23.6-beta-SNAPSHOT jackrabbit-parent/pom.xml From 1860b1a31dc96c116fe0e3716b6aa40f7ebd1963 Mon Sep 17 00:00:00 2001 From: Julian Reschke Date: Wed, 15 Jul 2026 06:19:39 +0200 Subject: [PATCH 170/171] JCR-5253: Update Jackrabbit Trunk to Oak 2.4.0 (#362) --- jackrabbit-parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jackrabbit-parent/pom.xml b/jackrabbit-parent/pom.xml index 8bbf36182d2..9c888e264e3 100644 --- a/jackrabbit-parent/pom.xml +++ b/jackrabbit-parent/pom.xml @@ -55,7 +55,7 @@ ${test.opts.modules} ${test.opts.coverage} ${test.opts.memory} -enableassertions - 2.2.0 + 2.4.0 1.22.24 9.4.58.v20250814 From 72b1c41a85775fa120a5644c0a41423f109fc8f9 Mon Sep 17 00:00:00 2001 From: Jarek Potiuk Date: Wed, 15 Jul 2026 12:45:57 +0200 Subject: [PATCH 171/171] Wire threat model for agent discoverability + rename to THREAT_MODEL.md Adds AGENTS.md (## Security pointer) + SECURITY.md wiring the conventional AGENTS.md -> SECURITY.md -> THREAT_MODEL.md chain, and renames the PMC-merged draft-THREAT-MODEL.md to the canonical THREAT_MODEL.md (no longer a draft; matches the discoverable convention). No model content changes. Generated-by: Claude Code (Claude Opus 4.8) --- AGENTS.md | 13 +++++++++ SECURITY.md | 34 ++++++++++++++++++++++++ draft-THREAT-MODEL.md => THREAT_MODEL.md | 0 3 files changed, 47 insertions(+) create mode 100644 AGENTS.md create mode 100644 SECURITY.md rename draft-THREAT-MODEL.md => THREAT_MODEL.md (100%) diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000000..ea0f93f6d9b --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,13 @@ +# Agent guidance + +This file is read by automated agents (security scanners, code +analyzers, AI assistants) operating on this repository. It points +them at the human-authored references they should consult before +producing output. + +## Security + +Security model: [SECURITY.md](./SECURITY.md) + +Agents that scan this repository should consult `SECURITY.md` and the +threat model it links before reporting issues. diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000000..f249256a0e7 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,34 @@ + + +# Security Policy + +## Reporting a Vulnerability + +Apache Jackrabbit follows the [Apache Software Foundation security +process](https://www.apache.org/security/). Please report suspected +vulnerabilities privately to `security@apache.org` (the Jackrabbit PMC +is reachable via `private@jackrabbit.apache.org`). Do not open public +GitHub issues or pull requests for security reports. + +## Threat Model + +What the project treats as in scope and out of scope, the security +properties it provides and disclaims, the adversary model, and how +findings are triaged are documented in [THREAT_MODEL.md](./THREAT_MODEL.md). diff --git a/draft-THREAT-MODEL.md b/THREAT_MODEL.md similarity index 100% rename from draft-THREAT-MODEL.md rename to THREAT_MODEL.md