From 3f8e439fc58d00e3fd342a243d6ad6a0c7b3c32e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 09:22:26 -0400 Subject: [PATCH 001/430] Bump org.apache.camel.springboot:camel-spring-boot-dependencies (#1965) Bumps org.apache.camel.springboot:camel-spring-boot-dependencies from 4.6.0 to 4.7.0. --- updated-dependencies: - dependency-name: org.apache.camel.springboot:camel-spring-boot-dependencies dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 4764fae6606..4bd2ac1a4b0 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -51,7 +51,7 @@ 2.2.224 5.13.1.Final 2.6.7 - 4.6.0 + 4.7.0 From 8f764c36754fb57fbd9657f630ffea7576871b06 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 09:22:40 -0400 Subject: [PATCH 002/430] Bump org.apache.maven.plugins:maven-release-plugin from 3.1.0 to 3.1.1 (#1964) Bumps [org.apache.maven.plugins:maven-release-plugin](https://github.com/apache/maven-release) from 3.1.0 to 3.1.1. - [Release notes](https://github.com/apache/maven-release/releases) - [Commits](https://github.com/apache/maven-release/compare/maven-release-3.1.0...maven-release-3.1.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-release-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 5d8c4ebe969..7a11be6304a 100644 --- a/pom.xml +++ b/pom.xml @@ -460,7 +460,7 @@ org.apache.maven.plugins maven-release-plugin - 3.1.0 + 3.1.1 false ${preparationGoals} From 9cdc5e53db22c0362ed63080fe82399adc06f2b2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 15 Jul 2024 09:22:53 -0400 Subject: [PATCH 003/430] Bump github/codeql-action from 3.25.11 to 3.25.12 (#1963) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.11 to 3.25.12. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/b611370bb5703a7efb587f9d136a52ea24c5c38c...4fa2a7953630fd2f3fb380f21be14ede0169dd4f) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 5f738fef966..06ac7f285f6 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@b611370bb5703a7efb587f9d136a52ea24c5c38c # v3.25.11 + uses: github/codeql-action/init@4fa2a7953630fd2f3fb380f21be14ede0169dd4f # v3.25.12 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b611370bb5703a7efb587f9d136a52ea24c5c38c # v3.25.11 + uses: github/codeql-action/analyze@4fa2a7953630fd2f3fb380f21be14ede0169dd4f # v3.25.12 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index c37b7cc8ee2..30df946aaf4 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@b611370bb5703a7efb587f9d136a52ea24c5c38c #tag=v2 + uses: github/codeql-action/upload-sarif@4fa2a7953630fd2f3fb380f21be14ede0169dd4f #tag=v2 with: sarif_file: results.sarif From d1b00ae6b906c7511a176e50775e97a7d9f043cc Mon Sep 17 00:00:00 2001 From: Colm O hEigeartaigh Date: Tue, 16 Jul 2024 10:07:51 +0100 Subject: [PATCH 004/430] Updatonig Artemis to 2.35.0 (#1967) --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 6a9ca23e43d..5ef005ca1c6 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -87,7 +87,7 @@ [2,3) - 2.31.2 + 2.35.0 2.12.3 1.8.0.Final 3.0.2.Final From 4ad78c7c98c13aa5479e21fef066b9e0826691dc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 07:51:00 -0400 Subject: [PATCH 005/430] Bump com.h2database:h2 from 2.2.224 to 2.3.230 (#1968) Bumps [com.h2database:h2](https://github.com/h2database/h2database) from 2.2.224 to 2.3.230. - [Release notes](https://github.com/h2database/h2database/releases) - [Commits](https://github.com/h2database/h2database/compare/version-2.2.224...version-2.3.230) --- updated-dependencies: - dependency-name: com.h2database:h2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 4bd2ac1a4b0..8684d7eed31 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -48,7 +48,7 @@ 3.4.0 2.1 2.31.0 - 2.2.224 + 2.3.230 5.13.1.Final 2.6.7 4.7.0 From 9a2d336431012af73a432c073e91851504f000ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jul 2024 07:51:37 -0400 Subject: [PATCH 006/430] Bump org.apache.maven.plugins:maven-project-info-reports-plugin (#1969) Bumps [org.apache.maven.plugins:maven-project-info-reports-plugin](https://github.com/apache/maven-project-info-reports-plugin) from 3.6.1 to 3.6.2. - [Commits](https://github.com/apache/maven-project-info-reports-plugin/compare/maven-project-info-reports-plugin-3.6.1...maven-project-info-reports-plugin-3.6.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-project-info-reports-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 7a11be6304a..938125bb097 100644 --- a/pom.xml +++ b/pom.xml @@ -564,7 +564,7 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.6.1 + 3.6.2 org.apache.maven.plugins @@ -756,7 +756,7 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.6.1 + 3.6.2 false From 9e8aee89845f16952dddf855b4d5f0159d189348 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 16 Jul 2024 12:46:45 -0400 Subject: [PATCH 007/430] Update Apache Tomcat to 10.1.26 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 8684d7eed31..0103da8410a 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -38,7 +38,7 @@ 4.5.14 5.17.14 2.9.1 - 10.1.25 + 10.1.26 4.0.3.Final 2.11.0 9.11.1 diff --git a/parent/pom.xml b/parent/pom.xml index 5ef005ca1c6..56442a0d402 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -221,7 +221,7 @@ 5.17.14 2.2.22 2.9.1 - 10.1.25 + 10.1.26 1.8 2.3.14.Final 3.0.3 From 00cf7b3974b4be5fcf3e34b080ab7e4d8518ef82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:17:25 -0400 Subject: [PATCH 008/430] Bump org.owasp:dependency-check-maven from 10.0.2 to 10.0.3 (#1971) Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 10.0.2 to 10.0.3. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v10.0.2...v10.0.3) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 938125bb097..2ea33496797 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 17 UTF-8 scp://people.apache.org/www/cxf.apache.org/maven-site - 10.0.2 + 10.0.3 clean install From 2d7a1d2b158f13efd87b75d7b4959730d4968f91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 17 Jul 2024 10:17:40 -0400 Subject: [PATCH 009/430] Bump cxf.undertow.version from 2.3.14.Final to 2.3.15.Final (#1970) Bumps `cxf.undertow.version` from 2.3.14.Final to 2.3.15.Final. Updates `io.undertow:undertow-core` from 2.3.14.Final to 2.3.15.Final - [Release notes](https://github.com/undertow-io/undertow/releases) - [Commits](https://github.com/undertow-io/undertow/compare/2.3.14.Final...2.3.15.Final) Updates `io.undertow:undertow-servlet` from 2.3.14.Final to 2.3.15.Final - [Release notes](https://github.com/undertow-io/undertow/releases) - [Commits](https://github.com/undertow-io/undertow/compare/2.3.14.Final...2.3.15.Final) --- updated-dependencies: - dependency-name: io.undertow:undertow-core dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.undertow:undertow-servlet dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 56442a0d402..4870f300110 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -223,7 +223,7 @@ 2.9.1 10.1.26 1.8 - 2.3.14.Final + 2.3.15.Final 3.0.3 true UTF-8 - 3.3.1 + 3.3.2 4.1.3 12.0.11 4.1.111.Final diff --git a/parent/pom.xml b/parent/pom.xml index 4870f300110..688293ea35b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -212,7 +212,7 @@ 2.0.13 2.2 2.3_2 - 3.3.1 + 3.3.2 3.2.4 spring-test 6.3.1 From 6b31ab01eaf234411503d781b42b7828d85a2cb6 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 19 Jul 2024 17:18:09 -0400 Subject: [PATCH 012/430] CXF-9037: NPE when using com.ctc.wstx.returnNullForDefaultNamespace=true (#1962) * CXF-9037: NPE when using com.ctc.wstx.returnNullForDefaultNamespace=true * Address code review comments --- .../org/apache/cxf/staxutils/StaxSource.java | 5 +++ .../apache/cxf/staxutils/StaxUtilsTest.java | 37 +++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/core/src/main/java/org/apache/cxf/staxutils/StaxSource.java b/core/src/main/java/org/apache/cxf/staxutils/StaxSource.java index f74058406d8..2416d5596b9 100644 --- a/core/src/main/java/org/apache/cxf/staxutils/StaxSource.java +++ b/core/src/main/java/org/apache/cxf/staxutils/StaxSource.java @@ -142,6 +142,11 @@ protected void parse() throws SAXException { if (nsUri == null) { nsUri = ""; } + // see please "com.ctc.wstx.returnNullForDefaultNamespace" property + if (nsPrefix == null) { + nsPrefix = ""; + } + contentHandler.startPrefixMapping(nsPrefix, nsUri); } contentHandler.startElement(uri == null ? "" : uri, localName, qname, getAttributes()); diff --git a/core/src/test/java/org/apache/cxf/staxutils/StaxUtilsTest.java b/core/src/test/java/org/apache/cxf/staxutils/StaxUtilsTest.java index 1e97337c754..d2272da7b4d 100644 --- a/core/src/test/java/org/apache/cxf/staxutils/StaxUtilsTest.java +++ b/core/src/test/java/org/apache/cxf/staxutils/StaxUtilsTest.java @@ -25,6 +25,7 @@ import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; +import java.nio.charset.StandardCharsets; import javax.xml.namespace.QName; import javax.xml.parsers.DocumentBuilderFactory; @@ -47,11 +48,14 @@ import org.xml.sax.InputSource; +import com.ctc.wstx.stax.WstxInputFactory; + import org.apache.cxf.helpers.DOMUtils; import org.apache.cxf.helpers.IOUtils; import org.junit.Test; +import static org.hamcrest.CoreMatchers.startsWith; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertEquals; @@ -242,6 +246,39 @@ public void testEmptyNamespace() throws Exception { cycleString(testString); } + + @Test + public void testNullForDefaultNamespace() throws Exception { + final String bodyXml = "\n" + + "\n" + + " \n" + + " \n" + + " <<<<<\n" + + " \n" + + " \n" + + "\n"; + + try (ByteArrayInputStream in = new ByteArrayInputStream(bodyXml.getBytes(StandardCharsets.UTF_8))) { + final WstxInputFactory factory = new WstxInputFactory(); + factory.setProperty("com.ctc.wstx.returnNullForDefaultNamespace", "true"); + + final Source beforeSource = new StaxSource(factory.createXMLStreamReader(in)); + StringWriter writer = new StringWriter(); + StreamResult result = new StreamResult(writer); + + TransformerFactory tf = TransformerFactory.newInstance(); + + Transformer transformer = tf.newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty(OutputKeys.STANDALONE, "yes"); + transformer.setOutputProperty(OutputKeys.CDATA_SECTION_ELEMENTS, "Q{http://test.com/test}reqBody"); + transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "4"); + + transformer.transform(beforeSource, result); + assertThat(writer.toString(), startsWith("")); + } + } + private void cycleString(String s) throws Exception { StringReader reader = new StringReader(s); DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); From f73955b83dbdf3830d3250cb56d7ee05b324890d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 08:41:19 -0400 Subject: [PATCH 013/430] Bump cxf.netty.version from 4.1.111.Final to 4.1.112.Final (#1973) Bumps `cxf.netty.version` from 4.1.111.Final to 4.1.112.Final. Updates `io.netty:netty-codec-http` from 4.1.111.Final to 4.1.112.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.111.Final...netty-4.1.112.Final) Updates `io.netty:netty-codec-http2` from 4.1.111.Final to 4.1.112.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.111.Final...netty-4.1.112.Final) Updates `io.netty:netty-codec-socks` from 4.1.111.Final to 4.1.112.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.111.Final...netty-4.1.112.Final) Updates `io.netty:netty-handler-proxy` from 4.1.111.Final to 4.1.112.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.111.Final...netty-4.1.112.Final) --- updated-dependencies: - dependency-name: io.netty:netty-codec-http dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.netty:netty-codec-http2 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.netty:netty-codec-socks dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.netty:netty-handler-proxy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 389052e9a10..437503e30ac 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -34,7 +34,7 @@ 3.3.2 4.1.3 12.0.11 - 4.1.111.Final + 4.1.112.Final 4.5.14 5.17.14 2.9.1 diff --git a/parent/pom.xml b/parent/pom.xml index 688293ea35b..ead1fc4cfb3 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -187,7 +187,7 @@ 2022.7 3.2.0 [4,5) - 4.1.111.Final + 4.1.112.Final 2.0.46.Final 2.0.12 3.2.2 From 399a5e8bd55d1e98cf236058a6cff9b41560c64e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 09:12:59 -0400 Subject: [PATCH 014/430] Bump github/codeql-action from 3.25.12 to 3.25.13 (#1974) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.12 to 3.25.13. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/4fa2a7953630fd2f3fb380f21be14ede0169dd4f...2d790406f505036ef40ecba973cc774a50395aac) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 06ac7f285f6..70b0d91c515 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@4fa2a7953630fd2f3fb380f21be14ede0169dd4f # v3.25.12 + uses: github/codeql-action/init@2d790406f505036ef40ecba973cc774a50395aac # v3.25.13 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@4fa2a7953630fd2f3fb380f21be14ede0169dd4f # v3.25.12 + uses: github/codeql-action/analyze@2d790406f505036ef40ecba973cc774a50395aac # v3.25.13 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 30df946aaf4..e4c9049cf8e 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@4fa2a7953630fd2f3fb380f21be14ede0169dd4f #tag=v2 + uses: github/codeql-action/upload-sarif@2d790406f505036ef40ecba973cc774a50395aac #tag=v2 with: sarif_file: results.sarif From c339ddf6350b6fbdcfdeebb403322f3c621d5073 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 22 Jul 2024 09:13:31 -0400 Subject: [PATCH 015/430] Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.7.0 to 3.8.0 (#1975) Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.7.0 to 3.8.0. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.7.0...maven-javadoc-plugin-3.8.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index ead1fc4cfb3..ae3055d8670 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -2003,7 +2003,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.7.0 + 3.8.0 org.ehcache diff --git a/pom.xml b/pom.xml index 2ea33496797..20be5c6e724 100644 --- a/pom.xml +++ b/pom.xml @@ -472,7 +472,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.7.0 + 3.8.0 true ${cxf.jdk.version} From 60273e60cbd10d75c36aa2dd712d49c04bbe5b28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 08:25:15 -0400 Subject: [PATCH 016/430] Bump cxf.wiremock.version from 3.8.0 to 3.9.0 (#1976) Bumps `cxf.wiremock.version` from 3.8.0 to 3.9.0. Updates `org.wiremock:wiremock-standalone` from 3.8.0 to 3.9.0 - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.8.0...3.9.0) Updates `org.wiremock:wiremock-jetty12` from 3.8.0 to 3.9.0 - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.8.0...3.9.0) --- updated-dependencies: - dependency-name: org.wiremock:wiremock-standalone dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.wiremock:wiremock-jetty12 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index ae3055d8670..434f2015ea3 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -232,7 +232,7 @@ 3.0.2 2.3 2.0.0 - 3.8.0 + 3.9.0 7.0.0 4.2.1 1.6.3 From fafb226d98d7cb797c0831c532e667c17c2950db Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 23 Jul 2024 08:25:39 -0400 Subject: [PATCH 017/430] Bump org.eclipse.persistence:org.eclipse.persistence.moxy (#1977) Bumps [org.eclipse.persistence:org.eclipse.persistence.moxy](https://github.com/eclipse-ee4j/eclipselink) from 4.0.3 to 4.0.4. - [Release notes](https://github.com/eclipse-ee4j/eclipselink/releases) - [Commits](https://github.com/eclipse-ee4j/eclipselink/compare/4.0.3...4.0.4) --- updated-dependencies: - dependency-name: org.eclipse.persistence:org.eclipse.persistence.moxy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 434f2015ea3..e299574fb94 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -2046,7 +2046,7 @@ org.eclipse.persistence org.eclipse.persistence.moxy - 4.0.3 + 4.0.4 provided true From c49fc2d35b229860ae17c2cccd16469d549d8d82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jul 2024 09:24:37 -0400 Subject: [PATCH 018/430] Bump cxf.hazelcast.version from 5.4.0 to 5.5.0 (#1980) Bumps `cxf.hazelcast.version` from 5.4.0 to 5.5.0. Updates `com.hazelcast:hazelcast` from 5.4.0 to 5.5.0 - [Release notes](https://github.com/hazelcast/hazelcast/releases) - [Commits](https://github.com/hazelcast/hazelcast/commits) Updates `com.hazelcast:hazelcast-spring` from 5.4.0 to 5.5.0 - [Release notes](https://github.com/hazelcast/hazelcast/releases) - [Commits](https://github.com/hazelcast/hazelcast/commits) --- updated-dependencies: - dependency-name: com.hazelcast:hazelcast dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: com.hazelcast:hazelcast-spring dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index e299574fb94..06541e89244 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -120,7 +120,7 @@ 2.0.1 32.1.3-jre 2.2 - 5.4.0 + 5.5.0 6.5.2.Final 8.0.1.Final 2.7.3 From 1e008f16c857d712f7167823fbf5a94b87779d3a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jul 2024 17:31:13 -0400 Subject: [PATCH 019/430] Bump cxf.wiremock.version from 3.9.0 to 3.9.1 (#1979) Bumps `cxf.wiremock.version` from 3.9.0 to 3.9.1. Updates `org.wiremock:wiremock-standalone` from 3.9.0 to 3.9.1 - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.9.0...3.9.1) Updates `org.wiremock:wiremock-jetty12` from 3.9.0 to 3.9.1 - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.9.0...3.9.1) --- updated-dependencies: - dependency-name: org.wiremock:wiremock-standalone dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.wiremock:wiremock-jetty12 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 06541e89244..bd5c9ea40bf 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -232,7 +232,7 @@ 3.0.2 2.3 2.0.0 - 3.9.0 + 3.9.1 7.0.0 4.2.1 1.6.3 From 81a3dc73acf4bb5ec52099ab65137662984dea85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 07:25:55 -0400 Subject: [PATCH 020/430] Bump ossf/scorecard-action from 2.3.3 to 2.4.0 (#1981) Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.3.3 to 2.4.0. - [Release notes](https://github.com/ossf/scorecard-action/releases) - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) - [Commits](https://github.com/ossf/scorecard-action/compare/dc50aa9510b46c811795eb24b2f1ba02a914e534...62b2cac7ed8198b15735ed49ab1e5cf35480ba46) --- updated-dependencies: - dependency-name: ossf/scorecard-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecards.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index e4c9049cf8e..fd9e6a201a8 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -30,7 +30,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@dc50aa9510b46c811795eb24b2f1ba02a914e534 #tag=2.3.3 + uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 #tag=2.4.0 with: results_file: results.sarif results_format: sarif From 6c9b93929d03ffe7eb84f82f93e021ae3b05f64a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Jul 2024 13:12:35 -0400 Subject: [PATCH 021/430] Bump github/codeql-action from 3.25.13 to 3.25.15 (#1982) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.13 to 3.25.15. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/2d790406f505036ef40ecba973cc774a50395aac...afb54ba388a7dca6ecae48f608c4ff05ff4cc77a) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 70b0d91c515..6dc48fe1165 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@2d790406f505036ef40ecba973cc774a50395aac # v3.25.13 + uses: github/codeql-action/init@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a # v3.25.15 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@2d790406f505036ef40ecba973cc774a50395aac # v3.25.13 + uses: github/codeql-action/analyze@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a # v3.25.15 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index fd9e6a201a8..d238fdd22a0 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@2d790406f505036ef40ecba973cc774a50395aac #tag=v2 + uses: github/codeql-action/upload-sarif@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a #tag=v2 with: sarif_file: results.sarif From 6b44a9bc855ab85e98114f547c6cfed4bbd9bde3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 30 Jul 2024 18:44:37 -0400 Subject: [PATCH 022/430] Bump org.asynchttpclient:async-http-client from 2.12.3 to 3.0.0 (#1985) Bumps [org.asynchttpclient:async-http-client](https://github.com/AsyncHttpClient/async-http-client) from 2.12.3 to 3.0.0. - [Release notes](https://github.com/AsyncHttpClient/async-http-client/releases) - [Changelog](https://github.com/AsyncHttpClient/async-http-client/blob/main/CHANGES.md) - [Commits](https://github.com/AsyncHttpClient/async-http-client/compare/async-http-client-project-2.12.3...async-http-client-project-3.0.0) --- updated-dependencies: - dependency-name: org.asynchttpclient:async-http-client dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index bd5c9ea40bf..d98b75a0eb6 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -88,7 +88,7 @@ 2.35.0 - 2.12.3 + 3.0.0 1.8.0.Final 3.0.2.Final 1.9.22.1 From 7354d9dc679be18723c2906bec45d7555d8dd157 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 30 Jul 2024 18:55:13 -0400 Subject: [PATCH 023/430] Update Jetty to 12.0.12 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 437503e30ac..b1fa164c53a 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -33,7 +33,7 @@ UTF-8 3.3.2 4.1.3 - 12.0.11 + 12.0.12 4.1.112.Final 4.5.14 5.17.14 diff --git a/parent/pom.xml b/parent/pom.xml index d98b75a0eb6..8bec27dcec1 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -161,7 +161,7 @@ 1.1.1 1.0 1.5.4 - 12.0.11 + 12.0.12 ${cxf.jetty12.version} 3.3 2.10.10 From 7c4b82edbbbe2589ac098991d096183718cff929 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 07:20:19 -0400 Subject: [PATCH 024/430] Bump org.eclipse.parsson:parsson from 1.1.6 to 1.1.7 (#1986) Bumps [org.eclipse.parsson:parsson](https://github.com/eclipse-ee4j/parsson) from 1.1.6 to 1.1.7. - [Release notes](https://github.com/eclipse-ee4j/parsson/releases) - [Commits](https://github.com/eclipse-ee4j/parsson/compare/1.1.6...1.1.7) --- updated-dependencies: - dependency-name: org.eclipse.parsson:parsson dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 8bec27dcec1..3f3ec3c8e96 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -195,7 +195,7 @@ 1.26.0-alpha 0.33.0 2.0.27 - 1.1.6 + 1.1.7 3.1.0 4.10.0 3.5.1 From c41b9f553d7a8049036e15bc9396bedeb23e62d4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 31 Jul 2024 08:57:52 -0400 Subject: [PATCH 025/430] Bump com.sun.xml.ws:jaxws-rt from 4.0.2 to 4.0.3 (#1987) Bumps com.sun.xml.ws:jaxws-rt from 4.0.2 to 4.0.3. --- updated-dependencies: - dependency-name: com.sun.xml.ws:jaxws-rt dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- services/wsn/wsn-core/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/wsn/wsn-core/pom.xml b/services/wsn/wsn-core/pom.xml index 52c18425c0c..599d26a5bf7 100644 --- a/services/wsn/wsn-core/pom.xml +++ b/services/wsn/wsn-core/pom.xml @@ -103,7 +103,7 @@ com.sun.xml.ws jaxws-rt - 4.0.2 + 4.0.3 test From dc3bf296e2cb34b302b54b4a965a48267bd992ad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Aug 2024 07:50:23 -0400 Subject: [PATCH 026/430] Bump cxf.hamcrest.version from 2.2 to 3.0 (#1988) Bumps `cxf.hamcrest.version` from 2.2 to 3.0. Updates `org.hamcrest:hamcrest-library` from 2.2 to 3.0 - [Release notes](https://github.com/hamcrest/JavaHamcrest/releases) - [Changelog](https://github.com/hamcrest/JavaHamcrest/blob/master/CHANGES.md) - [Commits](https://github.com/hamcrest/JavaHamcrest/compare/v2.2...v3.0) Updates `org.hamcrest:hamcrest-core` from 2.2 to 3.0 - [Release notes](https://github.com/hamcrest/JavaHamcrest/releases) - [Changelog](https://github.com/hamcrest/JavaHamcrest/blob/master/CHANGES.md) - [Commits](https://github.com/hamcrest/JavaHamcrest/compare/v2.2...v3.0) --- updated-dependencies: - dependency-name: org.hamcrest:hamcrest-library dependency-type: direct:production update-type: version-update:semver-major - dependency-name: org.hamcrest:hamcrest-core dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 3f3ec3c8e96..bab657ab905 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -119,7 +119,7 @@ 4.0.2 2.0.1 32.1.3-jre - 2.2 + 3.0 5.5.0 6.5.2.Final 8.0.1.Final From 0740778cbc6e159a99a3811113b71440dd841236 Mon Sep 17 00:00:00 2001 From: Kaiyao Ke <47203510+kaiyaok2@users.noreply.github.com> Date: Fri, 2 Aug 2024 21:35:00 +0800 Subject: [PATCH 027/430] [CXF-9042] Fixed non-idempotent unit tests (#1978) * fixed non-idempotent unit tests * updated MBeans unregistering * create new document when creating token wrapper --- .../InstrumentationManagerTest.java | 37 +++++++++++-------- .../ValidateJWTTransformationTest.java | 2 +- .../dispatch/DispatchClientServerTest.java | 15 +++++--- 3 files changed, 32 insertions(+), 22 deletions(-) diff --git a/rt/management/src/test/java/org/apache/cxf/management/InstrumentationManagerTest.java b/rt/management/src/test/java/org/apache/cxf/management/InstrumentationManagerTest.java index 39ab81ac2da..5e0a1366131 100644 --- a/rt/management/src/test/java/org/apache/cxf/management/InstrumentationManagerTest.java +++ b/rt/management/src/test/java/org/apache/cxf/management/InstrumentationManagerTest.java @@ -89,23 +89,30 @@ public void testWorkQueueInstrumentation() throws Exception { ObjectName name = new ObjectName(ManagementConstants.DEFAULT_DOMAIN_NAME + ":type=WorkQueues,*"); Set s = mbs.queryNames(name, null); - assertEquals(2, s.size()); - Iterator it = s.iterator(); - while (it.hasNext()) { - ObjectName n = it.next(); - Long result = - (Long)mbs.invoke(n, "getWorkQueueMaxSize", new Object[0], new String[0]); - assertEquals(result, Long.valueOf(256)); - Integer hwm = - (Integer)mbs.invoke(n, "getHighWaterMark", new Object[0], new String[0]); - if (n.getCanonicalName().contains("test-wq")) { - assertEquals(10, hwm.intValue()); - } else { - assertEquals(15, hwm.intValue()); + try { + assertEquals(2, s.size()); + Iterator it = s.iterator(); + while (it.hasNext()) { + ObjectName n = it.next(); + Long result = + (Long)mbs.invoke(n, "getWorkQueueMaxSize", new Object[0], new String[0]); + assertEquals(result, Long.valueOf(256)); + Integer hwm = + (Integer)mbs.invoke(n, "getHighWaterMark", new Object[0], new String[0]); + if (n.getCanonicalName().contains("test-wq")) { + assertEquals(10, hwm.intValue()); + } else { + assertEquals(15, hwm.intValue()); + } } + } finally { + // Unregister MBeans at the end of the test + Iterator it2 = s.iterator(); + while (it2.hasNext()) { + mbs.unregisterMBean(it2.next()); + } + bus.shutdown(true); } - - bus.shutdown(true); } @Test diff --git a/services/sts/sts-core/src/test/java/org/apache/cxf/sts/operation/ValidateJWTTransformationTest.java b/services/sts/sts-core/src/test/java/org/apache/cxf/sts/operation/ValidateJWTTransformationTest.java index 59f19e40dde..765269b2f39 100644 --- a/services/sts/sts-core/src/test/java/org/apache/cxf/sts/operation/ValidateJWTTransformationTest.java +++ b/services/sts/sts-core/src/test/java/org/apache/cxf/sts/operation/ValidateJWTTransformationTest.java @@ -338,7 +338,7 @@ public void testSAMLToJWTTransformation() throws Exception { } private Element createTokenWrapper(String token) { - Document doc = DOMUtils.getEmptyDocument(); + Document doc = DOMUtils.createDocument(); Element tokenWrapper = doc.createElementNS(null, "TokenWrapper"); tokenWrapper.setTextContent(token); return tokenWrapper; diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerTest.java index 1cb5bb01e83..0928d00c4d8 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerTest.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/dispatch/DispatchClientServerTest.java @@ -659,6 +659,11 @@ private void doJAXBPayload(Dispatch disp) throws Exception { @Test public void testJAXBObjectPAYLOADWithFeature() throws Exception { + // Save initial counts + int initialCount = TestDispatchFeature.getCount(); + int initialInInterceptorCount = TestDispatchFeature.getInInterceptorCount(); + int initialOutInterceptorCount = TestDispatchFeature.getOutInterceptorCount(); + createBus("org/apache/cxf/systest/dispatch/client-config.xml"); BusFactory.setThreadDefaultBus(bus); @@ -688,15 +693,13 @@ public void testJAXBObjectPAYLOADWithFeature() throws Exception { String responseValue = ((GreetMeResponse)response).getResponseType(); assertEquals("Expected string, " + expected, expected, responseValue); - assertEquals("Feature should be applied", 1, TestDispatchFeature.getCount()); + assertEquals("Feature should be applied", initialCount + 1, TestDispatchFeature.getCount()); assertEquals("Feature based interceptors should be added", - 1, TestDispatchFeature.getCount()); - + initialCount + 1, TestDispatchFeature.getCount()); assertEquals("Feature based In interceptors has be added to in chain.", - 1, TestDispatchFeature.getInInterceptorCount()); - + initialInInterceptorCount + 1, TestDispatchFeature.getInInterceptorCount()); assertEquals("Feature based interceptors has to be added to out chain.", - 1, TestDispatchFeature.getOutInterceptorCount()); + initialOutInterceptorCount + 1, TestDispatchFeature.getOutInterceptorCount()); bus.shutdown(true); } From 7878e61a54d3bb3f9b9cefa2323807addb984da9 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 2 Aug 2024 10:36:02 -0400 Subject: [PATCH 028/430] Update Jackson to 2.17.2 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index bab657ab905..382c3455e89 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -131,7 +131,7 @@ 4.4.16 5.2.1 5.2.4 - 2.17.1 + 2.17.2 2.17.2 3.9 1.8.1 From 886b22bafaf11aa0333e7854028a5766422975a6 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 2 Aug 2024 10:36:36 -0400 Subject: [PATCH 029/430] Update Apache HttpClient5 to 5.3.1 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 382c3455e89..d2399f519dc 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -129,7 +129,7 @@ 4.5.14 [4.3,4.5.0) 4.4.16 - 5.2.1 + 5.3.1 5.2.4 2.17.2 2.17.2 From b1897c8d0cb1539d3e63c48512be6b40824de68b Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 2 Aug 2024 10:37:03 -0400 Subject: [PATCH 030/430] Update Apache HttpCore5 to 5.2.5 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index d2399f519dc..4304dc181a3 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -130,7 +130,7 @@ [4.3,4.5.0) 4.4.16 5.3.1 - 5.2.4 + 5.2.5 2.17.2 2.17.2 3.9 From 1dfc5df495acdab16ef48597719963d4c4adf75e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:56:52 -0400 Subject: [PATCH 031/430] Bump actions/upload-artifact from 4.3.4 to 4.3.5 (#1990) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.4 to 4.3.5. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/0b2256b8c012f0828dc542b3febcab082c67f72b...89ef406dd8d7e03cfd12d9e0a4a378f454709029) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecards.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index d238fdd22a0..19aeb1abaf0 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -49,7 +49,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@0b2256b8c012f0828dc542b3febcab082c67f72b # tag=v4.3.4 + uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # tag=v4.3.5 with: name: SARIF file path: results.sarif From d42c41e14eb09f4d23f25ebbacc2974aa21e4aaa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Aug 2024 11:57:04 -0400 Subject: [PATCH 032/430] Bump org.cyclonedx:cyclonedx-maven-plugin from 2.8.0 to 2.8.1 (#1991) Bumps [org.cyclonedx:cyclonedx-maven-plugin](https://github.com/CycloneDX/cyclonedx-maven-plugin) from 2.8.0 to 2.8.1. - [Release notes](https://github.com/CycloneDX/cyclonedx-maven-plugin/releases) - [Commits](https://github.com/CycloneDX/cyclonedx-maven-plugin/compare/cyclonedx-maven-plugin-2.8.0...cyclonedx-maven-plugin-2.8.1) --- updated-dependencies: - dependency-name: org.cyclonedx:cyclonedx-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 20be5c6e724..0de9c298e03 100644 --- a/pom.xml +++ b/pom.xml @@ -706,7 +706,7 @@ org.cyclonedx cyclonedx-maven-plugin - 2.8.0 + 2.8.1 make-bom From 6cad549a732245d3caff16cc09cd8dfe6979c33a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Aug 2024 07:17:26 -0400 Subject: [PATCH 033/430] Bump org.eclipse:yasson from 3.0.3 to 3.0.4 (#1992) Bumps [org.eclipse:yasson](https://github.com/eclipse-ee4j/yasson) from 3.0.3 to 3.0.4. - [Release notes](https://github.com/eclipse-ee4j/yasson/releases) - [Commits](https://github.com/eclipse-ee4j/yasson/compare/3.0.3...3.0.4) --- updated-dependencies: - dependency-name: org.eclipse:yasson dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 4304dc181a3..b6d52091eb0 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -224,7 +224,7 @@ 10.1.26 1.8 2.3.15.Final - 3.0.3 + 3.0.4 From b358f81708dbec95437f04be280fa0782b387f70 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 05:57:36 -0400 Subject: [PATCH 034/430] Bump cxf.slf4j.version from 2.0.13 to 2.0.14 (#1993) Bumps `cxf.slf4j.version` from 2.0.13 to 2.0.14. Updates `org.slf4j:slf4j-jdk14` from 2.0.13 to 2.0.14 Updates `org.slf4j:jcl-over-slf4j` from 2.0.13 to 2.0.14 Updates `org.slf4j:slf4j-api` from 2.0.13 to 2.0.14 Updates `org.slf4j:slf4j-log4j12` from 2.0.13 to 2.0.14 Updates `org.slf4j:slf4j-nop` from 2.0.13 to 2.0.14 Updates `org.slf4j:jul-to-slf4j` from 2.0.13 to 2.0.14 --- updated-dependencies: - dependency-name: org.slf4j:slf4j-jdk14 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:jcl-over-slf4j dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-api dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-log4j12 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-nop dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.slf4j:jul-to-slf4j dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index b6d52091eb0..932250c21e1 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -209,7 +209,7 @@ jakarta.servlet-api jakarta.servlet 6.0.0 - 2.0.13 + 2.0.14 2.2 2.3_2 3.3.2 From 85f42a3e41aea65a22996f339ec29fb90117e5d6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Aug 2024 05:58:01 -0400 Subject: [PATCH 035/430] Bump org.codehaus.mojo:exec-maven-plugin from 3.3.0 to 3.4.0 (#1994) Bumps [org.codehaus.mojo:exec-maven-plugin](https://github.com/mojohaus/exec-maven-plugin) from 3.3.0 to 3.4.0. - [Release notes](https://github.com/mojohaus/exec-maven-plugin/releases) - [Commits](https://github.com/mojohaus/exec-maven-plugin/compare/3.3.0...3.4.0) --- updated-dependencies: - dependency-name: org.codehaus.mojo:exec-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index b1fa164c53a..98ed9adad3a 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -207,7 +207,7 @@ org.codehaus.mojo exec-maven-plugin - 3.3.0 + 3.4.0 org.apache.felix From 6b62d3de04966cdc3f23096eed4f772afdcc560c Mon Sep 17 00:00:00 2001 From: Jamie Goodyear Date: Thu, 8 Aug 2024 13:35:49 -0230 Subject: [PATCH 036/430] [CXF-9045 Update client and server to accept host and protocol] (#1995) * [CXF-9045 Update client and server to accept host and protocol] * Update Readme --- .../samples/performance/jaxrs/README.txt | 6 ++++++ .../release/samples/performance/jaxrs/pom.xml | 16 ++++++++++++++++ .../cxf/performance/https/client/Client.java | 18 ++++++++++++++---- .../cxf/performance/https/server/Server.java | 18 ++++++++++++++---- 4 files changed, 50 insertions(+), 8 deletions(-) diff --git a/distribution/src/main/release/samples/performance/jaxrs/README.txt b/distribution/src/main/release/samples/performance/jaxrs/README.txt index 9cf3f5db3f4..91f48087ccb 100644 --- a/distribution/src/main/release/samples/performance/jaxrs/README.txt +++ b/distribution/src/main/release/samples/performance/jaxrs/README.txt @@ -55,7 +55,13 @@ Alternatively, client and server may be executed from one window. To remove the target dir, run "mvn clean". +The JAX-RS Server takes the following arguments: + -protocol Connection protocol (http, https) + -host Allow server to bind to address (localhost, 0.0.0.0, etc) + The JAX-RS Client takes the following arguments: + -protocol Connection protocol (http, https) + -host Host address client will connect to (localhost, 0.0.0.0, etc) -Operation The rest verb to execute (get, post, put, delete) -Time define the amount of time to spend making invocations in seconds -Threads define the number of threads to run the performance client diff --git a/distribution/src/main/release/samples/performance/jaxrs/pom.xml b/distribution/src/main/release/samples/performance/jaxrs/pom.xml index eac188448dd..d9dbcbff839 100644 --- a/distribution/src/main/release/samples/performance/jaxrs/pom.xml +++ b/distribution/src/main/release/samples/performance/jaxrs/pom.xml @@ -35,6 +35,10 @@ server + + localhost + https + test @@ -49,6 +53,12 @@ org.apache.cxf.performance.https.server.Server + + -host + ${host} + -protocol + ${protocol} + @@ -59,6 +69,8 @@ client + localhost + https get 4 @@ -78,6 +90,10 @@ org.apache.cxf.performance.https.client.Client + -host + ${host} + -protocol + ${protocol} -Operation ${operation} -Threads diff --git a/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/client/Client.java b/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/client/Client.java index de487fda66d..89a144d3153 100644 --- a/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/client/Client.java +++ b/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/client/Client.java @@ -35,12 +35,13 @@ public final class Client extends TestCaseBase { private static final String CLIENT_CONFIG_FILE = "ClientConfig.xml"; - private static final String BASE_SERVICE_URL = - "https://localhost:9000/customerservice/customers"; + private static final String BASE_SERVICE_URL = ":9000/customerservice/customers"; private int opid; private String inputString = new String(); + private String host = "localhost"; + private String protocol = "https"; private final int asciiCount = 1024; public Client(String[] args, boolean warmup) { @@ -54,6 +55,15 @@ public Client(String[] args, boolean warmup) { packetSize = 1; usingTime = true; numberOfThreads = 4; + for (int x = 0; x < args.length; x++) { + if ("-host".equals(args[x])) { + host = args[x + 1]; + x++; + } else if ("-protocol".equals(args[x])) { + protocol = args[x + 1]; + x++; + } + } } @Override @@ -116,9 +126,9 @@ public void doJob(WebClient webClient) { @Override public synchronized WebClient getPort() { if (opid == 0 || opid == 3) { - return WebClient.create(BASE_SERVICE_URL + "/123", CLIENT_CONFIG_FILE); + return WebClient.create(protocol + "://" + host + BASE_SERVICE_URL + "/123", CLIENT_CONFIG_FILE); } else { - return WebClient.create(BASE_SERVICE_URL, CLIENT_CONFIG_FILE); + return WebClient.create(protocol + "://" + host + BASE_SERVICE_URL, CLIENT_CONFIG_FILE); } } diff --git a/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/server/Server.java b/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/server/Server.java index 65aad6106e7..d4e1d46420b 100644 --- a/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/server/Server.java +++ b/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/server/Server.java @@ -34,18 +34,28 @@ public class Server implements Runnable { BusFactory.setDefaultBus(bus); } - protected Server() throws Exception { + protected Server(String[] args) throws Exception { + String host = "localhost"; + String protocol = "https"; + for (int x = 0; x < args.length; x++) { + if ("-host".equals(args[x])) { + host = args[x + 1]; + x++; + } else if ("-protocol".equals(args[x])) { + protocol = args[x + 1]; + x++; + } + } JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setResourceClasses(CustomerServiceImpl.class); sf.setResourceProvider(CustomerServiceImpl.class, new SingletonResourceProvider(new CustomerServiceImpl())); - sf.setAddress("https://localhost:9000/"); - + sf.setAddress(protocol + "://" + host + ":9000/"); sf.create(); } public static void main(String[] args) throws Exception { - Server server = new Server(); + Server server = new Server(args); System.out.println("Server ready..."); boolean wait = true; From 7cdfacdb8840c440cedc23b26e2a15f5d544e9eb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 12:07:12 -0400 Subject: [PATCH 037/430] Bump org.jboss.ws.cxf:jbossws-cxf-client from 7.1.0.Final to 7.2.0.Final (#1996) Bumps org.jboss.ws.cxf:jbossws-cxf-client from 7.1.0.Final to 7.2.0.Final. --- updated-dependencies: - dependency-name: org.jboss.ws.cxf:jbossws-cxf-client dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/ws_transaction/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/ws_transaction/pom.xml b/distribution/src/main/release/samples/ws_transaction/pom.xml index 8836fcab880..7fbefde9294 100644 --- a/distribution/src/main/release/samples/ws_transaction/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/pom.xml @@ -80,7 +80,7 @@ org.jboss.ws.cxf jbossws-cxf-client - 7.1.0.Final + 7.2.0.Final org.apache.cxf From e9a34d5b9c8fe423bfbd192d1461776bac7b972c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Aug 2024 12:07:33 -0400 Subject: [PATCH 038/430] Bump org.awaitility:awaitility from 4.2.0 to 4.2.2 (#1997) Bumps [org.awaitility:awaitility](https://github.com/awaitility/awaitility) from 4.2.0 to 4.2.2. - [Changelog](https://github.com/awaitility/awaitility/blob/master/changelog.txt) - [Commits](https://github.com/awaitility/awaitility/compare/awaitility-4.2.0...awaitility-4.2.2) --- updated-dependencies: - dependency-name: org.awaitility:awaitility dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 932250c21e1..064720fda30 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -276,7 +276,7 @@ 1.2_5 1.1.4c_6 - 4.2.0 + 4.2.2 From cdaac75da63f45e336b4e144a34c7c8bca9ba03d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 07:37:00 -0400 Subject: [PATCH 039/430] Bump cxf.slf4j.version from 2.0.14 to 2.0.15 (#1998) Bumps `cxf.slf4j.version` from 2.0.14 to 2.0.15. Updates `org.slf4j:slf4j-jdk14` from 2.0.14 to 2.0.15 Updates `org.slf4j:jcl-over-slf4j` from 2.0.14 to 2.0.15 Updates `org.slf4j:slf4j-api` from 2.0.14 to 2.0.15 Updates `org.slf4j:slf4j-log4j12` from 2.0.14 to 2.0.15 Updates `org.slf4j:slf4j-nop` from 2.0.14 to 2.0.15 Updates `org.slf4j:jul-to-slf4j` from 2.0.14 to 2.0.15 --- updated-dependencies: - dependency-name: org.slf4j:slf4j-jdk14 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:jcl-over-slf4j dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-api dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-log4j12 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-nop dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.slf4j:jul-to-slf4j dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 064720fda30..c7089a25728 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -209,7 +209,7 @@ jakarta.servlet-api jakarta.servlet 6.0.0 - 2.0.14 + 2.0.15 2.2 2.3_2 3.3.2 From 7c03050adef2195f23826beb6768f25e29b2b1f5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 07:37:28 -0400 Subject: [PATCH 040/430] Bump commons-codec:commons-codec from 1.17.0 to 1.17.1 (#1999) Bumps [commons-codec:commons-codec](https://github.com/apache/commons-codec) from 1.17.0 to 1.17.1. - [Changelog](https://github.com/apache/commons-codec/blob/master/RELEASE-NOTES.txt) - [Commits](https://github.com/apache/commons-codec/compare/rel/commons-codec-1.17.0...rel/commons-codec-1.17.1) --- updated-dependencies: - dependency-name: commons-codec:commons-codec dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index c7089a25728..26c1f6a2709 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -100,7 +100,7 @@ 4.0.1 4.8.25 1.5.1 - 1.17.0 + 1.17.1 2.16.1 2.2.1 3.14.0 From 321e22fabdd42ffb7c0ae4a56de595c8752ddbe1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 9 Aug 2024 07:37:50 -0400 Subject: [PATCH 041/430] Bump org.apache.commons:commons-text from 1.10.0 to 1.12.0 (#2000) Bumps org.apache.commons:commons-text from 1.10.0 to 1.12.0. --- updated-dependencies: - dependency-name: org.apache.commons:commons-text dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 26c1f6a2709..cd950a74b84 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -105,7 +105,7 @@ 2.2.1 3.14.0 1.2 - 1.10.0 + 1.12.0 10.16.1.1 2.1.4 3.2.6 From 432487e9e45c24d9f4fc8246fb92298a0e8db765 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 10 Aug 2024 12:10:43 -0400 Subject: [PATCH 042/430] Upate OpenTelemetry to 1.41.0 Signed-off-by: Andriy Redko --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index cd950a74b84..1b5c31fa131 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -191,7 +191,7 @@ 2.0.46.Final 2.0.12 3.2.2 - 1.40.0 + 1.41.0 1.26.0-alpha 0.33.0 2.0.27 From ef97dffd7abfda6689378fe6ca9fe12b2c61b24c Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 10 Aug 2024 14:59:23 -0400 Subject: [PATCH 043/430] Update Hibernate to 6.6.0.Final --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1b5c31fa131..a4700019a8f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -121,7 +121,7 @@ 32.1.3-jre 3.0 5.5.0 - 6.5.2.Final + 6.6.0.Final 8.0.1.Final 2.7.3 [4.0,4.2) From 5d0af3e1d1b3577dd47604206e01cbf49bad5886 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 11 Aug 2024 10:28:02 -0400 Subject: [PATCH 044/430] Revert "Update Hibernate to 6.6.0.Final" This reverts commit ef97dffd7abfda6689378fe6ca9fe12b2c61b24c. --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index a4700019a8f..1b5c31fa131 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -121,7 +121,7 @@ 32.1.3-jre 3.0 5.5.0 - 6.6.0.Final + 6.5.2.Final 8.0.1.Final 2.7.3 [4.0,4.2) From 324c689a729f0f1e964b3dac8ae019160f8bb2ca Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 11 Aug 2024 12:22:05 -0400 Subject: [PATCH 045/430] CXF-9041: CXF will only accept org.glassfish.jaxb.runtime.v2.ContextFactory (#1989) * CXF-9041: CXF will only accept org.glassfish.jaxb.runtime.v2.ContextFactory * Address code review comment: use JAXBContext.newInstance instead of duplicating the JAXB discovery mechanism --- .../main/java/org/apache/cxf/common/jaxb/JAXBUtils.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java index 448e7c9539f..1aa817177ea 100644 --- a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java +++ b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java @@ -1176,18 +1176,15 @@ private static Object createEscapeHandler(Class cls, String simpleClassName) } return null; } + + @SuppressWarnings({ "deprecation", "removal" }) public static JAXBContext createContext(final Set> classes, final Map map) throws JAXBException { JAXBContext ctx = null; try { ctx = AccessController.doPrivileged(new PrivilegedExceptionAction() { public JAXBContext run() throws Exception { - //This is a workaround for CXF-8675 - Class factoryClass = ClassLoaderUtils.loadClass("org.glassfish.jaxb.runtime.v2.ContextFactory", - JAXBContextCache.class); - Method m = factoryClass.getMethod("createContext", Class[].class, Map.class); - Object context = m.invoke(null, classes.toArray(new Class[0]), map); - return (JAXBContext) context; + return JAXBContext.newInstance(classes.toArray(new Class[0]), map); } }); } catch (PrivilegedActionException e2) { From 8823daa85f8b181062b44796a2a33d87fb1c763c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 07:58:19 -0400 Subject: [PATCH 046/430] Bump actions/setup-java from 4.2.1 to 4.2.2 (#2001) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.2.1 to 4.2.2. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/99b8673ff64fbf99d8d325f52d9a5bdedb8483e9...6a0805fcefea3d4657a47ac4c165951e33482018) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pull-request-build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 6dc48fe1165..f6996554b08 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup JDK 17 - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 + uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 # v4.2.2 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/pull-request-build.yml b/.github/workflows/pull-request-build.yml index 0cf0ddb1f34..019ba445851 100644 --- a/.github/workflows/pull-request-build.yml +++ b/.github/workflows/pull-request-build.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v3.6.0 - name: Set up JDK 17 - uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1 + uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 # v4.2.2 with: java-version: '17' distribution: 'temurin' From c3a5dd869a5f0d9a36778d62326a3f3dffd8c613 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 07:58:33 -0400 Subject: [PATCH 047/430] Bump github/codeql-action from 3.25.15 to 3.26.0 (#2002) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.25.15 to 3.26.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/afb54ba388a7dca6ecae48f608c4ff05ff4cc77a...eb055d739abdc2e8de2e5f4ba1a8b246daa779aa) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index f6996554b08..6a8f42561d8 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a # v3.25.15 + uses: github/codeql-action/init@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a # v3.25.15 + uses: github/codeql-action/analyze@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 19aeb1abaf0..db91c49debc 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@afb54ba388a7dca6ecae48f608c4ff05ff4cc77a #tag=v2 + uses: github/codeql-action/upload-sarif@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa #tag=v2 with: sarif_file: results.sarif From 10048c1322c2a561b216115543d9708bf2bc69c1 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 07:58:46 -0400 Subject: [PATCH 048/430] Bump actions/upload-artifact from 4.3.5 to 4.3.6 (#2003) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.5 to 4.3.6. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/89ef406dd8d7e03cfd12d9e0a4a378f454709029...834a144ee995460fba8ed112a2fc961b36a5ec5a) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecards.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index db91c49debc..c0da6882369 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -49,7 +49,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # tag=v4.3.5 + uses: actions/upload-artifact@834a144ee995460fba8ed112a2fc961b36a5ec5a # tag=v4.3.6 with: name: SARIF file path: results.sarif From 96717fda5668ba3b3730fb8fbd09ab1bf6781bf6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Aug 2024 07:58:58 -0400 Subject: [PATCH 049/430] Bump cxf.slf4j.version from 2.0.15 to 2.0.16 (#2004) Bumps `cxf.slf4j.version` from 2.0.15 to 2.0.16. Updates `org.slf4j:slf4j-jdk14` from 2.0.15 to 2.0.16 Updates `org.slf4j:jcl-over-slf4j` from 2.0.15 to 2.0.16 Updates `org.slf4j:slf4j-api` from 2.0.15 to 2.0.16 Updates `org.slf4j:slf4j-log4j12` from 2.0.15 to 2.0.16 Updates `org.slf4j:slf4j-nop` from 2.0.15 to 2.0.16 Updates `org.slf4j:jul-to-slf4j` from 2.0.15 to 2.0.16 --- updated-dependencies: - dependency-name: org.slf4j:slf4j-jdk14 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:jcl-over-slf4j dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-api dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-log4j12 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-nop dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.slf4j:jul-to-slf4j dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1b5c31fa131..bbb27911b98 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -209,7 +209,7 @@ jakarta.servlet-api jakarta.servlet 6.0.0 - 2.0.15 + 2.0.16 2.2 2.3_2 3.3.2 From dfab9996b015d1dbef4bf7c953fe17cbe94feec9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 09:43:42 -0400 Subject: [PATCH 050/430] Bump cxf.micrometer.version from 1.13.2 to 1.13.3 (#2007) Bumps `cxf.micrometer.version` from 1.13.2 to 1.13.3. Updates `io.micrometer:micrometer-core` from 1.13.2 to 1.13.3 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.13.2...v1.13.3) Updates `io.micrometer:micrometer-observation` from 1.13.2 to 1.13.3 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.13.2...v1.13.3) Updates `io.micrometer:micrometer-test` from 1.13.2 to 1.13.3 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.13.2...v1.13.3) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-observation dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-test dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index bbb27911b98..f3eb04f597b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -177,7 +177,7 @@ 1.5.6 9.11.1 3.9.8 - 1.13.2 + 1.13.3 1.3.2 3.1 3.0.1 From dae5fcb2c77c4497677746ebeb6eb53b9406ec16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Aug 2024 11:09:23 -0400 Subject: [PATCH 051/430] Bump cxf.micrometer-tracing.version from 1.3.2 to 1.3.3 (#2006) Bumps `cxf.micrometer-tracing.version` from 1.3.2 to 1.3.3. Updates `io.micrometer:micrometer-tracing-bridge-brave` from 1.3.2 to 1.3.3 - [Release notes](https://github.com/micrometer-metrics/tracing/releases) - [Commits](https://github.com/micrometer-metrics/tracing/compare/v1.3.2...v1.3.3) Updates `io.micrometer:micrometer-tracing-bridge-otel` from 1.3.2 to 1.3.3 - [Release notes](https://github.com/micrometer-metrics/tracing/releases) - [Commits](https://github.com/micrometer-metrics/tracing/compare/v1.3.2...v1.3.3) Updates `io.micrometer:micrometer-tracing-test` from 1.3.2 to 1.3.3 - [Release notes](https://github.com/micrometer-metrics/tracing/releases) - [Commits](https://github.com/micrometer-metrics/tracing/compare/v1.3.2...v1.3.3) Updates `io.micrometer:micrometer-tracing-integration-test` from 1.3.2 to 1.3.3 - [Release notes](https://github.com/micrometer-metrics/tracing/releases) - [Commits](https://github.com/micrometer-metrics/tracing/compare/v1.3.2...v1.3.3) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-tracing-bridge-brave dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-tracing-bridge-otel dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-tracing-test dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-tracing-integration-test dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index f3eb04f597b..fbda93fb371 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -178,7 +178,7 @@ 9.11.1 3.9.8 1.13.3 - 1.3.2 + 1.3.3 3.1 3.0.1 3.1.1 From e2100c667db19c26b28afa173e4a23ea14c573c0 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 13 Aug 2024 11:56:47 -0400 Subject: [PATCH 052/430] Update Project Reactor to 3.6.9 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index fbda93fb371..74e0483e757 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -200,7 +200,7 @@ 4.10.0 3.5.1 1.0.4 - 3.6.8 + 3.6.9 1.7.15 1.3.8 2.2.21 From 3901f921ca83dd2ba9e191a01b63fe85fef1baaa Mon Sep 17 00:00:00 2001 From: Jamie Goodyear Date: Tue, 13 Aug 2024 14:22:50 -0230 Subject: [PATCH 053/430] [CXF-9046] Close response objects in perf client sample (#2008) * [CXF-9046] Close response objects in perf client sample * POST is autoclosing * GET in autoclosing --- .../java/org/apache/cxf/performance/https/client/Client.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/client/Client.java b/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/client/Client.java index 89a144d3153..221abcc5396 100644 --- a/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/client/Client.java +++ b/distribution/src/main/release/samples/performance/jaxrs/src/main/java/org/apache/cxf/performance/https/client/Client.java @@ -83,8 +83,9 @@ public void doJob(WebClient webClient) { switch (opid) { case 0: //GET - Response respGet = webClient.get(); - Asserts.check(respGet.getStatus() == 200, "Get should have been OK"); + try (Response respGet = webClient.get()) { + Asserts.check(respGet.getStatus() == 200, "Get should have been OK"); + } break; case 1: //POST From 0a8baace99bb8fbafade3e30ae43ae0c864aa6f6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 08:17:46 -0400 Subject: [PATCH 054/430] Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.4 to 3.2.5 (#2009) Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.2.4 to 3.2.5. - [Release notes](https://github.com/apache/maven-gpg-plugin/releases) - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.4...maven-gpg-plugin-3.2.5) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-gpg-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0de9c298e03..b1aab8ac3b6 100644 --- a/pom.xml +++ b/pom.xml @@ -361,7 +361,7 @@ maven-gpg-plugin - 3.2.4 + 3.2.5 From 5744ce42c98422a96ca4f2c92213e9ff56f97804 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 08:18:08 -0400 Subject: [PATCH 055/430] Bump com.h2database:h2 from 2.3.230 to 2.3.232 (#2010) Bumps [com.h2database:h2](https://github.com/h2database/h2database) from 2.3.230 to 2.3.232. - [Release notes](https://github.com/h2database/h2database/releases) - [Commits](https://github.com/h2database/h2database/compare/version-2.3.230...version-2.3.232) --- updated-dependencies: - dependency-name: com.h2database:h2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 98ed9adad3a..015dede9ea6 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -48,7 +48,7 @@ 3.4.0 2.1 2.31.0 - 2.3.230 + 2.3.232 5.13.1.Final 2.6.7 4.7.0 From 1a2e6f2abe74c6fa5589a183e918604ee950851c Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 14 Aug 2024 16:02:59 -0400 Subject: [PATCH 056/430] Update Spring Framework to 6.1.12 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 74e0483e757..b3a92b9607f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -216,7 +216,7 @@ 3.2.4 spring-test 6.3.1 - 6.1.11 + 6.1.12 1.8.3 5.17.14 2.2.22 From cd53e4953d90fed16cd99d131b905cefcd748935 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 08:56:17 -0400 Subject: [PATCH 057/430] Bump org.atmosphere:atmosphere-runtime from 3.0.8 to 3.0.10 (#2011) Bumps [org.atmosphere:atmosphere-runtime](https://github.com/Atmosphere/atmosphere) from 3.0.8 to 3.0.10. - [Commits](https://github.com/Atmosphere/atmosphere/compare/atmosphere-project-3.0.8...atmosphere-project-3.0.10) --- updated-dependencies: - dependency-name: org.atmosphere:atmosphere-runtime dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index b3a92b9607f..d5d45539a1c 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -94,7 +94,7 @@ 1.9.22.1 3.26.3 [3.0, 4.0) - 3.0.8 + 3.0.10 1.77 6.0.3 4.0.1 From a116fc8aca9fe39266ce4e4b5f98305d07150f7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Aug 2024 11:15:25 -0400 Subject: [PATCH 058/430] Bump cxf.junit5.version from 5.10.3 to 5.11.0 (#2012) * Bump cxf.junit5.version from 5.10.3 to 5.11.0 Bumps `cxf.junit5.version` from 5.10.3 to 5.11.0. Updates `org.junit:junit-bom` from 5.10.3 to 5.11.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) Updates `org.junit.vintage:junit-vintage-engine` from 5.10.3 to 5.11.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.10.3...r5.11.0) --- updated-dependencies: - dependency-name: org.junit:junit-bom dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.junit.vintage:junit-vintage-engine dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * Fix mix of JUnit5 + JUnit4 test engines configuration --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andriy Redko --- parent/pom.xml | 2 +- systests/transports/pom.xml | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index d5d45539a1c..2cb2101c4d5 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -170,7 +170,7 @@ 3.0.1 1.0 4.13.2 - 5.10.3 + 5.11.0 2.0.3 7.0.1 1.1.2 diff --git a/systests/transports/pom.xml b/systests/transports/pom.xml index 2f06ebd6e13..30444864db7 100644 --- a/systests/transports/pom.xml +++ b/systests/transports/pom.xml @@ -332,6 +332,12 @@ jaxb-xjc test + + org.junit.jupiter + junit-jupiter-engine + ${cxf.junit5.version} + test + org.junit.vintage junit-vintage-engine From d8f989cb55a66362b8d969823d7f2f84b88d2d18 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Thu, 15 Aug 2024 13:54:17 -0400 Subject: [PATCH 059/430] [CXF-9047]http-undertow transport: enable to specify CipherSuites --- .../UndertowHTTPDestination.java | 13 ++++++++- .../UndertowHTTPServerEngine.java | 27 ++++++++++++++++++- .../UndertowHTTPServerEngineFactory.java | 17 ++++++++++-- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPDestination.java b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPDestination.java index bbdc8856a03..45eddec10b5 100644 --- a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPDestination.java +++ b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPDestination.java @@ -34,9 +34,12 @@ import org.apache.cxf.common.classloader.ClassLoaderUtils; import org.apache.cxf.common.classloader.ClassLoaderUtils.ClassLoaderHolder; import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.configuration.jsse.TLSServerParameters; +import org.apache.cxf.configuration.security.CertificateConstraintsType; import org.apache.cxf.message.Message; import org.apache.cxf.service.model.EndpointInfo; import org.apache.cxf.transport.http.DestinationRegistry; +import org.apache.cxf.transport.https.CertConstraintsJaxBUtils; import org.apache.cxf.transport.servlet.ServletDestination; import org.apache.cxf.transports.http.configuration.HTTPServerPolicy; @@ -103,7 +106,15 @@ protected void retrieveEngine() engine = serverEngineFactory. createUndertowHTTPServerEngine(nurl.getHost(), nurl.getPort(), nurl.getProtocol()); } - + assert engine != null; + TLSServerParameters serverParameters = engine.getTlsServerParameters(); + if (serverParameters != null && serverParameters.getCertConstraints() != null) { + CertificateConstraintsType constraints = serverParameters.getCertConstraints(); + if (constraints != null) { + certConstraints = CertConstraintsJaxBUtils.createCertConstraints(constraints); + } + } + // When configuring for "http", however, it is still possible that // Spring configuration has configured the port for https. if (!nurl.getProtocol().equals(engine.getProtocol())) { diff --git a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngine.java b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngine.java index 2b740cae6e1..4bc41b9083c 100644 --- a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngine.java +++ b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngine.java @@ -40,6 +40,7 @@ import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.common.util.PropertyUtils; import org.apache.cxf.common.util.SystemPropertyAction; +import org.apache.cxf.configuration.jsse.SSLUtils; import org.apache.cxf.configuration.jsse.TLSServerParameters; import org.apache.cxf.interceptor.Fault; import org.apache.cxf.transport.HttpUriMapper; @@ -129,6 +130,8 @@ public class UndertowHTTPServerEngine implements ServerEngine, HttpServerEngineS private org.apache.cxf.transport.http_undertow.ThreadingParameters threadingParameters; private List handlers; + + private String[] includedCipherSuites; public UndertowHTTPServerEngine(String host, int port) { this.host = host; @@ -177,7 +180,12 @@ public void addServant(URL url, UndertowHTTPHandler handler) { if (handler.isContextMatchExact()) { path.addExactPath(url.getPath(), handler); } else { - path.addPrefixPath(url.getPath(), handler); + String urlPath = url.getPath(); + if (urlPath.isEmpty()) { + urlPath = "/"; + } + + path.addPrefixPath(urlPath, handler); } } @@ -312,10 +320,15 @@ public Undertow.Builder decorateUndertowSocketConnection(Undertow.Builder builde builder = builder.setSocketOption(Options.SSL_CLIENT_AUTH_MODE, SslClientAuthMode.REQUIRED); } if (this.tlsServerParameters != null && this.tlsServerParameters.getClientAuthentication() != null + && this.tlsServerParameters.getClientAuthentication().isSetWant() && this.tlsServerParameters.getClientAuthentication().isWant() && !this.tlsServerParameters.getClientAuthentication().isRequired()) { builder = builder.setSocketOption(Options.SSL_CLIENT_AUTH_MODE, SslClientAuthMode.REQUESTED); } + if (includedCipherSuites != null) { + builder = builder.setSocketOption(Options.SSL_ENABLED_CIPHER_SUITES, + Sequence.of(includedCipherSuites)); + } return builder; } @@ -513,6 +526,18 @@ protected SSLContext createSSLContext() throws Exception { context.init(keyManagers, tlsServerParameters.getTrustManagers(), tlsServerParameters.getSecureRandom()); + + // Set the CipherSuites + final String[] supportedCipherSuites = + SSLUtils.getServerSupportedCipherSuites(context); + + + includedCipherSuites = + SSLUtils.getCiphersuitesToInclude(tlsServerParameters.getCipherSuites(), + tlsServerParameters.getCipherSuitesFilter(), + context.getServerSocketFactory().getDefaultCipherSuites(), + supportedCipherSuites, + LOG); return context; } diff --git a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngineFactory.java b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngineFactory.java index a26703de0a0..34671c1b865 100644 --- a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngineFactory.java +++ b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngineFactory.java @@ -39,6 +39,7 @@ import org.apache.cxf.management.InstrumentationManager; + /** * This Bus Extension handles the configuration of network port * numbers for use with "http" or "https". This factory @@ -250,14 +251,19 @@ public synchronized UndertowHTTPServerEngine retrieveUndertowHTTPServerEngine(in * server will listen on all local addresses. * @param port listen port for server * @param protocol "http" or "https" + * @param id The key to reference into the tlsParametersMap. Can be null. * @return * @throws GeneralSecurityException * @throws IOException */ public synchronized UndertowHTTPServerEngine createUndertowHTTPServerEngine(String host, int port, - String protocol) throws GeneralSecurityException, IOException { + String protocol, String id) throws GeneralSecurityException, IOException { LOG.fine("Creating Undertow HTTP Server Engine for port " + port + "."); - UndertowHTTPServerEngine ref = getOrCreate(this, host, port, null); + TLSServerParameters tlsParameters = null; + if (id != null && tlsParametersMap != null && tlsParametersMap.containsKey(id)) { + tlsParameters = tlsParametersMap.get(id); + } + UndertowHTTPServerEngine ref = getOrCreate(this, host, port, tlsParameters); // checking the protocol if (!protocol.equals(ref.getProtocol())) { throw new IOException("Protocol mismatch for port " + port + ": " @@ -288,6 +294,13 @@ public synchronized UndertowHTTPServerEngine createUndertowHTTPServerEngine(int String protocol) throws GeneralSecurityException, IOException { return createUndertowHTTPServerEngine(null, port, protocol); } + + + public synchronized UndertowHTTPServerEngine createUndertowHTTPServerEngine(String host, int port, + String protocol) + throws GeneralSecurityException, IOException { + return createUndertowHTTPServerEngine(host, port, protocol, null); + } /** * This method removes the Server Engine from the port map and stops it. From 9e9a906658a4924627abd5068577d4f55f33bb72 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 15 Aug 2024 16:38:01 -0400 Subject: [PATCH 060/430] Update Spring LDAP to 3.2.6 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 2cb2101c4d5..ffde41ddd86 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -213,7 +213,7 @@ 2.2 2.3_2 3.3.2 - 3.2.4 + 3.2.6 spring-test 6.3.1 6.1.12 From 1261d18047c10883496525685175afd327fad78d Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 15 Aug 2024 20:20:33 -0400 Subject: [PATCH 061/430] Update RxJava to 3.1.9 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index ffde41ddd86..8667dacd660 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -204,7 +204,7 @@ 1.7.15 1.3.8 2.2.21 - 3.1.8 + 3.1.9 3.0.4 jakarta.servlet-api jakarta.servlet From 53c936caf3192c392287539ef5129755fee0225d Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 15 Aug 2024 20:21:31 -0400 Subject: [PATCH 062/430] Update Apache Tomcat to 10.1.28 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 015dede9ea6..b0c6a686a33 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -38,7 +38,7 @@ 4.5.14 5.17.14 2.9.1 - 10.1.26 + 10.1.28 4.0.3.Final 2.11.0 9.11.1 diff --git a/parent/pom.xml b/parent/pom.xml index 8667dacd660..2723112741b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -221,7 +221,7 @@ 5.17.14 2.2.22 2.9.1 - 10.1.26 + 10.1.28 1.8 2.3.15.Final 3.0.4 From 4a313b308140f500d7193dd0b449f28dd315912a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 12:01:07 -0400 Subject: [PATCH 063/430] Bump org.codehaus.mojo:exec-maven-plugin from 3.4.0 to 3.4.1 (#2013) Bumps [org.codehaus.mojo:exec-maven-plugin](https://github.com/mojohaus/exec-maven-plugin) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/mojohaus/exec-maven-plugin/releases) - [Commits](https://github.com/mojohaus/exec-maven-plugin/compare/3.4.0...3.4.1) --- updated-dependencies: - dependency-name: org.codehaus.mojo:exec-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index b0c6a686a33..93613e66c58 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -207,7 +207,7 @@ org.codehaus.mojo exec-maven-plugin - 3.4.0 + 3.4.1 org.apache.felix From ed25360265c232dd56871c2270d072c5bc78387a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 07:20:29 -0400 Subject: [PATCH 064/430] Bump cxf.dropwizard4.version from 4.2.26 to 4.2.27 (#2016) Bumps `cxf.dropwizard4.version` from 4.2.26 to 4.2.27. Updates `io.dropwizard.metrics:metrics-core` from 4.2.26 to 4.2.27 - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.26...v4.2.27) Updates `io.dropwizard.metrics:metrics-jmx` from 4.2.26 to 4.2.27 - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.26...v4.2.27) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.dropwizard.metrics:metrics-jmx dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 2723112741b..ec878ae2b3a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -109,7 +109,7 @@ 10.16.1.1 2.1.4 3.2.6 - 4.2.26 + 4.2.27 3.10.8 5.0.1 3.0.2 From c874b22dff83786077785937e35d44db4752063b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 19 Aug 2024 17:03:41 -0400 Subject: [PATCH 065/430] Bump github/codeql-action from 3.26.0 to 3.26.2 (#2015) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.0 to 3.26.2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/eb055d739abdc2e8de2e5f4ba1a8b246daa779aa...429e1977040da7a23b6822b13c129cd1ba93dbb2) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 6a8f42561d8..7ad548779f9 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 + uses: github/codeql-action/init@429e1977040da7a23b6822b13c129cd1ba93dbb2 # v3.26.2 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa # v3.26.0 + uses: github/codeql-action/analyze@429e1977040da7a23b6822b13c129cd1ba93dbb2 # v3.26.2 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index c0da6882369..2886a1a0355 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@eb055d739abdc2e8de2e5f4ba1a8b246daa779aa #tag=v2 + uses: github/codeql-action/upload-sarif@429e1977040da7a23b6822b13c129cd1ba93dbb2 #tag=v2 with: sarif_file: results.sarif From 094bdcf3ad075f3c3f901d2977e165f5182808c9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 20 Aug 2024 08:57:38 -0400 Subject: [PATCH 066/430] Bump cxf.spring.security.version from 6.3.1 to 6.3.2 (#2019) Bumps `cxf.spring.security.version` from 6.3.1 to 6.3.2. Updates `org.springframework.security:spring-security-web` from 6.3.1 to 6.3.2 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.3.1...6.3.2) Updates `org.springframework.security:spring-security-config` from 6.3.1 to 6.3.2 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.3.1...6.3.2) Updates `org.springframework.security:spring-security-core` from 6.3.1 to 6.3.2 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.3.1...6.3.2) Updates `org.springframework.security:spring-security-acl` from 6.3.1 to 6.3.2 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.3.1...6.3.2) --- updated-dependencies: - dependency-name: org.springframework.security:spring-security-web dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.security:spring-security-config dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.security:spring-security-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.security:spring-security-acl dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index ec878ae2b3a..a7513cd9518 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -215,7 +215,7 @@ 3.3.2 3.2.6 spring-test - 6.3.1 + 6.3.2 6.1.12 1.8.3 5.17.14 From 2cf9998eb926e9b568ec2bffc0405517624d19d5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 21 Aug 2024 07:34:43 -0400 Subject: [PATCH 067/430] Bump org.apache.maven.plugins:maven-surefire-plugin from 3.3.1 to 3.4.0 (#2020) Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.3.1 to 3.4.0. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.3.1...surefire-3.4.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 93613e66c58..d10dc5bd160 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -227,7 +227,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.1 + 3.4.0 org.apache.maven.plugins diff --git a/pom.xml b/pom.xml index b1aab8ac3b6..fb2381ddcab 100644 --- a/pom.xml +++ b/pom.xml @@ -490,7 +490,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.3.1 + 3.4.0 org.apache.maven.plugins From 234eab1d3505bd892f0517a2f6b9bc512475facf Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 21 Aug 2024 20:06:16 -0400 Subject: [PATCH 068/430] Update Spring Security to 6.3.3 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index a7513cd9518..25d041293d2 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -215,7 +215,7 @@ 3.3.2 3.2.6 spring-test - 6.3.2 + 6.3.3 6.1.12 1.8.3 5.17.14 From 5b95d12519be5d804f89bff8854e40acb0268834 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Aug 2024 08:12:49 -0400 Subject: [PATCH 069/430] Bump cxf.opentelemetry.semconv.version from 1.26.0-alpha to 1.27.0-alpha (#2022) Bumps `cxf.opentelemetry.semconv.version` from 1.26.0-alpha to 1.27.0-alpha. Updates `io.opentelemetry.semconv:opentelemetry-semconv` from 1.26.0-alpha to 1.27.0-alpha - [Release notes](https://github.com/open-telemetry/semantic-conventions-java/releases) - [Changelog](https://github.com/open-telemetry/semantic-conventions-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/semantic-conventions-java/commits) Updates `io.opentelemetry.semconv:opentelemetry-semconv-incubating` from 1.26.0-alpha to 1.27.0-alpha - [Release notes](https://github.com/open-telemetry/semantic-conventions-java/releases) - [Changelog](https://github.com/open-telemetry/semantic-conventions-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/semantic-conventions-java/commits) --- updated-dependencies: - dependency-name: io.opentelemetry.semconv:opentelemetry-semconv dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.opentelemetry.semconv:opentelemetry-semconv-incubating dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 25d041293d2..13aada8eb1d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -192,7 +192,7 @@ 2.0.12 3.2.2 1.41.0 - 1.26.0-alpha + 1.27.0-alpha 0.33.0 2.0.27 1.1.7 From 02b3cf9cd924f95ccc9429b074e58bb31fa7a85c Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 22 Aug 2024 15:18:19 -0400 Subject: [PATCH 070/430] Update Spring Boot to 3.3.3 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index d10dc5bd160..d7d891fcc7b 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -31,7 +31,7 @@ true UTF-8 - 3.3.2 + 3.3.3 4.1.3 12.0.12 4.1.112.Final diff --git a/parent/pom.xml b/parent/pom.xml index 13aada8eb1d..4da43d5d2da 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -212,7 +212,7 @@ 2.0.16 2.2 2.3_2 - 3.3.2 + 3.3.3 3.2.6 spring-test 6.3.3 From 5e3ee383e7ebfd2bdd988b2817d3b7f6514a055e Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 22 Aug 2024 15:18:48 -0400 Subject: [PATCH 071/430] Update Logback to 1.5.7 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 4da43d5d2da..4535eabc034 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -174,7 +174,7 @@ 2.0.3 7.0.1 1.1.2 - 1.5.6 + 1.5.7 9.11.1 3.9.8 1.13.3 From e6e4c8c8dcf36c437661760b36b37e21878b1c3e Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 22 Aug 2024 17:38:51 -0400 Subject: [PATCH 072/430] Attempt to fix org.apache.cxf.ws.discovery.WSDiscoveryClientTest.testMultiResponses --- .../org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java b/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java index f54b88179fd..5800c203389 100644 --- a/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java +++ b/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java @@ -102,8 +102,8 @@ public void testMultiResponses() throws Exception { int count = 0; if (interfaces != null) { while (interfaces.hasMoreElements()) { - NetworkInterface networkInterface = interfaces.nextElement(); - if (!networkInterface.isUp() || networkInterface.isLoopback()) { + NetworkInterface ni = interfaces.nextElement(); + if (!ni.isUp() || ni.isLoopback() || !ni.supportsMulticast()) { continue; } count++; From 7db5e675a342db5b49f6627e8e5e55fb117c9484 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 22 Aug 2024 20:34:56 -0400 Subject: [PATCH 073/430] Attempt to troubleshoot org.apache.cxf.ws.discovery.WSDiscoveryClientTest.testMultiResponses --- .../apache/cxf/ws/discovery/WSDiscoveryClientTest.java | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java b/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java index 5800c203389..53c5740282e 100644 --- a/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java +++ b/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java @@ -73,6 +73,7 @@ static NetworkInterface findIpv4Interface() throws Exception { if (ia.getAddress() instanceof java.net.Inet4Address && !ia.getAddress().isLoopbackAddress() && !ni.getDisplayName().startsWith("vnic")) { possibles.add(ni); + System.out.println("Found possible network interface:" + ni.getDisplayName()); } } } @@ -80,10 +81,17 @@ static NetworkInterface findIpv4Interface() throws Exception { } for (NetworkInterface p : possibles) { if (p.isPointToPoint()) { + System.out.println("Using p2p network interface:" + p.getDisplayName()); return p; } } - return possibles.isEmpty() ? null : possibles.get(possibles.size() - 1); + if (possibles.isEmpty()) { + return null; + } else { + final NetworkInterface ni = possibles.get(possibles.size() - 1); + System.out.println("Using network interface:" + ni.getDisplayName()); + return ni; + } } @Test From 7334657f2c1997dd207f86eb8628c460609a036e Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 22 Aug 2024 21:07:41 -0400 Subject: [PATCH 074/430] Attempt to troubleshoot org.apache.cxf.ws.discovery.WSDiscoveryClientTest.testMultiResponses --- .../org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java b/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java index 53c5740282e..e33dab76378 100644 --- a/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java +++ b/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java @@ -80,8 +80,8 @@ static NetworkInterface findIpv4Interface() throws Exception { } } for (NetworkInterface p : possibles) { - if (p.isPointToPoint()) { - System.out.println("Using p2p network interface:" + p.getDisplayName()); + if (!p.isPointToPoint()) { + System.out.println("Using non-p2p network interface:" + p.getDisplayName()); return p; } } From 577cd411596e6d94b2547b4a388ef81c777f7c48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 23 Aug 2024 07:10:32 -0400 Subject: [PATCH 075/430] Bump org.apache.maven.plugins:maven-project-info-reports-plugin (#2023) Bumps [org.apache.maven.plugins:maven-project-info-reports-plugin](https://github.com/apache/maven-project-info-reports-plugin) from 3.6.2 to 3.7.0. - [Commits](https://github.com/apache/maven-project-info-reports-plugin/compare/maven-project-info-reports-plugin-3.6.2...maven-project-info-reports-plugin-3.7.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-project-info-reports-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index fb2381ddcab..a29a9fac0af 100644 --- a/pom.xml +++ b/pom.xml @@ -564,7 +564,7 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.6.2 + 3.7.0 org.apache.maven.plugins @@ -756,7 +756,7 @@ org.apache.maven.plugins maven-project-info-reports-plugin - 3.6.2 + 3.7.0 false From ad9ba4313f31067e41d55d22fd148aeec118ee90 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 23 Aug 2024 08:01:21 -0400 Subject: [PATCH 076/430] Fix org.apache.cxf.ws.discovery.WSDiscoveryClientTest.testMultiResponses --- .../org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java b/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java index e33dab76378..9fbdb77891c 100644 --- a/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java +++ b/services/ws-discovery/ws-discovery-api/src/test/java/org/apache/cxf/ws/discovery/WSDiscoveryClientTest.java @@ -71,7 +71,8 @@ static NetworkInterface findIpv4Interface() throws Exception { if (ni.supportsMulticast() && ni.isUp()) { for (InterfaceAddress ia : ni.getInterfaceAddresses()) { if (ia.getAddress() instanceof java.net.Inet4Address && !ia.getAddress().isLoopbackAddress() - && !ni.getDisplayName().startsWith("vnic")) { + && !ni.getDisplayName().startsWith("vnic") + && !ni.getDisplayName().startsWith("tailscale")) { possibles.add(ni); System.out.println("Found possible network interface:" + ni.getDisplayName()); } @@ -80,8 +81,8 @@ static NetworkInterface findIpv4Interface() throws Exception { } } for (NetworkInterface p : possibles) { - if (!p.isPointToPoint()) { - System.out.println("Using non-p2p network interface:" + p.getDisplayName()); + if (p.isPointToPoint()) { + System.out.println("Using p2p network interface:" + p.getDisplayName()); return p; } } From 053d11f2eb99ad0baaafb1ada383d18419d154c7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:22:09 -0400 Subject: [PATCH 077/430] Bump github/codeql-action from 3.26.2 to 3.26.5 (#2027) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.2 to 3.26.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/429e1977040da7a23b6822b13c129cd1ba93dbb2...2c779ab0d087cd7fe7b826087247c2c81f27bfa6) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 7ad548779f9..29b7a35d4a6 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@429e1977040da7a23b6822b13c129cd1ba93dbb2 # v3.26.2 + uses: github/codeql-action/init@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@429e1977040da7a23b6822b13c129cd1ba93dbb2 # v3.26.2 + uses: github/codeql-action/analyze@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 # v3.26.5 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 2886a1a0355..61632bf63c4 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@429e1977040da7a23b6822b13c129cd1ba93dbb2 #tag=v2 + uses: github/codeql-action/upload-sarif@2c779ab0d087cd7fe7b826087247c2c81f27bfa6 #tag=v2 with: sarif_file: results.sarif From 3165e676100f619ef77c540fbc3964feb6d5cbb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 26 Aug 2024 11:22:22 -0400 Subject: [PATCH 078/430] Bump cxf.undertow.version from 2.3.15.Final to 2.3.16.Final (#2025) Bumps `cxf.undertow.version` from 2.3.15.Final to 2.3.16.Final. Updates `io.undertow:undertow-core` from 2.3.15.Final to 2.3.16.Final - [Release notes](https://github.com/undertow-io/undertow/releases) - [Commits](https://github.com/undertow-io/undertow/compare/2.3.15.Final...2.3.16.Final) Updates `io.undertow:undertow-servlet` from 2.3.15.Final to 2.3.16.Final - [Release notes](https://github.com/undertow-io/undertow/releases) - [Commits](https://github.com/undertow-io/undertow/compare/2.3.15.Final...2.3.16.Final) --- updated-dependencies: - dependency-name: io.undertow:undertow-core dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.undertow:undertow-servlet dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 4535eabc034..05b98c42ff2 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -223,7 +223,7 @@ 2.9.1 10.1.28 1.8 - 2.3.15.Final + 2.3.16.Final 3.0.4 1.0.1 From 9a883cd02bcdf2430b6a59bc25bc512f993edb97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Sep 2024 07:31:58 -0400 Subject: [PATCH 109/430] Bump org.graalvm.buildtools:native-maven-plugin from 0.10.2 to 0.10.3 (#2061) Bumps [org.graalvm.buildtools:native-maven-plugin](https://github.com/graalvm/native-build-tools) from 0.10.2 to 0.10.3. - [Release notes](https://github.com/graalvm/native-build-tools/releases) - [Commits](https://github.com/graalvm/native-build-tools/compare/0.10.2...0.10.3) --- updated-dependencies: - dependency-name: org.graalvm.buildtools:native-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../src/main/release/samples/jax_rs/graalvm_basic/pom.xml | 4 ++-- distribution/src/main/release/samples/jaxws_graalvm/pom.xml | 4 ++-- .../main/release/samples/jaxws_graalvm_dynamic/client/pom.xml | 2 +- .../main/release/samples/jaxws_graalvm_dynamic/server/pom.xml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml index 4389125fecf..6c1d1715d8e 100644 --- a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml @@ -67,7 +67,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.2 + 0.10.3 @@ -125,7 +125,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.2 + 0.10.3 diff --git a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml index 76600bc7ff7..383f69a6a66 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml @@ -92,7 +92,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.2 + 0.10.3 @@ -146,7 +146,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.2 + 0.10.3 diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml index b494778539a..6936a3a8e91 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml @@ -41,7 +41,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.2 + 0.10.3 diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml index 9b65e6612a0..4401a9851f1 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml @@ -68,7 +68,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.2 + 0.10.3 From 367d1204d0d8199efbe32ad3096d0fc09cdeae34 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Sep 2024 07:23:35 -0400 Subject: [PATCH 110/430] Bump org.jboss.logging:jboss-logging from 3.6.0.Final to 3.6.1.Final (#2064) Bumps [org.jboss.logging:jboss-logging](https://github.com/jboss-logging/jboss-logging) from 3.6.0.Final to 3.6.1.Final. - [Release notes](https://github.com/jboss-logging/jboss-logging/releases) - [Commits](https://github.com/jboss-logging/jboss-logging/compare/3.6.0.Final...3.6.1.Final) --- updated-dependencies: - dependency-name: org.jboss.logging:jboss-logging dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index b7d2c4e6502..279951e5de9 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -155,7 +155,7 @@ 4.0.1 ${cxf.jaxb.runtime.version} 2.0.0 - 3.6.0.Final + 3.6.1.Final 5.1.2.Final 5.13.1.Final 1.1.1 From 228aee8f5622dc3aa93b3d89d3165cc9b05f6c6e Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 12 Sep 2024 17:38:24 -0400 Subject: [PATCH 111/430] Update Spring Framework to 6.1.13 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 279951e5de9..54cc6b53ea2 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -216,7 +216,7 @@ 3.2.6 spring-test 6.3.3 - 6.1.12 + 6.1.13 1.8.3 5.17.14 2.2.23 From 1f0355e72b695b42fdbe9d15fb4713ee7c92df90 Mon Sep 17 00:00:00 2001 From: Christian Semaan <155438536+csemaan1A@users.noreply.github.com> Date: Fri, 13 Sep 2024 23:26:25 +0200 Subject: [PATCH 112/430] CXF-9055 Follow OpenTelemetry semconv for trace span and its attributes (#2062) * Add missing span attributes to comply with [OpenTelemetry semantic conventions](https://opentelemetry.io/docs/specs/semconv/http/http-spans/) * Test the span attribute names and values * Couldn't add the attributes "network.protocol.version" for the client http span, because we didn't find a way to find its value. Link to the Jira ticket: [CXF-9055 Follow OpenTelemetry semantic conventions for trace span and its attributes ](https://issues.apache.org/jira/browse/CXF-9055) --- .../tracing/tracing-opentelemetry/pom.xml | 5 + .../AbstractOpenTelemetryClientProvider.java | 31 +++-- .../AbstractOpenTelemetryProvider.java | 21 +++- .../OpenTelemetryStartInterceptor.java | 24 ++++ .../jaxrs/OpenTelemetryProvider.java | 30 ++++- .../OpenTelemetryTracingTest.java | 116 +++++++++++++++--- .../OpenTelemetryTracingTest.java | 93 ++++++++++++-- 7 files changed, 277 insertions(+), 43 deletions(-) diff --git a/integration/tracing/tracing-opentelemetry/pom.xml b/integration/tracing/tracing-opentelemetry/pom.xml index 123b6fd1050..f18bcafdd53 100644 --- a/integration/tracing/tracing-opentelemetry/pom.xml +++ b/integration/tracing/tracing-opentelemetry/pom.xml @@ -46,6 +46,11 @@ jakarta.xml.ws-api true + + jakarta.servlet + jakarta.servlet-api + true + junit junit diff --git a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/AbstractOpenTelemetryClientProvider.java b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/AbstractOpenTelemetryClientProvider.java index 2ffde203b1c..486970375ec 100644 --- a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/AbstractOpenTelemetryClientProvider.java +++ b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/AbstractOpenTelemetryClientProvider.java @@ -36,9 +36,12 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; +import io.opentelemetry.semconv.ErrorAttributes; +import io.opentelemetry.semconv.ExceptionAttributes; import io.opentelemetry.semconv.HttpAttributes; +import io.opentelemetry.semconv.NetworkAttributes; +import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.UrlAttributes; -import io.opentelemetry.semconv.incubating.ExceptionIncubatingAttributes; public abstract class AbstractOpenTelemetryClientProvider extends AbstractTracingProvider { protected static final Logger LOG = LogUtils.getL7dLogger(AbstractOpenTelemetryClientProvider.class); @@ -60,11 +63,14 @@ protected TraceScopeHolder startTraceSpan(final Map holder, final in Span span = traceScope.getSpan(); Scope scope = traceScope.getScope(); - // If the client invocation was asynchronous , the trace span has been created + // If the client invocation was asynchronous, the trace span has been created // in another thread and should be re-attached to the current one. if (holder.isDetached()) { scope = span.makeCurrent(); } + // Check if the response status code starts with 3, 4, or 5 (indicating redirection, + // client error, or server error) + // If true, set the error type attribute on the span with the response status code + if (responseStatus >= 300) { + span.setAttribute(ErrorAttributes.ERROR_TYPE, String.valueOf(responseStatus)); + } + span.setAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE.getKey(), responseStatus); span.end(); @@ -120,7 +133,7 @@ protected void stopTraceSpan(final TraceScopeHolder holder, final Th Span span = traceScope.getSpan(); Scope scope = traceScope.getScope(); - // If the client invocation was asynchronous , the trace span has been created + // If the client invocation was asynchronous, the trace span has been created // in another thread and should be re-attached to the current one. if (holder.isDetached()) { scope = span.makeCurrent(); @@ -128,7 +141,7 @@ protected void stopTraceSpan(final TraceScopeHolder holder, final Th span.setStatus(StatusCode.ERROR); if (ex != null) { - span.recordException(ex, Attributes.of(ExceptionIncubatingAttributes.EXCEPTION_ESCAPED, true)); + span.recordException(ex, Attributes.of(ExceptionAttributes.EXCEPTION_ESCAPED, true)); } span.end(); diff --git a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/AbstractOpenTelemetryProvider.java b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/AbstractOpenTelemetryProvider.java index d9b7d6e2ce0..d95ed00c365 100644 --- a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/AbstractOpenTelemetryProvider.java +++ b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/AbstractOpenTelemetryProvider.java @@ -35,7 +35,9 @@ import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; +import io.opentelemetry.semconv.ErrorAttributes; import io.opentelemetry.semconv.HttpAttributes; +import io.opentelemetry.semconv.ServerAttributes; import io.opentelemetry.semconv.UrlAttributes; public abstract class AbstractOpenTelemetryProvider extends AbstractTracingProvider { @@ -65,12 +67,18 @@ protected TraceScopeHolder startTraceSpan(final Map> requestHeaders, scope = span.makeCurrent(); } + // Check if the response status code starts with 3, 4, or 5 (indicating redirection, + // client error, or server error) + // If true, set the error type attribute on the span with the response status code + if (responseStatus >= 300) { + span.setAttribute(ErrorAttributes.ERROR_TYPE, String.valueOf(responseStatus)); + } + span.setAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, responseStatus); span.end(); diff --git a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/OpenTelemetryStartInterceptor.java b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/OpenTelemetryStartInterceptor.java index 24f2a63fc76..d7aa118cc40 100644 --- a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/OpenTelemetryStartInterceptor.java +++ b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/OpenTelemetryStartInterceptor.java @@ -21,14 +21,20 @@ import java.util.List; import java.util.Map; +import jakarta.servlet.http.HttpServletRequest; import org.apache.cxf.common.injection.NoJSR250Annotations; import org.apache.cxf.helpers.CastUtils; import org.apache.cxf.interceptor.Fault; import org.apache.cxf.message.Message; import org.apache.cxf.phase.Phase; +import org.apache.cxf.transport.http.AbstractHTTPDestination; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.semconv.ClientAttributes; +import io.opentelemetry.semconv.NetworkAttributes; +import io.opentelemetry.semconv.UserAgentAttributes; @NoJSR250Annotations public class OpenTelemetryStartInterceptor extends AbstractOpenTelemetryInterceptor { @@ -51,5 +57,23 @@ public void handleMessage(Message message) throws Fault { if (holder != null) { message.getExchange().put(TRACE_SPAN, holder); } + + HttpServletRequest request = (HttpServletRequest)message.get(AbstractHTTPDestination.HTTP_REQUEST); + if (request != null) { + Span span = holder.getScope().getSpan(); + span.setAttribute(ClientAttributes.CLIENT_ADDRESS, request.getRemoteAddr()); + span.setAttribute(ClientAttributes.CLIENT_PORT, request.getRemotePort()); + span.setAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, request.getRemoteAddr()); + span.setAttribute(NetworkAttributes.NETWORK_PEER_PORT, request.getRemotePort()); + String protocol = request.getProtocol(); + if (protocol != null && protocol.contains("/")) { + String protocolVersion = protocol.split("/")[1]; + span.setAttribute(NetworkAttributes.NETWORK_PROTOCOL_VERSION, protocolVersion); + } + + if (request.getHeader("User-Agent") != null) { + span.setAttribute(UserAgentAttributes.USER_AGENT_ORIGINAL, request.getHeader("User-Agent")); + } + } } } diff --git a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/jaxrs/OpenTelemetryProvider.java b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/jaxrs/OpenTelemetryProvider.java index 4523a57c21f..4b8759fdf9d 100644 --- a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/jaxrs/OpenTelemetryProvider.java +++ b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/jaxrs/OpenTelemetryProvider.java @@ -21,6 +21,7 @@ import java.io.IOException; import java.lang.annotation.Annotation; +import jakarta.servlet.http.HttpServletRequest; import jakarta.ws.rs.container.ContainerRequestContext; import jakarta.ws.rs.container.ContainerRequestFilter; import jakarta.ws.rs.container.ContainerResponseContext; @@ -33,7 +34,11 @@ import org.apache.cxf.tracing.opentelemetry.TraceScope; import io.opentelemetry.api.OpenTelemetry; +import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.Tracer; +import io.opentelemetry.semconv.ClientAttributes; +import io.opentelemetry.semconv.NetworkAttributes; +import io.opentelemetry.semconv.UserAgentAttributes; @Provider public class OpenTelemetryProvider extends AbstractOpenTelemetryProvider @@ -41,6 +46,9 @@ public class OpenTelemetryProvider extends AbstractOpenTelemetryProvider @Context private ResourceInfo resourceInfo; + @Context + private HttpServletRequest request; + public OpenTelemetryProvider(final OpenTelemetry openTelemetry, final String instrumentationName) { super(openTelemetry, instrumentationName); } @@ -52,10 +60,25 @@ public OpenTelemetryProvider(final OpenTelemetry openTelemetry, final Tracer tra @Override public void filter(final ContainerRequestContext requestContext) throws IOException { final TraceScopeHolder holder = super.startTraceSpan(requestContext.getHeaders(), - requestContext.getUriInfo() - .getRequestUri(), + requestContext.getUriInfo().getRequestUri(), requestContext.getMethod()); + + + if (request != null) { + Span span = holder.getScope().getSpan(); + span.setAttribute(ClientAttributes.CLIENT_ADDRESS, request.getRemoteAddr()); + span.setAttribute(ClientAttributes.CLIENT_PORT, request.getRemotePort()); + span.setAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, request.getRemoteAddr()); + span.setAttribute(NetworkAttributes.NETWORK_PEER_PORT, request.getRemotePort()); + String protocol = request.getProtocol(); + if (protocol != null && protocol.contains("/")) { + String protocolVersion = protocol.split("/")[1]; + span.setAttribute(NetworkAttributes.NETWORK_PROTOCOL_VERSION, protocolVersion); + } + span.setAttribute(UserAgentAttributes.USER_AGENT_ORIGINAL, request.getHeader("User-Agent")); + } + if (holder != null) { requestContext.setProperty(TRACE_SPAN, holder); } @@ -64,8 +87,7 @@ public void filter(final ContainerRequestContext requestContext) throws IOExcept @SuppressWarnings("unchecked") @Override public void filter(final ContainerRequestContext requestContext, - final ContainerResponseContext responseContext) - throws IOException { + final ContainerResponseContext responseContext) { super.stopTraceSpan(requestContext.getHeaders(), responseContext.getHeaders(), responseContext.getStatus(), (TraceScopeHolder)requestContext.getProperty(TRACE_SPAN)); diff --git a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxrs/tracing/opentelemetry/OpenTelemetryTracingTest.java b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxrs/tracing/opentelemetry/OpenTelemetryTracingTest.java index e2cc6278be9..e90c2796b3b 100644 --- a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxrs/tracing/opentelemetry/OpenTelemetryTracingTest.java +++ b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxrs/tracing/opentelemetry/OpenTelemetryTracingTest.java @@ -61,7 +61,14 @@ import io.opentelemetry.context.Scope; import io.opentelemetry.context.propagation.TextMapSetter; import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.semconv.ClientAttributes; +import io.opentelemetry.semconv.ErrorAttributes; import io.opentelemetry.semconv.HttpAttributes; +import io.opentelemetry.semconv.NetworkAttributes; +import io.opentelemetry.semconv.ServerAttributes; +import io.opentelemetry.semconv.UrlAttributes; +import io.opentelemetry.semconv.UserAgentAttributes; import org.junit.After; import org.junit.BeforeClass; @@ -74,10 +81,12 @@ import static org.apache.cxf.systest.jaxrs.tracing.opentelemetry.HasSpan.hasSpan; import static org.apache.cxf.systest.jaxrs.tracing.opentelemetry.IsLogContaining.hasItem; import static org.awaitility.Awaitility.await; +import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.equalTo; import static org.hamcrest.Matchers.notNullValue; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; public class OpenTelemetryTracingTest extends AbstractClientServerTestBase { @@ -92,7 +101,7 @@ public class OpenTelemetryTracingTest extends AbstractClientServerTestBase { public ExpectedException expectedException = ExpectedException.none(); @BeforeClass - public static void startServers() throws Exception { + public static void startServers() { AbstractResourceInfo.clearAllMaps(); // keep out of process due to stack traces testing failures assertTrue("server did not launch correctly", launchServer(OpenTelemetryServer.class, true)); @@ -123,11 +132,23 @@ public void testThatNewSpanIsCreatedWhenNotProvided() { assertThat(otelRule.getSpans().size(), equalTo(2)); assertThat(otelRule.getSpans().get(0).getName(), equalTo("Get Books")); - assertThat(otelRule.getSpans().get(1).getName(), equalTo("GET /bookstore/books")); - assertThat(otelRule.getSpans().get(1).getAttributes(), - hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); - assertThat(otelRule.getSpans().get(1).getInstrumentationScopeInfo().getName(), - equalTo("jaxrs-server-test")); + SpanData serverSpan = otelRule.getSpans().get(1); + assertThat(serverSpan.getName(), equalTo("GET /bookstore/books")); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "GET")); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_PATH, "/bookstore/books")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(serverSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(NetworkAttributes.NETWORK_PEER_PORT)); + assertThat(serverSpan.getAttributes(), hasAttribute(ClientAttributes.CLIENT_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(ClientAttributes.CLIENT_PORT)); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_SCHEME, "http")); + assertThat(serverSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PROTOCOL_VERSION, "1.1")); + String userAgent = serverSpan.getAttributes().get(UserAgentAttributes.USER_AGENT_ORIGINAL); + assertNotNull(userAgent); + assertThat(userAgent, containsString("Apache-CXF/")); + assertThat(serverSpan.getInstrumentationScopeInfo().getName(), equalTo("jaxrs-server-test")); } @Test @@ -187,6 +208,45 @@ public void testThatNewChildSpanIsCreatedWhenParentIsProvided() { assertThat(otelRule.getSpans().get(2).getInstrumentationScopeInfo().getName(), equalTo("jaxrs-client-test")); } + @Test + public void spanShouldHasRequiredAttributes() { + final Response r = createWebClient("/bookstore/books", + new OpenTelemetryClientProvider(otelRule.getOpenTelemetry(), "jaxrs-client-test")) + .get(); + assertEquals(Status.OK.getStatusCode(), r.getStatus()); + + assertThat(otelRule.getSpans().toString(), otelRule.getSpans().size(), equalTo(3)); + + SpanData clientSpan = otelRule.getSpans().get(2); + assertThat(clientSpan.getName(), equalTo("GET http://localhost:" + PORT + "/bookstore/books")); + assertThat(clientSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); + assertThat(clientSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "GET")); + assertThat(clientSpan.getAttributes(), hasAttribute(UrlAttributes.URL_FULL, + "http://localhost:" + PORT + "/bookstore/books")); + assertThat(clientSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(clientSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(clientSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, "localhost")); + assertThat(clientSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_PORT, Long.valueOf(PORT))); + + SpanData serverSpan = otelRule.getSpans().get(1); + assertThat(serverSpan.getName(), equalTo("GET /bookstore/books")); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "GET")); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_PATH, "/bookstore/books")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(serverSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(NetworkAttributes.NETWORK_PEER_PORT)); + assertThat(serverSpan.getAttributes(), hasAttribute(ClientAttributes.CLIENT_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(ClientAttributes.CLIENT_PORT)); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_SCHEME, "http")); + assertThat(serverSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PROTOCOL_VERSION, "1.1")); + String userAgent = serverSpan.getAttributes().get(UserAgentAttributes.USER_AGENT_ORIGINAL); + assertNotNull(userAgent); + assertThat(userAgent, containsString("Apache-CXF/")); + assertThat(serverSpan.getInstrumentationScopeInfo().getName(), equalTo("jaxrs-server-test")); + } + @Test public void testThatNewInnerSpanIsCreatedUsingAsyncInvocation() throws InterruptedException { final Context parentContext = fromRandom(); @@ -254,7 +314,7 @@ public void testThatNewSpansAreCreatedWhenNotProvidedUsingMultipleAsyncClients() final WebClient client = createWebClient("/bookstore/books", new OpenTelemetryClientProvider(otelRule.getOpenTelemetry(), "jaxrs-client-test")); - // The intention is to make a calls one after another, not in parallel, to ensure the + // The intention is to make multiple calls one after another, not in parallel, to ensure the // thread have trace contexts cleared out. IntStream.range(0, 4).mapToObj(index -> client.async().get()).map(this::get) .forEach(r -> assertEquals(Status.OK.getStatusCode(), r.getStatus())); @@ -264,8 +324,7 @@ public void testThatNewSpansAreCreatedWhenNotProvidedUsingMultipleAsyncClients() IntStream.range(0, 4).map(index -> index * 3).forEach(index -> { assertThat(otelRule.getSpans().get(index).getName(), equalTo("Get Books")); assertThat(otelRule.getSpans().get(index + 1).getName(), equalTo("GET /bookstore/books")); - assertThat(otelRule.getSpans().get(index + 2).getName(), - equalTo("GET " + client.getCurrentURI())); + assertThat(otelRule.getSpans().get(index + 2).getName(), equalTo("GET " + client.getCurrentURI())); }); } @@ -274,7 +333,7 @@ public void testThatNewSpansAreCreatedWhenNotProvidedUsingMultipleClients() thro final WebClient client = createWebClient("/bookstore/books", new OpenTelemetryClientProvider(otelRule.getOpenTelemetry(), "jaxrs-client-test")); - // The intention is to make a calls one after another, not in parallel, to ensure the + // The intention is to make multiple calls one after another, not in parallel, to ensure the // thread have trace contexts cleared out. IntStream.range(0, 4).mapToObj(index -> client.get()) .forEach(r -> assertEquals(Status.OK.getStatusCode(), r.getStatus())); @@ -284,8 +343,7 @@ public void testThatNewSpansAreCreatedWhenNotProvidedUsingMultipleClients() thro IntStream.range(0, 4).map(index -> index * 3).forEach(index -> { assertThat(otelRule.getSpans().get(index).getName(), equalTo("Get Books")); assertThat(otelRule.getSpans().get(index + 1).getName(), equalTo("GET /bookstore/books")); - assertThat(otelRule.getSpans().get(index + 2).getName(), - equalTo("GET " + client.getCurrentURI())); + assertThat(otelRule.getSpans().get(index + 2).getName(), equalTo("GET " + client.getCurrentURI())); }); } @@ -395,9 +453,37 @@ public void testThatErrorSpanIsCreatedOnExceptionWhenNotProvided() { assertEquals(Status.INTERNAL_SERVER_ERROR.getStatusCode(), r.getStatus()); assertThat(otelRule.getSpans().toString(), otelRule.getSpans().size(), equalTo(1)); - assertThat(otelRule.getSpans().get(0).getName(), equalTo("GET /bookstore/books/exception")); - assertThat(otelRule.getSpans().get(0).getAttributes(), - hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 500L)); + SpanData serverSpan = otelRule.getSpans().get(0); + + assertThat(serverSpan.getName(), equalTo("GET /bookstore/books/exception")); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 500L)); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "GET")); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_PATH, "/bookstore/books/exception")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(serverSpan.getAttributes(), hasAttribute(ErrorAttributes.ERROR_TYPE, String.valueOf(500))); + } + + @Test + public void testClientSpanAttributesOnException() { + final Response r = createWebClient("/bookstore/books/exception", + new OpenTelemetryClientProvider(otelRule.getOpenTelemetry(), "jaxrs-client-test")) + .get(); + + assertEquals(Status.INTERNAL_SERVER_ERROR.getStatusCode(), r.getStatus()); + + assertThat(otelRule.getSpans().toString(), otelRule.getSpans().size(), equalTo(2)); + + SpanData clientSpan = otelRule.getSpans().get(1); + assertThat(clientSpan.getName(), equalTo("GET http://localhost:" + PORT + "/bookstore/books/exception")); + assertThat(clientSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "GET")); + assertThat(clientSpan.getAttributes(), hasAttribute(UrlAttributes.URL_FULL, + "http://localhost:" + PORT + "/bookstore/books/exception")); + assertThat(clientSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(clientSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(clientSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, "localhost")); + assertThat(clientSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_PORT, Long.valueOf(PORT))); + assertThat(clientSpan.getAttributes(), hasAttribute(ErrorAttributes.ERROR_TYPE, String.valueOf(500))); } @Test diff --git a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentelemetry/OpenTelemetryTracingTest.java b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentelemetry/OpenTelemetryTracingTest.java index f3e500dcc1e..71a9f499e2f 100644 --- a/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentelemetry/OpenTelemetryTracingTest.java +++ b/systests/tracing/src/test/java/org/apache/cxf/systest/jaxws/tracing/opentelemetry/OpenTelemetryTracingTest.java @@ -52,7 +52,14 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.sdk.testing.junit4.OpenTelemetryRule; +import io.opentelemetry.sdk.trace.data.SpanData; +import io.opentelemetry.semconv.ClientAttributes; +import io.opentelemetry.semconv.ErrorAttributes; import io.opentelemetry.semconv.HttpAttributes; +import io.opentelemetry.semconv.NetworkAttributes; +import io.opentelemetry.semconv.ServerAttributes; +import io.opentelemetry.semconv.UrlAttributes; +import io.opentelemetry.semconv.UserAgentAttributes; import org.junit.After; import org.junit.BeforeClass; @@ -61,10 +68,12 @@ import static org.apache.cxf.systest.jaxrs.tracing.opentelemetry.HasAttribute.hasAttribute; import static org.awaitility.Awaitility.await; +import static org.hamcrest.CoreMatchers.containsString; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.not; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -131,7 +140,24 @@ public void testThatNewSpanIsCreatedWhenNotProvided() throws Exception { assertThat(otelRule.getSpans().size(), equalTo(2)); assertThat(otelRule.getSpans().get(0).getName(), equalTo("Get Books")); - assertThat(otelRule.getSpans().get(1).getName(), equalTo("POST /BookStore")); + + SpanData serverSpan = otelRule.getSpans().get(1); + assertThat(serverSpan.getName(), equalTo("POST /BookStore")); + assertThat(serverSpan.getKind(), equalTo(SpanKind.SERVER)); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "POST")); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_PATH, "/BookStore")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(serverSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(NetworkAttributes.NETWORK_PEER_PORT)); + assertThat(serverSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PROTOCOL_VERSION, "1.1")); + assertThat(serverSpan.getAttributes(), hasAttribute(ClientAttributes.CLIENT_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(ClientAttributes.CLIENT_PORT)); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_SCHEME, "http")); + String userAgent = serverSpan.getAttributes().get(UserAgentAttributes.USER_AGENT_ORIGINAL); + assertNotNull(userAgent); + assertThat(userAgent, containsString("Apache-CXF/")); } @Test @@ -161,11 +187,33 @@ public void testThatNewChildSpanIsCreatedWhenParentIsProvided() throws Exception assertThat(otelRule.getSpans().size(), equalTo(3)); assertThat(otelRule.getSpans().get(0).getName(), equalTo("Get Books")); assertThat(otelRule.getSpans().get(0).getParentSpanContext().isValid(), equalTo(true)); - assertThat(otelRule.getSpans().get(1).getName(), equalTo("POST /BookStore")); - assertThat(otelRule.getSpans().get(1).getKind(), equalTo(SpanKind.SERVER)); - assertThat(otelRule.getSpans().get(2).getName(), - equalTo("POST http://localhost:" + PORT + "/BookStore")); - assertThat(otelRule.getSpans().get(2).getKind(), equalTo(SpanKind.CLIENT)); + + SpanData serverSpan = otelRule.getSpans().get(1); + assertThat(serverSpan.getName(), equalTo("POST /BookStore")); + assertThat(serverSpan.getKind(), equalTo(SpanKind.SERVER)); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "POST")); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_PATH, "/BookStore")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(serverSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(NetworkAttributes.NETWORK_PEER_PORT)); + assertThat(serverSpan.getAttributes(), hasAttribute(ClientAttributes.CLIENT_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(ClientAttributes.CLIENT_PORT)); + + assertThat(serverSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PROTOCOL_VERSION, "1.1")); + + SpanData clientSpan = otelRule.getSpans().get(2); + assertThat(clientSpan.getName(), equalTo("POST http://localhost:" + PORT + "/BookStore")); + assertThat(clientSpan.getKind(), equalTo(SpanKind.CLIENT)); + assertThat(clientSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 200L)); + assertThat(clientSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "POST")); + assertThat(clientSpan.getAttributes(), hasAttribute(UrlAttributes.URL_FULL, + "http://localhost:" + PORT + "/BookStore")); + assertThat(clientSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(clientSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(clientSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, "localhost")); + assertThat(clientSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_PORT, Long.valueOf(PORT))); } @Test @@ -190,7 +238,7 @@ public void testThatProvidedSpanIsNotClosedWhenActive() throws Exception { assertThat(otelRule.getSpans().get(1).getInstrumentationScopeInfo().getName(), equalTo("jaxws-server-test")); assertThat(otelRule.getSpans().get(2).getName(), - equalTo("POST http://localhost:" + PORT + "/BookStore")); + equalTo("POST http://localhost:" + PORT + "/BookStore")); assertThat(otelRule.getSpans().get(2).getParentSpanContext().isValid(), equalTo(true)); assertThat(otelRule.getSpans().get(2).getInstrumentationScopeInfo().getName(), equalTo("jaxws-client-test")); @@ -235,11 +283,32 @@ public void testThatNewChildSpanIsCreatedWhenParentIsProvidedInCaseOfFault() thr } assertThat(otelRule.getSpans().size(), equalTo(2)); - assertThat(otelRule.getSpans().get(0).getName(), equalTo("POST /BookStore")); - assertThat(otelRule.getSpans().get(0).getAttributes(), - hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 500L)); - assertThat(otelRule.getSpans().get(1).getName(), - equalTo("POST http://localhost:" + PORT + "/BookStore")); + + SpanData serverSpan = otelRule.getSpans().get(0); + assertThat(serverSpan.getName(), equalTo("POST /BookStore")); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 500L)); + assertThat(serverSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "POST")); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_PATH, "/BookStore")); + assertThat(serverSpan.getAttributes(), hasAttribute(UrlAttributes.URL_SCHEME, "http")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(serverSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(serverSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(NetworkAttributes.NETWORK_PEER_PORT)); + assertThat(serverSpan.getAttributes(), hasAttribute(ClientAttributes.CLIENT_ADDRESS, "127.0.0.1")); + assertNotNull(serverSpan.getAttributes().get(ClientAttributes.CLIENT_PORT)); + assertThat(serverSpan.getAttributes(), hasAttribute(ErrorAttributes.ERROR_TYPE, String.valueOf(500))); + + SpanData clientSpan = otelRule.getSpans().get(1); + assertThat(clientSpan.getName(), equalTo("POST http://localhost:" + PORT + "/BookStore")); + assertThat(clientSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_RESPONSE_STATUS_CODE, 500L)); + assertThat(clientSpan.getAttributes(), hasAttribute(HttpAttributes.HTTP_REQUEST_METHOD, "POST")); + assertThat(clientSpan.getAttributes(), hasAttribute(UrlAttributes.URL_FULL, + "http://localhost:" + PORT + "/BookStore")); + assertThat(clientSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_ADDRESS, "localhost")); + assertThat(clientSpan.getAttributes(), hasAttribute(ServerAttributes.SERVER_PORT, Long.valueOf(PORT))); + assertThat(clientSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_ADDRESS, "localhost")); + assertThat(clientSpan.getAttributes(), hasAttribute(NetworkAttributes.NETWORK_PEER_PORT, Long.valueOf(PORT))); + assertThat(clientSpan.getAttributes(), hasAttribute(ErrorAttributes.ERROR_TYPE, String.valueOf(500))); } @Test From 4cb2fc8d52c01f402d632d447cf5fdf26b2f371e Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 13 Sep 2024 17:37:13 -0400 Subject: [PATCH 113/430] CXF-9055: Follow OpenTelemetry semconv for trace span and its attributes (minor code cleanups) --- .../opentelemetry/OpenTelemetryStartInterceptor.java | 5 +++-- .../tracing/opentelemetry/jaxrs/OpenTelemetryProvider.java | 6 +++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/OpenTelemetryStartInterceptor.java b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/OpenTelemetryStartInterceptor.java index d7aa118cc40..8a45b644ab6 100644 --- a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/OpenTelemetryStartInterceptor.java +++ b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/OpenTelemetryStartInterceptor.java @@ -71,8 +71,9 @@ public void handleMessage(Message message) throws Fault { span.setAttribute(NetworkAttributes.NETWORK_PROTOCOL_VERSION, protocolVersion); } - if (request.getHeader("User-Agent") != null) { - span.setAttribute(UserAgentAttributes.USER_AGENT_ORIGINAL, request.getHeader("User-Agent")); + final String userAgent = request.getHeader("User-Agent"); + if (userAgent != null) { + span.setAttribute(UserAgentAttributes.USER_AGENT_ORIGINAL, userAgent); } } } diff --git a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/jaxrs/OpenTelemetryProvider.java b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/jaxrs/OpenTelemetryProvider.java index 4b8759fdf9d..a3d02509fa7 100644 --- a/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/jaxrs/OpenTelemetryProvider.java +++ b/integration/tracing/tracing-opentelemetry/src/main/java/org/apache/cxf/tracing/opentelemetry/jaxrs/OpenTelemetryProvider.java @@ -76,7 +76,11 @@ public void filter(final ContainerRequestContext requestContext) throws IOExcept String protocolVersion = protocol.split("/")[1]; span.setAttribute(NetworkAttributes.NETWORK_PROTOCOL_VERSION, protocolVersion); } - span.setAttribute(UserAgentAttributes.USER_AGENT_ORIGINAL, request.getHeader("User-Agent")); + + final String userAgent = request.getHeader("User-Agent"); + if (userAgent != null) { + span.setAttribute(UserAgentAttributes.USER_AGENT_ORIGINAL, userAgent); + } } if (holder != null) { From 5820a625f1485793b148e1479a37989ebd4bc15b Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 15 Sep 2024 11:25:16 -0400 Subject: [PATCH 114/430] Extract Openfeign version to samples/pom.xml in order to simplify dependency updates / backports (#2053) --- .../main/release/samples/jax_rs/tracing_micrometer/pom.xml | 6 +++--- .../release/samples/jax_rs/tracing_opentelemetry/pom.xml | 4 ++-- .../main/release/samples/jax_rs/tracing_opentracing/pom.xml | 4 ++-- distribution/src/main/release/samples/pom.xml | 1 + 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml index bcfa3800b06..a34cd2ff6aa 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml @@ -131,17 +131,17 @@ io.github.openfeign feign-core - 13.3 + ${cxf.openfeign.version} io.github.openfeign feign-httpclient - 13.3 + ${cxf.openfeign.version} io.github.openfeign feign-micrometer - 13.3 + ${cxf.openfeign.version} io.micrometer diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml index d9076c9b9b0..85573534006 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml @@ -131,12 +131,12 @@ io.github.openfeign feign-core - 13.3 + ${cxf.openfeign.version} io.github.openfeign feign-httpclient - 13.3 + ${cxf.openfeign.version} io.github.openfeign.opentracing diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml index 9ef8d9bd98d..88d723355fb 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml @@ -134,12 +134,12 @@ io.github.openfeign feign-core - 13.3 + ${cxf.openfeign.version} io.github.openfeign feign-httpclient - 13.3 + ${cxf.openfeign.version} io.github.openfeign.opentracing diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 6f8f2dd3d41..61f48190b5b 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -52,6 +52,7 @@ 5.13.1.Final 2.6.7 4.7.0 + 13.3 From 7e32bd3024e4a33d4a1e6af044da794b8b9fe4e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 07:57:11 -0400 Subject: [PATCH 115/430] Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.5 to 3.2.6 (#2065) Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.2.5 to 3.2.6. - [Release notes](https://github.com/apache/maven-gpg-plugin/releases) - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.5...maven-gpg-plugin-3.2.6) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-gpg-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index a6cd3127357..c33bc4efab4 100644 --- a/pom.xml +++ b/pom.xml @@ -361,7 +361,7 @@ maven-gpg-plugin - 3.2.5 + 3.2.6 From 54bdaca5fc884d107c4e56f7a762a1ec8b165695 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 07:57:27 -0400 Subject: [PATCH 116/430] Bump org.apache.camel.springboot:camel-spring-boot-dependencies (#2066) Bumps org.apache.camel.springboot:camel-spring-boot-dependencies from 4.7.0 to 4.8.0. --- updated-dependencies: - dependency-name: org.apache.camel.springboot:camel-spring-boot-dependencies dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 61f48190b5b..ece1ba30e58 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -51,7 +51,7 @@ 2.3.232 5.13.1.Final 2.6.7 - 4.7.0 + 4.8.0 13.3 From ca064885eb1df56fca53b918852a530a8295eb61 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 07:57:49 -0400 Subject: [PATCH 117/430] Bump github/codeql-action from 3.26.6 to 3.26.7 (#2067) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.6 to 3.26.7. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/4dd16135b69a43b6c8efb853346f8437d92d3c93...8214744c546c1e5c8f03dde8fab3a7353211988d) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index afca6c92240..42f3fd996ac 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/init@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@4dd16135b69a43b6c8efb853346f8437d92d3c93 # v3.26.6 + uses: github/codeql-action/analyze@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 4f998eaed0b..f5a186d5b51 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@4dd16135b69a43b6c8efb853346f8437d92d3c93 #tag=v2 + uses: github/codeql-action/upload-sarif@8214744c546c1e5c8f03dde8fab3a7353211988d #tag=v2 with: sarif_file: results.sarif From 1d1f0bdc16827299c7d151113d02165f29ce5548 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Sep 2024 07:58:05 -0400 Subject: [PATCH 118/430] Bump actions/setup-java from 4.2.2 to 4.3.0 (#2068) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.2.2 to 4.3.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/6a0805fcefea3d4657a47ac4c165951e33482018...2dfa2011c5b2a0f1489bf9e433881c92c1631f88) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pull-request-build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 42f3fd996ac..e6f2d54a63c 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 - name: Setup JDK 17 - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 # v4.2.2 + uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 # v4.3.0 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/pull-request-build.yml b/.github/workflows/pull-request-build.yml index 019ba445851..6d7fac34400 100644 --- a/.github/workflows/pull-request-build.yml +++ b/.github/workflows/pull-request-build.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v3.6.0 - name: Set up JDK 17 - uses: actions/setup-java@6a0805fcefea3d4657a47ac4c165951e33482018 # v4.2.2 + uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 # v4.3.0 with: java-version: '17' distribution: 'temurin' From f6e2088d1f4948a515f20569b43971e0541992df Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 18 Sep 2024 07:57:32 -0400 Subject: [PATCH 119/430] Bump cxf.openfeign.version from 13.3 to 13.4 (#2070) Bumps `cxf.openfeign.version` from 13.3 to 13.4. Updates `io.github.openfeign:feign-core` from 13.3 to 13.4 - [Release notes](https://github.com/openfeign/feign/releases) - [Changelog](https://github.com/OpenFeign/feign/blob/master/CHANGELOG.md) - [Commits](https://github.com/openfeign/feign/compare/13.3...13.4) Updates `io.github.openfeign:feign-httpclient` from 13.3 to 13.4 - [Release notes](https://github.com/openfeign/feign/releases) - [Changelog](https://github.com/OpenFeign/feign/blob/master/CHANGELOG.md) - [Commits](https://github.com/openfeign/feign/compare/13.3...13.4) Updates `io.github.openfeign:feign-micrometer` from 13.3 to 13.4 - [Release notes](https://github.com/openfeign/feign/releases) - [Changelog](https://github.com/OpenFeign/feign/blob/master/CHANGELOG.md) - [Commits](https://github.com/openfeign/feign/compare/13.3...13.4) --- updated-dependencies: - dependency-name: io.github.openfeign:feign-core dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.github.openfeign:feign-httpclient dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.github.openfeign:feign-micrometer dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index ece1ba30e58..d16005ef541 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -52,7 +52,7 @@ 5.13.1.Final 2.6.7 4.8.0 - 13.3 + 13.4 From 0136e233c8b183444d6d7ad3f20cf5dfd7db147d Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 18 Sep 2024 20:31:32 -0400 Subject: [PATCH 120/430] CXF-9039: Run Jakarta RESTful Web Services 3.1 TCK (initial commit) --- tck/cxf-tck/README.md | 15 + tck/cxf-tck/j2ee.pass | 16 + tck/cxf-tck/javajoe.pass | 16 + tck/cxf-tck/pom.xml | 500 ++++++++++++++++++ .../tck/CxfApplicationArchiveProcessor.java | 35 ++ .../apache/cxf/tck/CxfLoadableExtension.java | 27 + ...boss.arquillian.core.spi.LoadableExtension | 1 + ..._securitycontext_basic_web.war.sun-web.xml | 31 ++ ...equestcontext_security_web.war.sun-web.xml | 27 + 9 files changed, 668 insertions(+) create mode 100644 tck/cxf-tck/README.md create mode 100644 tck/cxf-tck/j2ee.pass create mode 100644 tck/cxf-tck/javajoe.pass create mode 100644 tck/cxf-tck/pom.xml create mode 100644 tck/cxf-tck/src/main/java/org/apache/cxf/tck/CxfApplicationArchiveProcessor.java create mode 100644 tck/cxf-tck/src/main/java/org/apache/cxf/tck/CxfLoadableExtension.java create mode 100644 tck/cxf-tck/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension create mode 100644 tck/cxf-tck/src/main/resources/jaxrs_ee_core_securitycontext_basic_web.war.sun-web.xml create mode 100644 tck/cxf-tck/src/main/resources/jaxrs_ee_rs_container_requestcontext_security_web.war.sun-web.xml diff --git a/tck/cxf-tck/README.md b/tck/cxf-tck/README.md new file mode 100644 index 00000000000..7e57cf5e2a3 --- /dev/null +++ b/tck/cxf-tck/README.md @@ -0,0 +1,15 @@ +# Jakarta REST TCK + +The **Jakarta REST TCK** is a standalone kit for testing compliance of an implementation with the Jakarta REST specification. + +**Note:** This TCK contains *only* tests being added since Jakarta REST 3.0. To proof compliance as part of a certification review, additional test have to be performed. Those are part of the Jakarta Platform TCK for historic reasons. + +## Performing Test + +* Execute `mvn verify`. +* Find the test result as part of Maven's output on the console or refer to the surefire reports. + +## Source + +* `https://github.com/jakartaee/rest/blob/3.1.0/jersey-tck/` + diff --git a/tck/cxf-tck/j2ee.pass b/tck/cxf-tck/j2ee.pass new file mode 100644 index 00000000000..906340cd6a0 --- /dev/null +++ b/tck/cxf-tck/j2ee.pass @@ -0,0 +1,16 @@ +# +# Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License v. 2.0, which is available at +# http://www.eclipse.org/legal/epl-2.0. +# +# This Source Code may also be made available under the following Secondary +# Licenses when the conditions for such availability set forth in the +# Eclipse Public License v. 2.0 are satisfied: GNU General Public License, +# version 2 with the GNU Classpath Exception, which is available at +# https://www.gnu.org/software/classpath/license.html. +# +# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 +# +AS_ADMIN_USERPASSWORD=j2ee \ No newline at end of file diff --git a/tck/cxf-tck/javajoe.pass b/tck/cxf-tck/javajoe.pass new file mode 100644 index 00000000000..4e595a61687 --- /dev/null +++ b/tck/cxf-tck/javajoe.pass @@ -0,0 +1,16 @@ +# +# Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved. +# +# This program and the accompanying materials are made available under the +# terms of the Eclipse Public License v. 2.0, which is available at +# http://www.eclipse.org/legal/epl-2.0. +# +# This Source Code may also be made available under the following Secondary +# Licenses when the conditions for such availability set forth in the +# Eclipse Public License v. 2.0 are satisfied: GNU General Public License, +# version 2 with the GNU Classpath Exception, which is available at +# https://www.gnu.org/software/classpath/license.html. +# +# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 +# +AS_ADMIN_USERPASSWORD=javajoe \ No newline at end of file diff --git a/tck/cxf-tck/pom.xml b/tck/cxf-tck/pom.xml new file mode 100644 index 00000000000..d3a77e769bb --- /dev/null +++ b/tck/cxf-tck/pom.xml @@ -0,0 +1,500 @@ + + + + 4.0.0 + + cxf-rest-tck + jar + + + jakarta.ws.rs + all + 3.1.0 + + + Jakarta RESTful WS Compliance + This test verifies the compliance of Apache CXF with Jakarta REST + + + 11 + 11 + 4.1.0-SNAPSHOT + 7.0.16 + ${project.build.directory}/glassfish7 + 10.0.0 + 5.11.0 + 3.1.0 + jakarta-restful-ws-tck + 1.8.0.Final + + + + + + org.junit + junit-bom + ${junit.jupiter.version} + pom + import + + + org.apache.cxf + cxf-bom + ${cxf.version} + pom + import + + + org.jboss.arquillian + arquillian-bom + ${arquillian.version} + import + pom + + + + + + + org.junit.jupiter + junit-jupiter + test + + + + org.glassfish.hk2 + hk2-locator + 3.0.0 + + + + com.sun.xml.bind + jaxb-impl + 4.0.5 + runtime + + + + com.github.hantsy.arquillian-container-glassfish-jakarta + arquillian-glassfish-managed-jakarta + 7.0.10 + + + + jakarta.ws.rs + ${tck.artifactId} + ${project.version} + test + + + + jakarta.ws.rs + jakarta.ws.rs-api + ${project.version} + test + + + + org.hamcrest + hamcrest + test + + + + org.glassfish.main.common + simple-glassfish-api + ${glassfish.container.version} + test + + + + org.jboss.arquillian.junit5 + arquillian-junit5-container + test + + + + jakarta.platform + jakarta.jakartaee-api + ${jakarta.platform.version} + provided + + + + commons-httpclient + commons-httpclient + 3.1 + + + + org.apache.cxf + cxf-core + test + + + + org.apache.cxf + cxf-rt-transports-http + test + + + + org.apache.cxf + cxf-rt-frontend-jaxrs + test + + + + org.apache.cxf + cxf-rt-rs-sse + test + + + + org.apache.cxf + cxf-rt-rs-client + test + + + + org.netbeans.tools + sigtest-maven-plugin + 1.4 + + + + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.2.0 + + + unpack + pre-integration-test + + unpack + + + + + org.glassfish.main.distributions + glassfish + ${glassfish.container.version} + zip + false + ${project.build.directory} + + + + + + copy + pre-integration-test + + copy + + + + + org.apache.cxf + cxf-rt-rs-client + ${cxf.version} + jar + true + ${glassfish.home}/glassfish/lib + + + org.apache.cxf + cxf-core + ${cxf.version} + jar + true + ${glassfish.home}/glassfish/lib + + + org.apache.cxf + cxf-rt-frontend-jaxrs + ${cxf.version} + jar + true + ${glassfish.home}/glassfish/lib + + + org.apache.cxf + cxf-rt-transports-http + ${cxf.version} + jar + true + ${glassfish.home}/glassfish/lib + + + org.apache.cxf + cxf-rt-rs-sse + ${cxf.version} + jar + true + ${glassfish.home}/glassfish/lib + + + jakarta.ws.rs + jakarta.ws.rs-api + ${jakarta.rest.version} + jar + true + ${glassfish.home}/glassfish/modules + jakarta.ws.rs-api.jar + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.4.1 + + + StopDomain1 + pre-integration-test + + exec + + + ${project.build.directory}/glassfish7/glassfish/bin/asadmin + + stop-domain + + + + + UpdateConfigs + pre-integration-test + + exec + + + zip + + -d + ${project.build.directory}/glassfish7/glassfish/modules/jersey-server.jar + META-INF/services/jakarta.ws.rs.ext.RuntimeDelegate + + + + + StartDomain1 + pre-integration-test + + exec + + + ${project.build.directory}/glassfish7/glassfish/bin/asadmin + + start-domain + + + + + Enable Trace requests + pre-integration-test + + exec + + + ${project.build.directory}/glassfish7/glassfish/bin/asadmin + + set + server-config.network-config.protocols.protocol.http-listener-1.http.trace-enabled=true + + + + + Delete User j2ee + pre-integration-test + + exec + + + ${project.build.directory}/glassfish7/glassfish/bin/asadmin + + --passwordfile + ${project.basedir}/j2ee.pass + delete-file-user + j2ee + + + 0 + 1 + + + + + Add User j2ee + pre-integration-test + + exec + + + ${project.build.directory}/glassfish7/glassfish/bin/asadmin + + --passwordfile + ${project.basedir}/j2ee.pass + create-file-user + --groups + staff:mgr + j2ee + + + + + Delete User javajoe + pre-integration-test + + exec + + + ${project.build.directory}/glassfish7/glassfish/bin/asadmin + + --passwordfile + ${project.basedir}/javajoe.pass + delete-file-user + javajoe + + + 0 + 1 + + + + + Add User javajoe + pre-integration-test + + exec + + + ${project.build.directory}/glassfish7/glassfish/bin/asadmin + + --passwordfile + ${project.basedir}/javajoe.pass + create-file-user + --groups + guest + javajoe + + + + + list users + pre-integration-test + + exec + + + ${project.build.directory}/glassfish7/glassfish/bin/asadmin + + list-file-users + + + + + StopDomain + pre-integration-test + + exec + + + ${project.build.directory}/glassfish7/glassfish/bin/asadmin + + stop-domain + + + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + 3.5.0 + + + gf-tests + + integration-test + verify + + + + **/SeBootstrapIT.java + + jakarta.ws.rs:${tck.artifactId} + + ${glassfish.home} + org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet + localhost + 8080 + true + j2ee + j2ee + javajoe + javajoe + ee.jakarta.tck.ws.rs.lib.implementation.sun.common.SunRIURL + ${project.build.directory}/jdk11-bundle + jakarta.xml.bind + ${glassfish.home}/glassfish/modules/jakarta.ws.rs-api.jar:${glassfish.home}/glassfish/modules/jakarta.xml.bind-api.jar:${project.build.directory}/jdk11-bundle/java.base:${project.build.directory}/jdk11-bundle/java.rmi:${project.build.directory}/jdk11-bundle/java.sql:${project.build.directory}/jdk11-bundle/java.naming + + + ${glassfish.home} + + + + + se-tests + + integration-test + verify + + + + **/SeBootstrapIT.java + + jakarta.ws.rs:${tck.artifactId} + + + + + + + + + + central + https://repo.maven.apache.org/maven2 + + + jitpack.io + https://jitpack.io + + + diff --git a/tck/cxf-tck/src/main/java/org/apache/cxf/tck/CxfApplicationArchiveProcessor.java b/tck/cxf-tck/src/main/java/org/apache/cxf/tck/CxfApplicationArchiveProcessor.java new file mode 100644 index 00000000000..8e42d495dcd --- /dev/null +++ b/tck/cxf-tck/src/main/java/org/apache/cxf/tck/CxfApplicationArchiveProcessor.java @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package org.apache.cxf.tck; + +import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor; +import org.jboss.arquillian.test.spi.TestClass; +import org.jboss.shrinkwrap.api.Archive; +import org.jboss.shrinkwrap.api.spec.WebArchive; + +public class CxfApplicationArchiveProcessor implements ApplicationArchiveProcessor { + @Override + public void process(Archive archive, TestClass testClass) { + if ("jaxrs_ee_rs_container_requestcontext_security_web.war".equals(archive.getName())) { + WebArchive webArchive = (WebArchive) archive; + webArchive.addAsWebInfResource("jaxrs_ee_rs_container_requestcontext_security_web.war.sun-web.xml", "sun-web.xml"); + } else if ("jaxrs_ee_core_securitycontext_basic_web.war".equals(archive.getName())) { + WebArchive webArchive = (WebArchive) archive; + webArchive.addAsWebInfResource("jaxrs_ee_core_securitycontext_basic_web.war.sun-web.xml", "sun-web.xml"); + } + } +} diff --git a/tck/cxf-tck/src/main/java/org/apache/cxf/tck/CxfLoadableExtension.java b/tck/cxf-tck/src/main/java/org/apache/cxf/tck/CxfLoadableExtension.java new file mode 100644 index 00000000000..3dd69ca2469 --- /dev/null +++ b/tck/cxf-tck/src/main/java/org/apache/cxf/tck/CxfLoadableExtension.java @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2021 Oracle and/or its affiliates. All rights reserved. + * + * This program and the accompanying materials are made available under the + * terms of the Eclipse Public License v. 2.0, which is available at + * http://www.eclipse.org/legal/epl-2.0. + * + * This Source Code may also be made available under the following Secondary + * Licenses when the conditions for such availability set forth in the + * Eclipse Public License v. 2.0 are satisfied: GNU General Public License, + * version 2 with the GNU Classpath Exception, which is available at + * https://www.gnu.org/software/classpath/license.html. + * + * SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0 + */ + +package org.apache.cxf.tck; + +import org.jboss.arquillian.container.test.spi.client.deployment.ApplicationArchiveProcessor; +import org.jboss.arquillian.core.spi.LoadableExtension; + +public class CxfLoadableExtension implements LoadableExtension { + @Override + public void register(ExtensionBuilder extensionBuilder) { + extensionBuilder.service(ApplicationArchiveProcessor.class, CxfApplicationArchiveProcessor.class); + } +} diff --git a/tck/cxf-tck/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension b/tck/cxf-tck/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension new file mode 100644 index 00000000000..c70bb77d8cc --- /dev/null +++ b/tck/cxf-tck/src/main/resources/META-INF/services/org.jboss.arquillian.core.spi.LoadableExtension @@ -0,0 +1 @@ +org.apache.cxf.tck.CxfLoadableExtension \ No newline at end of file diff --git a/tck/cxf-tck/src/main/resources/jaxrs_ee_core_securitycontext_basic_web.war.sun-web.xml b/tck/cxf-tck/src/main/resources/jaxrs_ee_core_securitycontext_basic_web.war.sun-web.xml new file mode 100644 index 00000000000..84d84bc0ca9 --- /dev/null +++ b/tck/cxf-tck/src/main/resources/jaxrs_ee_core_securitycontext_basic_web.war.sun-web.xml @@ -0,0 +1,31 @@ + + + + + + jaxrs_ee_core_securitycontext_basic_web + + DIRECTOR + j2ee + + + OTHERROLE + javajoe + + diff --git a/tck/cxf-tck/src/main/resources/jaxrs_ee_rs_container_requestcontext_security_web.war.sun-web.xml b/tck/cxf-tck/src/main/resources/jaxrs_ee_rs_container_requestcontext_security_web.war.sun-web.xml new file mode 100644 index 00000000000..1ba5a0796ba --- /dev/null +++ b/tck/cxf-tck/src/main/resources/jaxrs_ee_rs_container_requestcontext_security_web.war.sun-web.xml @@ -0,0 +1,27 @@ + + + + + + jaxrs_ee_rs_container_requestcontext_security_web + + DIRECTOR + j2ee + + From c9697a62c893205a14a807f6311cf0fa62c6413d Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 19 Sep 2024 10:38:26 -0400 Subject: [PATCH 121/430] CXF-9039: Run Jakarta RESTful Web Services 3.1 TCK (initial Jenkins pipeline) --- tck/Jenkinsfile | 152 +++++++++--------------------------------------- 1 file changed, 28 insertions(+), 124 deletions(-) diff --git a/tck/Jenkinsfile b/tck/Jenkinsfile index 05ec0b5b03b..32a8659008f 100644 --- a/tck/Jenkinsfile +++ b/tck/Jenkinsfile @@ -4,20 +4,15 @@ pipeline { } tools { - ant 'ant_1.10.10' maven 'maven_3.6.3' - jdk 'jdk_1.8_latest' + jdk 'jdk_11_latest' } - - environment { - ANT_OPTS = "-Djavax.xml.accessExternalSchema=all" - } - + stages { stage("Initialization") { steps { script { - currentBuild.displayName = "#${BUILD_NUMBER} CXF ${params.Version} JAX-RS 2.1 TCK" + currentBuild.displayName = "#${BUILD_NUMBER} CXF ${params.Version} JAX-RS 3.1 TCK" } } } @@ -34,151 +29,60 @@ pipeline { echo "PATH = ${PATH}" echo "M2_HOME = ${M2_HOME}" echo "JAVA_HOME = ${JAVA_HOME}" - echo "ANT_HOME = ${ANT_HOME}" echo "WORKSPACE = ${PWD}" ''' } } - stage('Download JakartaEE TCK') { + stage('Download JakartaEE Restful Services TCK') { steps { checkout([$class: 'GitSCM', - branches: [[name: 'refs/tags/8.0.2']], - userRemoteConfigs: [[url: 'https://github.com/eclipse-ee4j/jakartaee-tck']], - extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'jakartaee-tck']] + branches: [[name: 'refs/tags/3.1.0']], + userRemoteConfigs: [[url: 'https://github.com/jakartaee/rest/']], + extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'rest']] ]) } } - stage('Download Glassfish 5.1.0') { // for display purposes - steps { - sh 'wget https://repo1.maven.org/maven2/org/glassfish/main/distributions/glassfish/5.1.0/glassfish-5.1.0.zip' - sh 'unzip glassfish-5.1.0.zip' - sh 'rm glassfish-5.1.0.zip' - } - } - - stage('Download Apache CXF bits') { + stage('Build JAX-RS TCK') { steps { echo "Using Apache CXF version: " + params.Version - sh "mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DremoteRepositories=https://repository.apache.org/snapshots,https://repository.apache.org -Dartifact=org.apache.cxf:cxf-core:${params.Version}:jar -Dtransitive=false -Ddest=glassfish5/glassfish/lib" - sh "mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DremoteRepositories=https://repository.apache.org/snapshots,https://repository.apache.org -Dartifact=org.apache.cxf:cxf-rt-frontend-jaxrs:${params.Version}:jar -Dtransitive=false -Ddest=glassfish5/glassfish/lib" - sh "mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DremoteRepositories=https://repository.apache.org/snapshots,https://repository.apache.org -Dartifact=org.apache.cxf:cxf-rt-rs-client:${params.Version}:jar -Dtransitive=false -Ddest=glassfish5/glassfish/lib" - sh "mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DremoteRepositories=https://repository.apache.org/snapshots,https://repository.apache.org -Dartifact=org.apache.cxf:cxf-rt-rs-sse:${params.Version}:jar -Dtransitive=false -Ddest=glassfish5/glassfish/lib" - sh "mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DremoteRepositories=https://repository.apache.org/snapshots,https://repository.apache.org -Dartifact=org.apache.cxf:cxf-rt-transports-http:${params.Version}:jar -Dtransitive=false -Ddest=glassfish5/glassfish/lib" - - echo "Including additional dependencies (woodstox, stax2, ...)" - sh "mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DremoteRepositories=https://repository.apache.org/snapshots,https://repository.apache.org -Dartifact=org.apache.cxf:cxf-parent:${params.Version}:pom -Dtransitive=false -Ddest=." - - script { - echo "Detect additional dependencies (woodstox, stax2, ...) versions" - - woodstox_version = sh(returnStdout: true, script: "grep '' cxf-parent-${params.Version}.pom").replaceAll("[\n\r]", "").replaceAll(".+[>](.+)[<].+", '$1') - staxapi_version = sh(returnStdout: true, script: "grep '' cxf-parent-${params.Version}.pom").replaceAll("[\n\r]", "").replaceAll(".+[>](.+)[<].+", '$1') - - sh "mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DremoteRepositories=https://repository.apache.org/snapshots,https://repository.apache.org -Dartifact=com.fasterxml.woodstox:woodstox-core:${woodstox_version}:jar -Dtransitive=false -Ddest=glassfish5/glassfish/lib" - sh "mvn org.apache.maven.plugins:maven-dependency-plugin:2.8:get -DremoteRepositories=https://repository.apache.org/snapshots,https://repository.apache.org -Dartifact=org.codehaus.woodstox:stax2-api:${staxapi_version}:jar -Dtransitive=false -Ddest=glassfish5/glassfish/lib" - } - - sh "rm cxf-parent-${params.Version}.pom" + sh "mvn clean install -f rest" } } - - stage('Prepare JAX-RS TCK build configuration') { - steps { - withEnv(["WORKSPACE = ${PWD}"]) { - sh "wget https://raw.githubusercontent.com/apache/cxf/main/tck/ts.jte.template" - sh "sed -i '" + 's/${version}/' + params.Version + "/g' ts.jte.template" - sh "sed -i '" + 's/${woodstox_version}/' + woodstox_version + "/g' ts.jte.template" - sh "sed -i '" + 's/${staxapi_version}/' + staxapi_version + "/g' ts.jte.template" - sh "sed -i '" + 's#${GF_HOME}#' + "${WORKSPACE}/glassfish5/glassfish" + "#g' ts.jte.template" - sh "cp jakartaee-tck/bin/xml/impl/glassfish/jersey.xml jakartaee-tck/bin/xml/impl/glassfish/cxf.xml" - } - } - } - - stage('Build JAX-RS TCK') { + + stage('Checkout Apache CXF') { steps { - withEnv([ - "WORKSPACE=${pwd()}", - "TS_HOME=${WORKSPACE}/jakartaee-tck", - "javaee_home=${WORKSPACE}/glassfish5", - "GF_HOME=${WORKSPACE}/glassfish5/glassfish", - "AS_JAVA=$JAVA_HOME", - "deliverabledir=jaxrs" - ]) { - sh 'yes | cp -vr ts.jte.template jakartaee-tck/install/jaxrs/bin/ts.jte' - - dir("${TS_HOME}/install/${deliverabledir}/bin") { - sh "ant build.all" - sh "ant update.jaxrs.wars" - } - - dir("${TS_HOME}/release/tools/") { - sh "ant jaxrs" - } - } + checkout([$class: 'GitSCM', + branches: [[name: 'main']], + userRemoteConfigs: [[url: 'https://github.com/apache/cxf/']], + extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'cxf'], [$class: 'CloneOption', shallow: true]] + ]) } } stage('Run JAX-RS TCK') { - steps { - withEnv([ - "WORKSPACE=${pwd()}", - "TS_HOME=${WORKSPACE}/restful-ws-tck", - "javaee_home=${WORKSPACE}/glassfish5", - "GF_HOME=${WORKSPACE}/glassfish5/glassfish", - "AS_JAVA=$JAVA_HOME", - "deliverabledir=jaxrs" - ]) { - sh "cp -r jakartaee-tck/release/JAXRS_BUILD/latest/restful-ws-tck ${WORKSPACE}" - sh "yes | cp -vr ts.jte.template ${TS_HOME}/bin/ts.jte" - - // It seems to be impossible to exclude Jersey from the Glassfish deployment but it - // interferes with Apache CXF, as such some tests cases are failing. Modifying the Jersey - // manifest to exclude 'javax.ws.rs.ext.RuntimeDelegate' from Jersey so the Apache CXF - // implementation will be used reliably all the time. - sh 'zip -d ${WORKSPACE}/glassfish5/glassfish/modules/jersey-server.jar META-INF/services/javax.ws.rs.ext.RuntimeDelegate' + tools { + jdk 'jdk_17_latest' + } - dir("${TS_HOME}/bin") { - sh "ant config.vi" - sh "ant deploy.all" - script { - try { - echo 'Running all TCK tests ...' - sh "ant run.all" - } catch (exc) { - echo 'Some TCK tests have failed, marking build as unstable' - currentBuild.result = 'UNSTABLE' - } - } - } + steps { + dir("${WORKSPACE}/cxf/tck/cxf-tck") { + sh "mvn clean verify -Dcxf.version=${params.Version}" } } - post { - always { - withEnv([ - "WORKSPACE=${pwd()}", - "TS_HOME=${WORKSPACE}/restful-ws-tck", - ]) { - dir("${TS_HOME}/bin") { - sh "ant stop-server -f xml/impl/glassfish/config.vi.xml" - } - - sh "mv /tmp/JT* ${WORKSPACE}" - } - } + post { + always { + junit allowEmptyResults: true, testResults: '**/failsafe-reports/*.xml' + } } } } post { - always { - archiveArtifacts artifacts: 'jakartaee-tck/release/JAXRS_BUILD/latest/restful*.zip', fingerprint: true - archiveArtifacts artifacts: 'JTwork/**', fingerprint: true - archiveArtifacts artifacts: 'JTreport/**', fingerprint: true + always { cleanWs() } - } + } } From 3bceb74bb469657b283995162aa7634070cd54d1 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 19 Sep 2024 10:39:32 -0400 Subject: [PATCH 122/430] Update Spring Boot to 3.3.4 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index d16005ef541..6be4c2448da 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -31,7 +31,7 @@ true UTF-8 - 3.3.3 + 3.3.4 4.1.3 12.0.13 4.1.113.Final diff --git a/parent/pom.xml b/parent/pom.xml index 54cc6b53ea2..0bae7dc4896 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -212,7 +212,7 @@ 2.0.16 2.3 2.3_2 - 3.3.3 + 3.3.4 3.2.6 spring-test 6.3.3 From 0eb3eace90256f3139ea1380990846fcd8e71bd9 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 19 Sep 2024 10:46:10 -0400 Subject: [PATCH 123/430] Update Apache Tomcat to 10.1.30 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 6be4c2448da..b61ec31dc73 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -38,7 +38,7 @@ 4.5.14 5.17.14 2.9.1 - 10.1.28 + 10.1.30 4.0.3.Final 2.11.0 9.11.1 diff --git a/parent/pom.xml b/parent/pom.xml index 0bae7dc4896..ea6ccfb525a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -221,7 +221,7 @@ 5.17.14 2.2.23 2.9.1 - 10.1.28 + 10.1.30 1.8 2.3.17.Final 3.0.4 From dfa30c544c1a5d09e16770b589ae54a486d3138a Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 19 Sep 2024 12:07:14 -0400 Subject: [PATCH 124/430] Update Groovy to 4.0.23 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index ea6ccfb525a..214b93094bc 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -588,7 +588,7 @@ org.apache.groovy groovy - 4.0.22 + 4.0.23 From ddd74e7e65a65d24ce5bfc642a433a020ad10f58 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Sep 2024 08:44:51 -0400 Subject: [PATCH 125/430] Bump cxf.zipkin-reporter.version from 3.4.1 to 3.4.2 (#2076) Bumps `cxf.zipkin-reporter.version` from 3.4.1 to 3.4.2. Updates `io.zipkin.reporter2:zipkin-reporter-brave` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/openzipkin/zipkin-reporter-java/releases) - [Changelog](https://github.com/openzipkin/zipkin-reporter-java/blob/master/RELEASE.md) - [Commits](https://github.com/openzipkin/zipkin-reporter-java/compare/3.4.1...3.4.2) Updates `io.zipkin.reporter2:zipkin-sender-urlconnection` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/openzipkin/zipkin-reporter-java/releases) - [Changelog](https://github.com/openzipkin/zipkin-reporter-java/blob/master/RELEASE.md) - [Commits](https://github.com/openzipkin/zipkin-reporter-java/compare/3.4.1...3.4.2) --- updated-dependencies: - dependency-name: io.zipkin.reporter2:zipkin-reporter-brave dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.zipkin.reporter2:zipkin-sender-urlconnection dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index b61ec31dc73..03b07b33746 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -45,7 +45,7 @@ 5.0.0 1.9.22.1 6.0.3 - 3.4.1 + 3.4.2 2.1 2.31.0 2.3.232 diff --git a/parent/pom.xml b/parent/pom.xml index 214b93094bc..3e329e33e22 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -240,7 +240,7 @@ 2.3.1 3.8.16.Final 2.1 - 3.4.1 + 3.4.2 1.0.1 From 61581177077eadf37960f93d4cd2a37c0c6071f8 Mon Sep 17 00:00:00 2001 From: Andrew Gibb Date: Fri, 20 Sep 2024 22:48:05 +1000 Subject: [PATCH 126/430] CXF-9060 Only import java.net.URI when necessary to avoid unused import warnings (#2075) --- .../apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm b/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm index 5c10fe28d18..8b7149b213d 100644 --- a/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm +++ b/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/template/service.vm @@ -23,8 +23,8 @@ package $service.PackageName; #if ($wsdlLocation != "" && not($useGetResource) && not($wsdlLocation.startsWith("classpath:"))) import java.net.MalformedURLException; -#end import java.net.URI; +#end import java.net.URL; #if ($markGenerated == "true") import jakarta.annotation.Generated; From e7cf74c5e076924f1b7258302e3be21e029d2828 Mon Sep 17 00:00:00 2001 From: Jamie Goodyear Date: Fri, 20 Sep 2024 19:48:10 -0230 Subject: [PATCH 127/430] [CXF-9059] HttpConduit should flush output stream (#2069) * [CXF-9059] HttpConduit should flush output stream ahead of closing connections when HttpClient is autocloseable * Move code to HttpClientHttpConduit * [CXF-9059] Update impl to handle flush IOException --- .../cxf/transport/http/HTTPConduit.java | 24 +-- .../transport/http/HttpClientHTTPConduit.java | 141 ++++++++++-------- 2 files changed, 87 insertions(+), 78 deletions(-) diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java index 801eac24e40..8979b52f3ae 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPConduit.java @@ -168,29 +168,29 @@ public abstract class HTTPConduit public static final String NO_IO_EXCEPTIONS = "org.apache.cxf.transport.no_io_exceptions"; public static final String FORCE_HTTP_VERSION = "org.apache.cxf.transport.http.forceVersion"; - /** - * The HTTP status codes as contextual property (comma-separated integers as String) - * on the outgoing {@link Message} which lead to setting {@code org.apache.cxf.transport.service_not_available} - * for all responses with those status codes. This is used e.g. by the + /** + * The HTTP status codes as contextual property (comma-separated integers as String) + * on the outgoing {@link Message} which lead to setting {@code org.apache.cxf.transport.service_not_available} + * for all responses with those status codes. This is used e.g. by the * {@code org.apache.cxf.clustering.FailoverTargetSelector} to determine if it should do the fail-over. * Default: {@code 404,429,503} as per {@code DEFAULT_SERVICE_NOT_AVAILABLE_ON_HTTP_STATUS_CODES} */ - public static final String SERVICE_NOT_AVAILABLE_ON_HTTP_STATUS_CODES = + public static final String SERVICE_NOT_AVAILABLE_ON_HTTP_STATUS_CODES = "org.apache.cxf.transport.service_not_available_on_http_status_codes"; - - + + /** * The Logger for this class. */ protected static final Logger LOG = LogUtils.getL7dLogger(HTTPConduit.class); - + protected static final Set KNOWN_HTTP_VERBS_WITH_NO_CONTENT = new HashSet<>(Arrays.asList(new String[]{"GET", "HEAD", "OPTIONS", "TRACE"})); protected static final String HTTP_VERSION = SystemPropertyAction.getPropertyOrNull(FORCE_HTTP_VERSION); - private static final Collection DEFAULT_SERVICE_NOT_AVAILABLE_ON_HTTP_STATUS_CODES = + private static final Collection DEFAULT_SERVICE_NOT_AVAILABLE_ON_HTTP_STATUS_CODES = Arrays.asList(404, 429, 503); private static boolean hasLoggedAsyncWarning; @@ -1657,7 +1657,7 @@ protected int doProcessResponseCode() throws IOException { if (exchange != null) { exchange.put(Message.RESPONSE_CODE, rc); final Collection serviceNotAvailableOnHttpStatusCodes = MessageUtils - .getContextualIntegers(outMessage, SERVICE_NOT_AVAILABLE_ON_HTTP_STATUS_CODES, + .getContextualIntegers(outMessage, SERVICE_NOT_AVAILABLE_ON_HTTP_STATUS_CODES, DEFAULT_SERVICE_NOT_AVAILABLE_ON_HTTP_STATUS_CODES); if (serviceNotAvailableOnHttpStatusCodes.contains(rc)) { exchange.put("org.apache.cxf.transport.service_not_available", true); @@ -1697,7 +1697,7 @@ protected void handleResponseInternal() throws IOException { if ((!doProcessResponse(outMessage, responseCode) || HttpURLConnection.HTTP_ACCEPTED == responseCode) - && MessageUtils.getContextualBoolean(outMessage, + && MessageUtils.getContextualBoolean(outMessage, Message.PROCESS_202_RESPONSE_ONEWAY_OR_PARTIAL, true)) { in = getPartialResponse(); if (in == null @@ -1721,7 +1721,7 @@ protected void handleResponseInternal() throws IOException { exchange.put("IN_CHAIN_COMPLETE", Boolean.TRUE); exchange.setInMessage(inMessage); - if (MessageUtils.getContextualBoolean(outMessage, + if (MessageUtils.getContextualBoolean(outMessage, Message.PROPAGATE_202_RESPONSE_ONEWAY_OR_PARTIAL, false)) { incomingObserver.onMessage(inMessage); } diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java index 0c7be9e1904..d40582d576e 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java @@ -106,7 +106,7 @@ public class HttpClientHTTPConduit extends URLConnectionHTTPConduit { volatile int lastTlsHash = -1; volatile URI sslURL; private final ReentrantLock initializationLock = new ReentrantLock(); - + private static final class RefCount { private final AtomicLong count = new AtomicLong(); private final TLSClientParameters clientParameters; @@ -120,12 +120,12 @@ private static final class RefCount { this.clientParameters = clientParameters; this.finalizer = finalizer; } - + RefCount acquire() { count.incrementAndGet(); return this; } - + void release() { if (count.decrementAndGet() == 0) { finalizer.run(); @@ -157,7 +157,7 @@ void release() { ((AutoCloseable)client).close(); } catch (Exception e) { //ignore - } + } } else if (client != null) { tryToShutdownSelector(client); } @@ -176,7 +176,7 @@ public TLSClientParameters clientParameters() { return clientParameters; } } - + private static final class HttpClientCache { private static final int MAX_SIZE = 100; // Keeping at most 100 clients @@ -184,9 +184,9 @@ private static final class HttpClientCache { private final ClientPolicyCalculator cpc = new ClientPolicyCalculator(); private final ReentrantLock lock = new ReentrantLock(); - RefCount computeIfAbsent(final boolean shareHttpClient, final HTTPClientPolicy policy, + RefCount computeIfAbsent(final boolean shareHttpClient, final HTTPClientPolicy policy, final TLSClientParameters clientParameters, final Supplier supplier) { - + // Do not share if it is not allowed for the conduit or cache capacity is exceeded if (!shareHttpClient || clients.size() >= MAX_SIZE) { return new RefCount(supplier.get(), policy, clientParameters, () -> { }).acquire(); @@ -231,7 +231,7 @@ void remove(final HTTPClientPolicy policy, final TLSClientParameters clientParam public HttpClientHTTPConduit(Bus b, EndpointInfo ei, EndpointReferenceType t) throws IOException { super(b, ei, t); } - + private static Set getRestrictedHeaders() { Set headers = new TreeSet<>(String.CASE_INSENSITIVE_ORDER); headers.addAll(Set.of("Connection", "Content-Length", "Expect", "Host", "Upgrade")); @@ -243,13 +243,22 @@ private boolean isSslTargetDifferent(URI lastURL, URI url) { || !lastURL.getHost().equals(url.getHost()) || lastURL.getPort() != url.getPort(); } - + @Override public void close(Message msg) throws IOException { + try { + OutputStream os = msg.getContent(OutputStream.class); + // Java 21 may hang on close, we flush stream to help close them out. + if (os != null && AutoCloseable.class.isAssignableFrom(HttpClient.class)) { + os.flush(); + } + } catch (IOException ioException) { + // ignore + } super.close(msg); msg.remove(HttpClient.class); } - + /** * Close the conduit */ @@ -264,17 +273,17 @@ public void close() { private static void tryToShutdownSelector(HttpClient client) { synchronized (client) { String n = client.toString(); - + // it can take three seconds (or more) for the JVM to determine the client // is unreferenced and then shutdown the selector thread, we'll try and speed that - // up. This is somewhat of a complete hack. + // up. This is somewhat of a complete hack. int idx = n.lastIndexOf('('); if (idx > 0) { n = n.substring(idx + 1); n = n.substring(0, n.length() - 1); n = "HttpClient-" + n + "-SelectorManager"; } - try { + try { ThreadGroup rootGroup = Thread.currentThread().getThreadGroup(); Thread[] threads = new Thread[rootGroup.activeCount()]; int cnt = rootGroup.enumerate(threads); @@ -293,7 +302,7 @@ private static void tryToShutdownSelector(HttpClient client) { } } } - + @Override protected void setupConnection(Message message, Address address, HTTPClientPolicy csPolicy) throws IOException { URI uri = address.getURI(); @@ -319,15 +328,15 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic o = Boolean.TRUE; } if (clientParameters.isDisableCNCheck()) { - if (clientParameters.getSslContext() != null) { + if (clientParameters.getSslContext() != null) { // If they specify their own SSLContext, we cannot handle the // HostnameVerifier so we'll need to use the URLConnection o = Boolean.TRUE; } - if (clientParameters.getTrustManagers() != null + if (clientParameters.getTrustManagers() != null && JavaUtils.getJavaMajorVersion() < 14) { // trustmanagers hacks don't work on Java11 - o = Boolean.TRUE; + o = Boolean.TRUE; } } } @@ -336,7 +345,7 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic super.setupConnection(message, address, csPolicy); return; } - + if (sslURL != null && isSslTargetDifferent(sslURL, uri)) { sslURL = null; if (clientRef != null) { @@ -360,17 +369,17 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic HttpClient.Builder cb = HttpClient.newBuilder() .proxy(ps) .followRedirects(Redirect.NEVER); - + if (ctimeout > 0) { cb.connectTimeout(Duration.ofMillis(ctimeout)); } - + if ("https".equals(uri.getScheme())) { sslURL = uri; try { SSLContext sslContext = clientParameters.getSslContext(); if (sslContext == null) { - sslContext = SSLUtils.getSSLContext(clientParameters, true); + sslContext = SSLUtils.getSSLContext(clientParameters, true); cb.sslContext(sslContext); } if (sslContext != null) { @@ -382,13 +391,13 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic sslContext.getSocketFactory().getDefaultCipherSuites(), supportedCiphers, LOG); - + if (clientParameters.getSecureSocketProtocol() != null) { String protocol = clientParameters.getSecureSocketProtocol(); SSLParameters params = new SSLParameters(cipherSuites, new String[] {protocol}); cb.sslParameters(params); } else { - final SSLParameters params = new SSLParameters(cipherSuites, + final SSLParameters params = new SSLParameters(cipherSuites, TLSClientParameters.getPreferredClientProtocols()); cb.sslParameters(params); } @@ -402,7 +411,7 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic verc = csPolicy.getVersion(); } if ("1.1".equals(HTTP_VERSION) || "1.1".equals(verc)) { - cb.version(Version.HTTP_1_1); + cb.version(Version.HTTP_1_1); } // make sure the conduit is not yet initialized @@ -413,8 +422,8 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic final boolean shareHttpClient = MessageUtils.getContextualBoolean(message, SHARE_HTTPCLIENT_CONDUIT, true); cl = CLIENTS_CACHE.computeIfAbsent(shareHttpClient, csPolicy, clientParameters, () -> cb.build()); - - if (!"https".equals(uri.getScheme()) + + if (!"https".equals(uri.getScheme()) && !KNOWN_HTTP_VERBS_WITH_NO_CONTENT.contains(httpRequestMethod) && cl.client().version() == Version.HTTP_2 && ("2".equals(verc) || ("auto".equals(verc) && "2".equals(HTTP_VERSION)))) { @@ -422,7 +431,7 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic // We specifically want HTTP2, but we're using a request // that won't trigger an upgrade to HTTP/2 so we'll // call OPTIONS on the URI which may trigger HTTP/2 upgrade. - // Not needed for methods that don't have a body (GET/HEAD/etc...) + // Not needed for methods that don't have a body (GET/HEAD/etc...) // or for https (negotiated at the TLS level) HttpRequest.Builder rb = HttpRequest.newBuilder() .uri(uri) @@ -431,7 +440,7 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic } catch (IOException | InterruptedException e) { // } - } + } clientRef = cl; } @@ -440,7 +449,7 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic } } message.put(HttpClient.class, cl.client()); - + message.put(KEY_HTTP_CONNECTION_ADDRESS, address); } @@ -448,7 +457,7 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic protected OutputStream createOutputStream(Message message, boolean needToCacheRequest, boolean isChunking, int chunkThreshold) throws IOException { - + Object o = message.get("USING_URLCONNECTION"); if (Boolean.TRUE == o) { return super.createOutputStream(message, needToCacheRequest, isChunking, chunkThreshold); @@ -508,7 +517,7 @@ static class HttpClientPipedOutputStream extends PipedOutputStream { HttpClientWrappedOutputStream stream; HTTPClientPolicy csPolicy; HttpClientBodyPublisher publisher; - HttpClientPipedOutputStream(HttpClientWrappedOutputStream s, + HttpClientPipedOutputStream(HttpClientWrappedOutputStream s, PipedInputStream pin, HTTPClientPolicy cp, HttpClientBodyPublisher bp) throws IOException { @@ -520,7 +529,7 @@ static class HttpClientPipedOutputStream extends PipedOutputStream { public void close() throws IOException { super.close(); csPolicy = null; - stream = null; + stream = null; if (publisher != null) { publisher.close(); publisher = null; @@ -587,7 +596,7 @@ private static final class InputStreamSupplier implements Supplier InputStreamSupplier(InputStream i) { in = i; } - + public InputStream get() { return in; } @@ -607,7 +616,7 @@ synchronized void close() { stream = null; } } - + @Override public synchronized void subscribe(Subscriber subscriber) { if (stream != null) { @@ -615,7 +624,7 @@ public synchronized void subscribe(Subscriber subscriber) { contentLen = stream.contentLen; if (stream.pout != null) { synchronized (stream.pout) { - stream.pout.notifyAll(); + stream.pout.notifyAll(); } if (stream != null) { contentLen = stream.contentLen; @@ -637,7 +646,7 @@ public long contentLength() { return contentLen; } } - class HttpClientWrappedOutputStream extends WrappedOutputStream { + class HttpClientWrappedOutputStream extends WrappedOutputStream { List> subscribers = new LinkedList<>(); CompletableFuture> future; @@ -648,8 +657,8 @@ class HttpClientWrappedOutputStream extends WrappedOutputStream { PipedOutputStream pout; HttpClientBodyPublisher publisher; HttpRequest request; - - + + HttpClientWrappedOutputStream(Message message, boolean needToCacheRequest, boolean isChunking, int chunkThreshold, String conduitName) { @@ -669,7 +678,7 @@ public void close() throws IOException { publisher = null; } request = null; - subscribers = null; + subscribers = null; } void addSubscriber(Flow.Subscriber subscriber) { subscribers.add(subscriber); @@ -679,7 +688,7 @@ void addSubscriber(Flow.Subscriber subscriber) { protected void setFixedLengthStreamingMode(int i) { contentLen = i; } - + @Override protected void handleNoOutput() throws IOException { contentLen = 0; @@ -738,9 +747,9 @@ public void setProtocolHeadersInBuilder(HttpRequest.Builder rb) throws IOExcepti if (!dropContentType) { rb.header(HttpHeaderHelper.CONTENT_TYPE, h.determineContentType()); } - } + } } - + private boolean isConnectionAttemptCompleted(HTTPClientPolicy csPolicy, PipedOutputStream out) throws IOException { if (!connectionComplete) { @@ -775,8 +784,8 @@ private boolean isConnectionAttemptCompleted(HTTPClientPolicy csPolicy, PipedOut } return true; } - - + + @Override protected void setProtocolHeaders() throws IOException { HttpClient cl = outMessage.get(HttpClient.class); @@ -785,7 +794,7 @@ protected void setProtocolHeaders() throws IOException { String httpRequestMethod = (String)outMessage.get(Message.HTTP_REQUEST_METHOD); - + if (KNOWN_HTTP_VERBS_WITH_NO_CONTENT.contains(httpRequestMethod) || PropertyUtils.isTrue(outMessage.get(Headers.EMPTY_REQUEST_PROPERTY))) { contentLen = 0; @@ -793,21 +802,21 @@ protected void setProtocolHeaders() throws IOException { final PipedInputStream pin = new PipedInputStream(csPolicy.getChunkLength() <= 0 ? 4096 : csPolicy.getChunkLength()); - + this.publisher = new HttpClientBodyPublisher(this, pin); if (contentLen != 0) { pout = new HttpClientPipedOutputStream(this, pin, csPolicy, publisher); } HttpRequest.Builder rb = HttpRequest.newBuilder() - .method(httpRequestMethod, publisher); + .method(httpRequestMethod, publisher); String verc = (String)outMessage.getContextualProperty(FORCE_HTTP_VERSION); if (verc == null) { verc = csPolicy.getVersion(); } if ("1.1".equals(HTTP_VERSION) || "1.1".equals(verc)) { - rb.version(Version.HTTP_1_1); - } + rb.version(Version.HTTP_1_1); + } try { rb.uri(address.getURI()); } catch (IllegalArgumentException iae) { @@ -815,17 +824,17 @@ protected void setProtocolHeaders() throws IOException { mex.initCause(iae); throw mex; } - + rtimeout = determineReceiveTimeout(outMessage, csPolicy); if (rtimeout > 0) { rb.timeout(Duration.ofMillis(rtimeout)); } setProtocolHeadersInBuilder(rb); - + request = rb.build(); - - + + final BodyHandler handler = BodyHandlers.ofInputStream(); if (System.getSecurityManager() != null) { try { @@ -891,7 +900,7 @@ HttpResponse getResponse() throws IOException { uhe.initCause(cause); throw uhe; } - + } if (t instanceof IOException) { IOException iot = (IOException)t; @@ -903,9 +912,9 @@ HttpResponse getResponse() throws IOException { } catch (TimeoutException e) { throw (IOException)(new HttpTimeoutException("Timeout").initCause(e)); } - + } - + @Override protected int getResponseCode() throws IOException { return getResponse().statusCode(); @@ -917,13 +926,13 @@ protected void updateResponseHeaders(Message inMessage) throws IOException { h.readFromConnection(rsp.headers().map()); if (rsp.headers().map().containsKey(Message.CONTENT_TYPE)) { List s = rsp.headers().allValues(Message.CONTENT_TYPE); - inMessage.put(Message.CONTENT_TYPE, String.join(",", s)); + inMessage.put(Message.CONTENT_TYPE, String.join(",", s)); } else { inMessage.put(Message.CONTENT_TYPE, null); } cookies.readFromHeaders(h); } - + @Override protected InputStream getInputStream() throws IOException { HttpResponse resp = getResponse(); @@ -1014,18 +1023,18 @@ protected String getResponseMessage() throws IOException { } return null; } - + @Override protected HttpsURLConnectionInfo getHttpsURLConnectionInfo() throws IOException { Address addrss = (Address)outMessage.get(KEY_HTTP_CONNECTION_ADDRESS); URI uri = addrss.getURI(); - + if ("http".equals(uri.getScheme())) { return null; } String method = (String)outMessage.get(Message.HTTP_REQUEST_METHOD); HttpClient cl = outMessage.get(HttpClient.class); - + while (!connectionComplete || !cl.sslContext().getClientSessionContext().getIds().hasMoreElements()) { Thread.yield(); } @@ -1036,15 +1045,15 @@ protected HttpsURLConnectionInfo getHttpsURLConnectionInfo() throws IOException Principal principal = session.getLocalPrincipal(); Certificate[] serverCerts = session.getPeerCertificates(); Principal peer = session.getPeerPrincipal(); - + HttpsURLConnectionInfo info = new HttpsURLConnectionInfo(uri, method, cipherSuite, localCerts, principal, serverCerts, peer); - + return info; } - + @Override protected boolean usingProxy() { @@ -1070,7 +1079,7 @@ protected InputStream getPartialResponse() throws IOException { } catch (IOException ioe) { // ignore } - } + } // Don't need to do anything return null; } @@ -1078,7 +1087,7 @@ protected InputStream getPartialResponse() throws IOException { @Override protected void setupNewConnection(String newURL) throws IOException { connectionComplete = false; - + HTTPClientPolicy cp = getClient(outMessage); Address address; try { From 359808906918a77f696fe08a8db154e91c513411 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 21 Sep 2024 10:09:02 -0400 Subject: [PATCH 128/430] Revert temporary excludion of some build agents from the label (due to persistent issues) --- Jenkinsfile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 4ed6fc9868c..67953a38625 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -15,7 +15,7 @@ pipeline { stages { stage('Prepare') { agent { - label 'ubuntu && !builds55 && !builds56 && !builds57 && !builds58 && !builds59 && !builds60' + label 'ubuntu' } stages { stage('Clean up') { @@ -28,7 +28,7 @@ pipeline { stage('Build') { matrix { agent { - label 'ubuntu && !builds55 && !builds56 && !builds57 && !builds58 && !builds59 && !builds60' + label 'ubuntu' } axes { axis { @@ -39,7 +39,7 @@ pipeline { stages { stage('JDK specific build') { agent { - label 'ubuntu && !builds55 && !builds56 && !builds57 && !builds58 && !builds59 && !builds60' + label 'ubuntu' } tools { jdk "${JAVA_VERSION}" From 03a85a52f78e6eb5826e4b8bfc4992e0f4e0414b Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 22 Sep 2024 10:13:32 -0400 Subject: [PATCH 129/430] CXF-7396: CachedOutputStream doesn't delete temp files (#2048) * CXF-7396: CachedOutputStream doesn't delete temp files * Refactor the cleaner implementation and add guardrails for cleaner delay --- core/pom.xml | 5 + .../org/apache/cxf/io/CachedConstants.java | 8 + .../org/apache/cxf/io/CachedOutputStream.java | 22 +- .../cxf/io/CachedOutputStreamCleaner.java | 43 ++++ .../io/DelayedCachedOutputStreamCleaner.java | 239 ++++++++++++++++++ .../resources/META-INF/cxf/bus-extensions.txt | 2 +- .../DelayedCachedOutputStreamCleanerTest.java | 201 +++++++++++++++ parent/pom.xml | 1 - .../cxf/systest/jaxws/ClientServerTest.java | 44 +++- 9 files changed, 561 insertions(+), 4 deletions(-) create mode 100644 core/src/main/java/org/apache/cxf/io/CachedOutputStreamCleaner.java create mode 100644 core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java create mode 100644 core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java diff --git a/core/pom.xml b/core/pom.xml index a88ab76ea42..210b4942b4e 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -175,6 +175,11 @@ saaj-impl test + + org.awaitility + awaitility + test + diff --git a/core/src/main/java/org/apache/cxf/io/CachedConstants.java b/core/src/main/java/org/apache/cxf/io/CachedConstants.java index 24ba8d8347b..1b23f66e995 100644 --- a/core/src/main/java/org/apache/cxf/io/CachedConstants.java +++ b/core/src/main/java/org/apache/cxf/io/CachedConstants.java @@ -71,6 +71,14 @@ public final class CachedConstants { public static final String CIPHER_TRANSFORMATION_BUS_PROP = "bus.io.CachedOutputStream.CipherTransformation"; + /** + * The delay (in ms) for cleaning up unclosed {@code CachedOutputStream} instances. 30 minutes + * is specified by default, the minimum value is 2 seconds. If the value of the delay is set to + * 0 (or is negative), the cleaner will be deactivated. + */ + public static final String CLEANER_DELAY_BUS_PROP = + "bus.io.CachedOutputStreamCleaner.Delay"; + private CachedConstants() { // complete } diff --git a/core/src/main/java/org/apache/cxf/io/CachedOutputStream.java b/core/src/main/java/org/apache/cxf/io/CachedOutputStream.java index ea8ce0d625d..3ba937d04b0 100644 --- a/core/src/main/java/org/apache/cxf/io/CachedOutputStream.java +++ b/core/src/main/java/org/apache/cxf/io/CachedOutputStream.java @@ -22,6 +22,7 @@ import java.io.BufferedOutputStream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; +import java.io.Closeable; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -93,6 +94,7 @@ public class CachedOutputStream extends OutputStream { private List callbacks; private List streamList = new ArrayList<>(); + private CachedOutputStreamCleaner cachedOutputStreamCleaner; public CachedOutputStream() { this(defaultThreshold); @@ -127,6 +129,8 @@ private void readBusProperties() { outputDir = f; } } + + cachedOutputStreamCleaner = b.getExtension(CachedOutputStreamCleaner.class); } } @@ -279,6 +283,9 @@ public void resetOut(OutputStream out, boolean copyOldContent) throws IOExceptio } } finally { streamList.remove(currentStream); + if (cachedOutputStreamCleaner != null) { + cachedOutputStreamCleaner.unregister(currentStream); + } deleteTempFile(); inmem = true; } @@ -481,6 +488,9 @@ private void createFileOutputStream() throws IOException { bout.writeTo(currentStream); inmem = false; streamList.add(currentStream); + if (cachedOutputStreamCleaner != null) { + cachedOutputStreamCleaner.register(this); + } } catch (Exception ex) { //Could be IOException or SecurityException or other issues. //Don't care what, just keep it in memory. @@ -512,6 +522,10 @@ public InputStream getInputStream() throws IOException { try { InputStream fileInputStream = new TransferableFileInputStream(tempFile); streamList.add(fileInputStream); + if (cachedOutputStreamCleaner != null) { + cachedOutputStreamCleaner.register(fileInputStream); + } + if (cipherTransformation != null) { fileInputStream = new CipherInputStream(fileInputStream, ciphers.getDecryptor()) { boolean closed; @@ -537,7 +551,7 @@ private synchronized void deleteTempFile() { FileUtils.delete(file); } } - private boolean maybeDeleteTempFile(Object stream) { + private boolean maybeDeleteTempFile(Closeable stream) { boolean postClosedInvoked = false; streamList.remove(stream); if (!inmem && tempFile != null && streamList.isEmpty() && allowDeleteOfFile) { @@ -549,6 +563,9 @@ private boolean maybeDeleteTempFile(Object stream) { //ignore } postClosedInvoked = true; + if (cachedOutputStreamCleaner != null) { + cachedOutputStreamCleaner.unregister(this); + } } deleteTempFile(); currentStream = new LoadingByteArrayOutputStream(1024); @@ -665,6 +682,9 @@ public void close() throws IOException { if (!closed) { super.close(); maybeDeleteTempFile(this); + if (cachedOutputStreamCleaner != null) { + cachedOutputStreamCleaner.unregister(this); + } } closed = true; } diff --git a/core/src/main/java/org/apache/cxf/io/CachedOutputStreamCleaner.java b/core/src/main/java/org/apache/cxf/io/CachedOutputStreamCleaner.java new file mode 100644 index 00000000000..3d6361a4c95 --- /dev/null +++ b/core/src/main/java/org/apache/cxf/io/CachedOutputStreamCleaner.java @@ -0,0 +1,43 @@ +/** + * 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.cxf.io; + +import java.io.Closeable; + +/** + * The {@link Bus} extension to clean up unclosed {@link CachedOutputStream} instances (and alike) backed by + * temporary files (leading to disk fill, see https://issues.apache.org/jira/browse/CXF-7396. + */ +public interface CachedOutputStreamCleaner { + /** + * Run the clean up + */ + void clean(); + + /** + * Register the stream instance for the clean up + */ + void unregister(Closeable closeable); + + /** + * Unregister the stream instance from the clean up (closed properly) + */ + void register(Closeable closeable); +} diff --git a/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java b/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java new file mode 100644 index 00000000000..04a258a558e --- /dev/null +++ b/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java @@ -0,0 +1,239 @@ +/** + * 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.cxf.io; + +import java.io.Closeable; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.Objects; +import java.util.Timer; +import java.util.TimerTask; +import java.util.concurrent.DelayQueue; +import java.util.concurrent.Delayed; +import java.util.concurrent.TimeUnit; +import java.util.logging.Logger; + +import jakarta.annotation.Resource; +import org.apache.cxf.Bus; +import org.apache.cxf.buslifecycle.BusLifeCycleListener; +import org.apache.cxf.buslifecycle.BusLifeCycleManager; +import org.apache.cxf.common.logging.LogUtils; + +public final class DelayedCachedOutputStreamCleaner implements CachedOutputStreamCleaner, BusLifeCycleListener { + private static final Logger LOG = LogUtils.getL7dLogger(DelayedCachedOutputStreamCleaner.class); + private static final long MIN_DELAY = 2000; /* 2 seconds */ + private static final DelayedCleaner NOOP_CLEANER = new DelayedCleaner() { + // NOOP + }; + + private DelayedCleaner cleaner = NOOP_CLEANER; + + private interface DelayedCleaner extends CachedOutputStreamCleaner, Closeable { + @Override + default void register(Closeable closeable) { + } + + @Override + default void unregister(Closeable closeable) { + } + + @Override + default void close() { + } + + @Override + default void clean() { + } + + default void forceClean() { + } + } + + private static final class DelayedCleanerImpl implements DelayedCleaner { + private final long delay; /* default is 30 minutes, in milliseconds */ + private final DelayQueue queue = new DelayQueue<>(); + private final Timer timer; + + DelayedCleanerImpl(final long delay) { + this.delay = delay; + this.timer = new Timer("DelayedCachedOutputStreamCleaner", true); + this.timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + clean(); + } + }, 0, Math.max(MIN_DELAY, delay >> 1)); + } + + @Override + public void register(Closeable closeable) { + queue.put(new DelayedCloseable(closeable, delay)); + } + + @Override + public void unregister(Closeable closeable) { + queue.remove(new DelayedCloseable(closeable, delay)); + } + + @Override + public void clean() { + final Collection closeables = new ArrayList<>(); + queue.drainTo(closeables); + clean(closeables); + } + + @Override + public void forceClean() { + clean(queue); + } + + @Override + public void close() { + timer.cancel(); + queue.clear(); + } + + private void clean(Collection closeables) { + final Iterator iterator = closeables.iterator(); + while (iterator.hasNext()) { + final DelayedCloseable next = iterator.next(); + try { + iterator.remove(); + LOG.warning("Unclosed (leaked?) stream detected: " + next.closeable); + next.closeable.close(); + } catch (final IOException | RuntimeException ex) { + LOG.warning("Unable to close (leaked?) stream: " + ex.getMessage()); + } + } + } + } + + private static final class DelayedCloseable implements Delayed { + private final Closeable closeable; + private final long expireAt; + + DelayedCloseable(final Closeable closeable, final long delay) { + this.closeable = closeable; + this.expireAt = System.nanoTime() + delay; + } + + @Override + public int compareTo(Delayed o) { + return Long.compare(expireAt, ((DelayedCloseable) o).expireAt); + } + + @Override + public long getDelay(TimeUnit unit) { + return unit.convert(expireAt - System.nanoTime(), TimeUnit.NANOSECONDS); + } + + @Override + public int hashCode() { + return Objects.hash(closeable); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + + if (obj == null) { + return false; + } + + if (getClass() != obj.getClass()) { + return false; + } + + final DelayedCloseable other = (DelayedCloseable) obj; + return Objects.equals(closeable, other.closeable); + } + } + + @Resource + public void setBus(Bus bus) { + Number delayValue = null; + BusLifeCycleManager busLifeCycleManager = null; + + if (bus != null) { + delayValue = (Number) bus.getProperty(CachedConstants.CLEANER_DELAY_BUS_PROP); + busLifeCycleManager = bus.getExtension(BusLifeCycleManager.class); + } + + if (cleaner != null) { + cleaner.close(); + } + + if (delayValue == null) { + // Default delay is set to 30 mins + cleaner = new DelayedCleanerImpl(TimeUnit.MILLISECONDS.convert(30, TimeUnit.MINUTES)); + } else { + final long value = delayValue.longValue(); + if (value > 0 && value >= MIN_DELAY) { + cleaner = new DelayedCleanerImpl(value); /* already in milliseconds */ + } else { + cleaner = NOOP_CLEANER; + if (value != 0) { + throw new IllegalArgumentException("The value of " + CachedConstants.CLEANER_DELAY_BUS_PROP + + " property is invalid: " + value + " (should be >= " + MIN_DELAY + ", 0 to deactivate)"); + } + } + } + + if (busLifeCycleManager != null) { + busLifeCycleManager.registerLifeCycleListener(this); + } + } + + @Override + public void register(Closeable closeable) { + cleaner.register(closeable); + } + + @Override + public void unregister(Closeable closeable) { + cleaner.unregister(closeable); + } + + @Override + public void clean() { + cleaner.clean(); + } + + @Override + public void initComplete() { + } + + @Override + public void postShutdown() { + } + + @Override + public void preShutdown() { + cleaner.close(); + } + + public void forceClean() { + cleaner.forceClean(); + } +} diff --git a/core/src/main/resources/META-INF/cxf/bus-extensions.txt b/core/src/main/resources/META-INF/cxf/bus-extensions.txt index 3677c28b5a6..93b8a6b3aa9 100644 --- a/core/src/main/resources/META-INF/cxf/bus-extensions.txt +++ b/core/src/main/resources/META-INF/cxf/bus-extensions.txt @@ -11,4 +11,4 @@ org.apache.cxf.bus.resource.ResourceManagerImpl:org.apache.cxf.resource.Resource org.apache.cxf.catalog.OASISCatalogManager:org.apache.cxf.catalog.OASISCatalogManager:true org.apache.cxf.common.util.ASMHelperImpl:org.apache.cxf.common.util.ASMHelper:true org.apache.cxf.common.spi.ClassLoaderProxyService:org.apache.cxf.common.spi.ClassLoaderService:true - +org.apache.cxf.io.DelayedCachedOutputStreamCleaner:org.apache.cxf.io.CachedOutputStreamCleaner:true diff --git a/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java b/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java new file mode 100644 index 00000000000..3f0603aa7f3 --- /dev/null +++ b/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java @@ -0,0 +1,201 @@ +/** + * 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.cxf.io; + +import java.io.Closeable; +import java.io.IOException; +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicInteger; + +import org.apache.cxf.Bus; +import org.apache.cxf.bus.extension.ExtensionManagerBus; + +import org.junit.After; +import org.junit.Test; + +import static org.awaitility.Awaitility.await; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; + +public class DelayedCachedOutputStreamCleanerTest { + private Bus bus; + + @After + public void tearDown() { + if (bus != null) { + bus.shutdown(true); + bus = null; + } + } + + @Test + public void testNoop() { + final Map properties = Collections.singletonMap(CachedConstants.CLEANER_DELAY_BUS_PROP, 0); + bus = new ExtensionManagerBus(new HashMap<>(), properties); + + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + assertThat(cleaner, instanceOf(DelayedCachedOutputStreamCleaner.class)); /* noop */ + + assertNoopCleaner(cleaner); + } + + @Test + public void testForceClean() throws InterruptedException { + bus = new ExtensionManagerBus(); + + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + assertThat(cleaner, instanceOf(DelayedCachedOutputStreamCleaner.class)); + + final AtomicBoolean latch = new AtomicBoolean(false); + final Closeable closeable = () -> latch.compareAndSet(false, true); + cleaner.register(closeable); + + final DelayedCachedOutputStreamCleaner delayedCleaner = (DelayedCachedOutputStreamCleaner) cleaner; + delayedCleaner.forceClean(); + + // Await for Closeable::close to be called + assertThat(latch.get(), is(true)); + } + + @Test + public void testClean() throws InterruptedException { + final AtomicInteger latch = new AtomicInteger(); + final Closeable closeable1 = () -> latch.incrementAndGet(); + final Closeable closeable2 = () -> latch.incrementAndGet(); + + /* Delay of 2.5 seconds */ + final Map properties = Collections.singletonMap(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); + bus = new ExtensionManagerBus(new HashMap<>(), properties); + + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + cleaner.register(closeable1); + cleaner.register(closeable2); + + // Await for Closeable::close to be called on schedule + await().atMost(5, TimeUnit.SECONDS).untilAtomic(latch, equalTo(2)); + assertThat(cleaner, instanceOf(DelayedCachedOutputStreamCleaner.class)); + } + + @Test + public void testForceCleanForEmpty() throws InterruptedException { + bus = new ExtensionManagerBus(); + + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + assertThat(cleaner, instanceOf(DelayedCachedOutputStreamCleaner.class)); + + final AtomicBoolean latch = new AtomicBoolean(false); + final Closeable closeable = () -> latch.compareAndSet(false, true); + + cleaner.register(closeable); + cleaner.unregister(closeable); + + final DelayedCachedOutputStreamCleaner delayedCleaner = (DelayedCachedOutputStreamCleaner) cleaner; + delayedCleaner.forceClean(); + + // Closeable::close should not be called + assertThat(latch.get(), is(false)); + } + + @Test + public void testForceCleanException() throws InterruptedException { + bus = new ExtensionManagerBus(); + + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + assertThat(cleaner, instanceOf(DelayedCachedOutputStreamCleaner.class)); + + final AtomicInteger latch = new AtomicInteger(); + final Closeable closeable2 = () -> latch.incrementAndGet(); + final Closeable closeable1 = () -> { + latch.incrementAndGet(); + throw new IOException("Simulated"); + }; + cleaner.register(closeable1); + cleaner.register(closeable2); + + final DelayedCachedOutputStreamCleaner delayedCleaner = (DelayedCachedOutputStreamCleaner) cleaner; + delayedCleaner.forceClean(); + + // Try to call force clean one more time + delayedCleaner.forceClean(); + + // Await for Closeable::close to be called + assertThat(latch.get(), equalTo(2)); + } + + @Test + public void testBusLifecycle() throws InterruptedException { + /* Delay of 2.5 seconds */ + final Map properties = Collections.singletonMap(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); + bus = new ExtensionManagerBus(new HashMap<>(), properties); + + final AtomicBoolean latch = new AtomicBoolean(); + final Closeable closeable = () -> latch.compareAndSet(false, true); + + bus.setProperty(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); /* 2.5 seconds */ + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + cleaner.register(closeable); + + // Closes the bus, the cleaner should cancel the internal timer(s) + bus.shutdown(true); + + // The Closeable::close should not be called since timer(s) is cancelled + await().during(3, TimeUnit.SECONDS).untilAtomic(latch, is(false)); + } + + @Test + public void testNegativeDelay() throws InterruptedException { + final Map properties = Collections.singletonMap(CachedConstants.CLEANER_DELAY_BUS_PROP, -1); + bus = new ExtensionManagerBus(new HashMap<>(), properties); + + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + assertThat(cleaner, instanceOf(DelayedCachedOutputStreamCleaner.class)); /* noop */ + + assertNoopCleaner(cleaner); + } + + @Test + public void testTooSmallDelay() throws InterruptedException { + final Map properties = Collections.singletonMap(CachedConstants.CLEANER_DELAY_BUS_PROP, 1500); + bus = new ExtensionManagerBus(new HashMap<>(), properties); + + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + assertThat(cleaner, instanceOf(DelayedCachedOutputStreamCleaner.class)); /* noop */ + + assertNoopCleaner(cleaner); + } + + private void assertNoopCleaner(final CachedOutputStreamCleaner cleaner) { + final AtomicBoolean latch = new AtomicBoolean(false); + final Closeable closeable = () -> latch.compareAndSet(false, true); + cleaner.register(closeable); + + final DelayedCachedOutputStreamCleaner delayedCleaner = (DelayedCachedOutputStreamCleaner) cleaner; + delayedCleaner.forceClean(); + + // Noop, Closeable::close should not be called + assertThat(latch.get(), is(false)); + } +} diff --git a/parent/pom.xml b/parent/pom.xml index 3e329e33e22..1d506d44cd3 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -275,7 +275,6 @@ 1.6.3_1 1.2_5 1.1.4c_6 - 4.2.2 diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java index 47dfd025f43..89e551e21a7 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java @@ -68,6 +68,8 @@ import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.helpers.FileUtils; import org.apache.cxf.io.CachedOutputStream; +import org.apache.cxf.io.CachedOutputStreamCleaner; +import org.apache.cxf.io.DelayedCachedOutputStreamCleaner; import org.apache.cxf.jaxws.DispatchImpl; import org.apache.cxf.message.Message; import org.apache.cxf.staxutils.StaxUtils; @@ -126,9 +128,10 @@ public class ClientServerTest extends AbstractBusClientServerTestBase { public static void startServers() throws Exception { // set up configuration to enable schema validation URL url = ClientServerTest.class.getResource("fault-stack-trace.xml"); + // Create bus first so it will be shared between the server and clients + createStaticBus(url.toString()); assertNotNull("cannot find test resource", url); assertTrue("server did not launch correctly", launchServer(Server.class, true)); - createStaticBus(url.toString()); } @Test @@ -1076,6 +1079,45 @@ public void testEchoProviderThresholdAsyncThrows() throws Exception { FileUtils.removeDir(f); } + @Test + public void testEchoProviderThresholdTimeout() throws Exception { + final File f = Files.createTempDir(); + LOG.info("Using temp folder: " + f.getAbsolutePath()); + + System.setProperty("org.apache.cxf.io.CachedOutputStream.OutputDirectory", f.getAbsolutePath()); + CachedOutputStream.setDefaultThreshold(5); + + String requestString = ""; + Service service = Service.create(serviceName); + service.addPort(fakePortName, jakarta.xml.ws.soap.SOAPBinding.SOAP11HTTP_BINDING, + "http://localhost:" + PORT + "/SoapContext/AsyncEchoProvider"); + Dispatch dispatcher = service.createDispatch(fakePortName, + StreamSource.class, + Service.Mode.PAYLOAD); + dispatcher.getRequestContext().put("jakarta.xml.ws.client.receiveTimeout", "1000"); + dispatcher.getRequestContext().put("jakarta.xml.ws.client.connectionTimeout", "1000"); + + StreamSource request = new StreamSource(new ByteArrayInputStream(requestString.getBytes())); + try { + // Expecting java.net.SocketTimeoutException: Read timed out + StreamSource response = dispatcher.invoke(request); + assertEquals(requestString, StaxUtils.toString(response)); + } catch (final WebServiceException ex) { + ((DispatchImpl)dispatcher).getClient().close(); + } + + //give the server side a little time to process it's part and close the files + if (f.list().length > 0) { + final CachedOutputStreamCleaner cleaner = getBus().getExtension(CachedOutputStreamCleaner.class); + if (cleaner instanceof DelayedCachedOutputStreamCleaner) { + ((DelayedCachedOutputStreamCleaner) cleaner).forceClean(); + } + } + + assertEquals("Expected no files but there is at list one", 0, f.list().length); + FileUtils.removeDir(f); + } + @Test public void testEchoProviderAsyncDecoupledEndpoints() throws Exception { String requestString = ""; From 8588de147e96abfc5852645768a11bebde53a851 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Sep 2024 04:55:09 -0400 Subject: [PATCH 130/430] Bump github/codeql-action from 3.26.7 to 3.26.8 (#2079) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.7 to 3.26.8. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/8214744c546c1e5c8f03dde8fab3a7353211988d...294a9d92911152fe08befb9ec03e240add280cb3) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e6f2d54a63c..1a4cd811056 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7 + uses: github/codeql-action/init@294a9d92911152fe08befb9ec03e240add280cb3 # v3.26.8 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@8214744c546c1e5c8f03dde8fab3a7353211988d # v3.26.7 + uses: github/codeql-action/analyze@294a9d92911152fe08befb9ec03e240add280cb3 # v3.26.8 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index f5a186d5b51..19f68a619b8 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@8214744c546c1e5c8f03dde8fab3a7353211988d #tag=v2 + uses: github/codeql-action/upload-sarif@294a9d92911152fe08befb9ec03e240add280cb3 #tag=v2 with: sarif_file: results.sarif From f255f003c4d4043bb0328b7a11f341eee6fce833 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:13:15 -0400 Subject: [PATCH 131/430] Bump io.swagger.core.v3:swagger-jaxrs2-jakarta from 2.2.23 to 2.2.24 (#2080) Bumps io.swagger.core.v3:swagger-jaxrs2-jakarta from 2.2.23 to 2.2.24. --- updated-dependencies: - dependency-name: io.swagger.core.v3:swagger-jaxrs2-jakarta dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1d506d44cd3..cdf6b6d87a7 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -219,7 +219,7 @@ 6.1.13 1.8.3 5.17.14 - 2.2.23 + 2.2.24 2.9.1 10.1.30 1.8 From 3130506b4c8b6ff820905dab7c8def6b22ace2ba Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 27 Sep 2024 15:00:58 -0400 Subject: [PATCH 132/430] Update Mockito to 5.14.0 Signed-off-by: Andriy Redko --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index cdf6b6d87a7..888b0b54c80 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -183,7 +183,7 @@ 3.0.1 3.1.1 2.2.1 - 5.13.0 + 5.14.0 2022.7 3.2.0 [4,5) From 446a06489e4a8d9e1f84157abb4c0ff4e0dd93dc Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 27 Sep 2024 15:03:32 -0400 Subject: [PATCH 133/430] Update JUnit Jupiter to 5.11.1 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 888b0b54c80..1c9cd3e84cd 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -170,7 +170,7 @@ 3.0.1 1.0 4.13.2 - 5.11.0 + 5.11.1 2.0.3 7.0.1 1.1.2 From 4d6ed16e9ca31ab9e5ad5371244ea66058a362a7 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 27 Sep 2024 21:28:58 -0400 Subject: [PATCH 134/430] Update commons-lang3 to 3.17.0 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1c9cd3e84cd..a4c30c88d63 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -103,7 +103,7 @@ 1.17.1 2.16.1 2.2.1 - 3.14.0 + 3.17.0 1.2 1.12.0 10.16.1.1 From 88554e0c6e68d209e62bdf09178149e01ae18bd6 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 28 Sep 2024 09:15:18 -0400 Subject: [PATCH 135/430] Update Microprofile OpenAPI to 3.1.2 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index a4c30c88d63..28ed225d29b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -181,7 +181,7 @@ 1.3.4 3.1 3.0.1 - 3.1.1 + 3.1.2 2.2.1 5.14.0 2022.7 From 96c661d8834803de892ac536f16ecd34cebb49c8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:16:54 -0400 Subject: [PATCH 136/430] Bump com.puppycrawl.tools:checkstyle from 10.18.1 to 10.18.2 (#2082) Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.18.1 to 10.18.2. - [Release notes](https://github.com/checkstyle/checkstyle/releases) - [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.18.1...checkstyle-10.18.2) --- updated-dependencies: - dependency-name: com.puppycrawl.tools:checkstyle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 28ed225d29b..1c661d7791f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -394,7 +394,7 @@ com.puppycrawl.tools checkstyle - 10.18.1 + 10.18.2 From 04e63723d7c9fe04fd6f6f95d287f2e60daad3d9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:17:10 -0400 Subject: [PATCH 137/430] Bump github/codeql-action from 3.26.8 to 3.26.9 (#2087) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.8 to 3.26.9. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/294a9d92911152fe08befb9ec03e240add280cb3...461ef6c76dfe95d5c364de2f431ddbd31a417628) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 1a4cd811056..e851fd9981a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@294a9d92911152fe08befb9ec03e240add280cb3 # v3.26.8 + uses: github/codeql-action/init@461ef6c76dfe95d5c364de2f431ddbd31a417628 # v3.26.9 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@294a9d92911152fe08befb9ec03e240add280cb3 # v3.26.8 + uses: github/codeql-action/analyze@461ef6c76dfe95d5c364de2f431ddbd31a417628 # v3.26.9 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 19f68a619b8..6ff6992b9fb 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@294a9d92911152fe08befb9ec03e240add280cb3 #tag=v2 + uses: github/codeql-action/upload-sarif@461ef6c76dfe95d5c364de2f431ddbd31a417628 #tag=v2 with: sarif_file: results.sarif From 5d6c774aedf746bdc3f59250d7f433c377fb233f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:17:33 -0400 Subject: [PATCH 138/430] Bump actions/checkout from 4.1.7 to 4.2.0 (#2085) Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.7 to 4.2.0. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/692973e3d937129bcbf40652eb9f2f61becf3332...d632683dd7b4114ad314bca15554477dd762a938) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pull-request-build.yml | 2 +- .github/workflows/scorecards.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e851fd9981a..4619b82b4d5 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - name: Setup JDK 17 uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 # v4.3.0 diff --git a/.github/workflows/pull-request-build.yml b/.github/workflows/pull-request-build.yml index 6d7fac34400..17d7a95a412 100644 --- a/.github/workflows/pull-request-build.yml +++ b/.github/workflows/pull-request-build.yml @@ -18,7 +18,7 @@ jobs: pull-requests: read timeout-minutes: 130 steps: - - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v3.6.0 + - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v3.6.0 - name: Set up JDK 17 uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 # v4.3.0 with: diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 6ff6992b9fb..df588f2273b 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -25,7 +25,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # tag=v3.0.0 + uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # tag=v3.0.0 with: persist-credentials: false From f15621091cc4833d442e9072afb5cfd0e87b8883 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 11:18:01 -0400 Subject: [PATCH 139/430] Bump org.cyclonedx:cyclonedx-maven-plugin from 2.8.1 to 2.8.2 (#2083) Bumps [org.cyclonedx:cyclonedx-maven-plugin](https://github.com/CycloneDX/cyclonedx-maven-plugin) from 2.8.1 to 2.8.2. - [Release notes](https://github.com/CycloneDX/cyclonedx-maven-plugin/releases) - [Commits](https://github.com/CycloneDX/cyclonedx-maven-plugin/compare/cyclonedx-maven-plugin-2.8.1...cyclonedx-maven-plugin-2.8.2) --- updated-dependencies: - dependency-name: org.cyclonedx:cyclonedx-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c33bc4efab4..1dc18a3be41 100644 --- a/pom.xml +++ b/pom.xml @@ -706,7 +706,7 @@ org.cyclonedx cyclonedx-maven-plugin - 2.8.1 + 2.8.2 make-bom From 20b102ad3f9a3bd7001cbd39a82ce1534bfa2667 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:18:41 -0400 Subject: [PATCH 140/430] Bump actions/setup-java from 4.3.0 to 4.4.0 (#2086) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.3.0 to 4.4.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/2dfa2011c5b2a0f1489bf9e433881c92c1631f88...b36c23c0d998641eff861008f374ee103c25ac73) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pull-request-build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 4619b82b4d5..b061f028747 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 - name: Setup JDK 17 - uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 # v4.3.0 + uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/pull-request-build.yml b/.github/workflows/pull-request-build.yml index 17d7a95a412..9bbc9af916d 100644 --- a/.github/workflows/pull-request-build.yml +++ b/.github/workflows/pull-request-build.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v3.6.0 - name: Set up JDK 17 - uses: actions/setup-java@2dfa2011c5b2a0f1489bf9e433881c92c1631f88 # v4.3.0 + uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 with: java-version: '17' distribution: 'temurin' From d561796d14982c46452d15ed78b6a0892bdb2a18 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 30 Sep 2024 18:31:57 -0400 Subject: [PATCH 141/430] Update Mockito to 5.14.1 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1c661d7791f..1d150428646 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -183,7 +183,7 @@ 3.0.1 3.1.2 2.2.1 - 5.14.0 + 5.14.1 2022.7 3.2.0 [4,5) From ee8e2bb4a37880c51ef5ae4432dabc12e739a64e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Oct 2024 09:56:33 -0400 Subject: [PATCH 142/430] Bump org.apache.maven.plugins:maven-gpg-plugin from 3.2.6 to 3.2.7 (#2089) Bumps [org.apache.maven.plugins:maven-gpg-plugin](https://github.com/apache/maven-gpg-plugin) from 3.2.6 to 3.2.7. - [Release notes](https://github.com/apache/maven-gpg-plugin/releases) - [Commits](https://github.com/apache/maven-gpg-plugin/compare/maven-gpg-plugin-3.2.6...maven-gpg-plugin-3.2.7) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-gpg-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1dc18a3be41..93f5f321570 100644 --- a/pom.xml +++ b/pom.xml @@ -361,7 +361,7 @@ maven-gpg-plugin - 3.2.6 + 3.2.7 From 4acb907e4dc98908a5d53c05d8b2fca07db01dc8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 2 Oct 2024 12:22:28 -0400 Subject: [PATCH 143/430] Bump cxf.jetty.version from 12.0.13 to 12.0.14 (#2090) Bumps `cxf.jetty.version` from 12.0.13 to 12.0.14. Updates `org.eclipse.jetty:jetty-server` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty.ee10:jetty-ee10-webapp` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty.websocket:jetty-websocket-jetty-server` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jetty-server` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty.ee10:jetty-ee10-apache-jsp` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty.ee10:jetty-ee10-servlet` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-session` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-util` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-io` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-security` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-jmx` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-http` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty.http2:jetty-http2-server` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-alpn-server` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-alpn-java-server` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty.ee10:jetty-ee10-annotations` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty.http2:jetty-http2-client` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-alpn-java-client` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-jndi` from 12.0.13 to 12.0.14 Updates `org.eclipse.jetty:jetty-client` from 12.0.13 to 12.0.14 --- updated-dependencies: - dependency-name: org.eclipse.jetty:jetty-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10:jetty-ee10-webapp dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.websocket:jetty-websocket-jetty-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jetty-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10:jetty-ee10-apache-jsp dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10:jetty-ee10-servlet dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-session dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-util dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-io dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-security dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-jmx dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-http dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.http2:jetty-http2-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-alpn-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-alpn-java-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10:jetty-ee10-annotations dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.http2:jetty-http2-client dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-alpn-java-client dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-jndi dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-client dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 03b07b33746..8881de50b36 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -33,7 +33,7 @@ UTF-8 3.3.4 4.1.3 - 12.0.13 + 12.0.14 4.1.113.Final 4.5.14 5.17.14 diff --git a/parent/pom.xml b/parent/pom.xml index 1d150428646..ba42d1ec635 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -161,7 +161,7 @@ 1.1.1 1.0 1.5.4 - 12.0.13 + 12.0.14 ${cxf.jetty12.version} 3.3 2.10.10 From d1e7f67d939da5368bc83b1212b5a08d33d8c9bf Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 2 Oct 2024 12:33:38 -0400 Subject: [PATCH 144/430] Update Micrometer to 1.13.5 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index ba42d1ec635..e488ef2b7e6 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -177,7 +177,7 @@ 1.5.8 9.11.1 3.9.8 - 1.13.4 + 1.13.5 1.3.4 3.1 3.0.1 From 17d5f097db56b068a73bad99ca210a3c063b0b7a Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 2 Oct 2024 12:39:59 -0400 Subject: [PATCH 145/430] Update Netty to 4.1.114.Final --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 8881de50b36..eda140086fa 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -34,7 +34,7 @@ 3.3.4 4.1.3 12.0.14 - 4.1.113.Final + 4.1.114.Final 4.5.14 5.17.14 2.9.1 diff --git a/parent/pom.xml b/parent/pom.xml index e488ef2b7e6..e58802610e7 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -187,7 +187,7 @@ 2022.7 3.2.0 [4,5) - 4.1.113.Final + 4.1.114.Final 2.0.46.Final 2.0.12 3.2.2 From 74de4f9b16c91160d4c66a284c2b45de44d945ec Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 2 Oct 2024 12:45:15 -0400 Subject: [PATCH 146/430] Update Swagger Core to 2.2.25 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index e58802610e7..025bfc481f7 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -219,7 +219,7 @@ 6.1.13 1.8.3 5.17.14 - 2.2.24 + 2.2.25 2.9.1 10.1.30 1.8 From bb1ea6bac4f980144becebcd79533ca736b44342 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 2 Oct 2024 12:51:45 -0400 Subject: [PATCH 147/430] Update Apache Lucene to 9.12.0 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index eda140086fa..ec768cb101f 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -41,7 +41,7 @@ 10.1.30 4.0.3.Final 2.11.0 - 9.11.1 + 9.12.0 5.0.0 1.9.22.1 6.0.3 diff --git a/parent/pom.xml b/parent/pom.xml index 025bfc481f7..a1a9d2f4412 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -175,7 +175,7 @@ 7.0.1 1.1.2 1.5.8 - 9.11.1 + 9.12.0 3.9.8 1.13.5 1.3.4 From 8cef5849b4741b1bfade570cd611ce31edd84ae8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 3 Oct 2024 18:59:57 -0400 Subject: [PATCH 148/430] Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.0 to 3.10.1 (#2091) Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.10.0 to 3.10.1. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.10.0...maven-javadoc-plugin-3.10.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index a1a9d2f4412..7dfda5c587f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -2002,7 +2002,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.10.0 + 3.10.1 org.ehcache diff --git a/pom.xml b/pom.xml index 93f5f321570..3b337af9f8c 100644 --- a/pom.xml +++ b/pom.xml @@ -472,7 +472,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.10.0 + 3.10.1 true ${cxf.jdk.version} From 4f16fb986dadbc87d53d13fb17a23b8c95ad5ac3 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 3 Oct 2024 19:04:00 -0400 Subject: [PATCH 149/430] Update Dropwizard Metrics to 4.2.28 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 7dfda5c587f..69d394af0eb 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -109,7 +109,7 @@ 10.16.1.1 2.1.4 3.2.6 - 4.2.27 + 4.2.28 3.10.8 5.0.1 3.0.2 From dfccd9b9ffa46612cd2f08332e81c212c21bcc01 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 4 Oct 2024 16:19:45 -0400 Subject: [PATCH 150/430] Bump org.wildfly.common:wildfly-common from 2.0.0 to 2.0.1 (#2092) Bumps [org.wildfly.common:wildfly-common](https://github.com/wildfly/wildfly-common) from 2.0.0 to 2.0.1. - [Changelog](https://github.com/wildfly/wildfly-common/blob/main/RELEASE_PROCEDURE.adoc) - [Commits](https://github.com/wildfly/wildfly-common/compare/2.0.0...2.0.1) --- updated-dependencies: - dependency-name: org.wildfly.common:wildfly-common dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 69d394af0eb..049cfe8d18e 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -231,7 +231,7 @@ [3,4) 3.0.2 2.3 - 2.0.0 + 2.0.1 3.9.1 7.0.0 4.2.1 From f293c757e166e62ee8a939204201d7f636bb80cb Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 4 Oct 2024 16:20:47 -0400 Subject: [PATCH 151/430] Update JUnit Jupiter to 5.11.2 Signed-off-by: Andriy Redko --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 049cfe8d18e..f02d68ca721 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -170,7 +170,7 @@ 3.0.1 1.0 4.13.2 - 5.11.1 + 5.11.2 2.0.3 7.0.1 1.1.2 From c4e9c3c7cc58d0e8a5e401491f632e67e2cf1af7 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 5 Oct 2024 11:10:45 -0400 Subject: [PATCH 152/430] CXF-8629: AsyncHTTPConduit (hc5) should support chunked request / response (#2021) --- .../auth/DigestAuthSupplierSpringTest.java | 2 + .../cxf/systest/hc5/jaxrs/FileStore.java | 139 +++++++++++++++++ .../systest/hc5/jaxrs/FileStoreServer.java | 47 ++++++ .../jaxrs/JAXRSAsyncClientChunkingTest.java | 141 ++++++++++++++++++ .../hc5/jaxws/JAXWSAsyncClientTest.java | 38 +++++ .../src/test/resources/logging.properties | 7 + 6 files changed, 374 insertions(+) create mode 100644 systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStore.java create mode 100644 systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStoreServer.java create mode 100644 systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientChunkingTest.java diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http/auth/DigestAuthSupplierSpringTest.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http/auth/DigestAuthSupplierSpringTest.java index 3b006085442..124fb11f5a6 100644 --- a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http/auth/DigestAuthSupplierSpringTest.java +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http/auth/DigestAuthSupplierSpringTest.java @@ -22,6 +22,7 @@ import jakarta.ws.rs.core.MediaType; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.transport.http.HTTPConduit; +import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit; import org.apache.cxf.transport.http.auth.DigestAuthSupplier; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @@ -67,6 +68,7 @@ public class DigestAuthSupplierSpringTest { @Test public void test() { WebClient client = WebClient.create("http://localhost:" + port, (String) null); + WebClient.getConfig(client).getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); assertThrows(NotAuthorizedException.class, () -> client.get(String.class)); diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStore.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStore.java new file mode 100644 index 00000000000..11e36a38135 --- /dev/null +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStore.java @@ -0,0 +1,139 @@ +/** + * 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.cxf.systest.hc5.jaxrs; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.Objects; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +import jakarta.activation.DataHandler; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.container.AsyncResponse; +import jakarta.ws.rs.container.Suspended; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.HttpHeaders; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.StreamingOutput; +import jakarta.ws.rs.core.UriInfo; +import org.apache.cxf.common.util.StringUtils; +import org.apache.cxf.helpers.IOUtils; +import org.apache.cxf.jaxrs.ext.multipart.Attachment; +import org.apache.cxf.jaxrs.ext.multipart.MultipartBody; + +@Path("/file-store") +public class FileStore { + private final ConcurrentMap store = new ConcurrentHashMap<>(); + @Context private HttpHeaders headers; + + @POST + @Path("/stream") + @Consumes("*/*") + public Response addBook(@QueryParam("chunked") boolean chunked, InputStream in) throws IOException { + String transferEncoding = headers.getHeaderString("Transfer-Encoding"); + + if (chunked != Objects.equals("chunked", transferEncoding)) { + throw new WebApplicationException(Status.EXPECTATION_FAILED); + } + + try (in) { + if (chunked) { + return Response.ok(new StreamingOutput() { + @Override + public void write(OutputStream out) throws IOException, WebApplicationException { + in.transferTo(out); + } + }).build(); + } else { + // Make sure we have small amount of data for chunking to not kick in + final byte[] content = in.readAllBytes(); + return Response.ok(Arrays.copyOf(content, content.length / 10)).build(); + } + } + } + + @POST + @Consumes("multipart/form-data") + public void addBook(@QueryParam("chunked") boolean chunked, + @Suspended final AsyncResponse response, @Context final UriInfo uri, final MultipartBody body) { + + String transferEncoding = headers.getHeaderString("Transfer-Encoding"); + if (chunked != Objects.equals("chunked", transferEncoding)) { + response.resume(Response.status(Status.EXPECTATION_FAILED).build()); + return; + } + + for (final Attachment attachment: body.getAllAttachments()) { + final DataHandler handler = attachment.getDataHandler(); + + if (handler != null) { + final String source = handler.getName(); + if (StringUtils.isEmpty(source)) { + response.resume(Response.status(Status.BAD_REQUEST).build()); + return; + } + + try { + if (store.containsKey(source)) { + response.resume(Response.status(Status.CONFLICT).build()); + return; + } + + final byte[] content = IOUtils.readBytesFromStream(handler.getInputStream()); + if (store.putIfAbsent(source, content) != null) { + response.resume(Response.status(Status.CONFLICT).build()); + return; + } + + if (response.isSuspended()) { + final StreamingOutput stream = new StreamingOutput() { + @Override + public void write(OutputStream os) throws IOException, WebApplicationException { + if (chunked) { + // Make sure we have enough data for chunking to kick in + for (int i = 0; i < 10; ++i) { + os.write(content); + } + } else { + os.write(content); + } + } + }; + response.resume(Response.created(uri.getRequestUriBuilder() + .path(source).build()).entity(stream) + .build()); + } + + } catch (final Exception ex) { + response.resume(Response.serverError().build()); + } + + } + } + } +} diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStoreServer.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStoreServer.java new file mode 100644 index 00000000000..44fec9dfa41 --- /dev/null +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStoreServer.java @@ -0,0 +1,47 @@ +/** + * 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.cxf.systest.hc5.jaxrs; + +import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; +import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.testutil.common.AbstractBusTestServerBase; + +class FileStoreServer extends AbstractBusTestServerBase { + private org.apache.cxf.endpoint.Server server; + private final String port; + + FileStoreServer(String port) { + this.port = port; + } + + protected void run() { + JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); + sf.setResourceClasses(FileStore.class); + sf.setResourceProvider(FileStore.class, new SingletonResourceProvider(new FileStore(), true)); + sf.setAddress("http://localhost:" + port); + server = sf.create(); + } + + public void tearDown() throws Exception { + server.stop(); + server.destroy(); + server = null; + } +} diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientChunkingTest.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientChunkingTest.java new file mode 100644 index 00000000000..0f687385345 --- /dev/null +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientChunkingTest.java @@ -0,0 +1,141 @@ +/** + * 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.cxf.systest.hc5.jaxrs; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Random; + +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; +import org.apache.cxf.interceptor.LoggingInInterceptor; +import org.apache.cxf.interceptor.LoggingOutInterceptor; +import org.apache.cxf.jaxrs.client.ClientConfiguration; +import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.jaxrs.ext.multipart.Attachment; +import org.apache.cxf.jaxrs.ext.multipart.MultipartBody; +import org.apache.cxf.jaxrs.impl.MetadataMap; +import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.provider.MultipartProvider; +import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; +import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized.Parameters; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@RunWith(value = org.junit.runners.Parameterized.class) +public class JAXRSAsyncClientChunkingTest extends AbstractBusClientServerTestBase { + private static final String PORT = allocatePort(FileStoreServer.class); + private final Boolean chunked; + + public JAXRSAsyncClientChunkingTest(Boolean chunked) { + this.chunked = chunked; + } + + @BeforeClass + public static void startServers() throws Exception { + AbstractResourceInfo.clearAllMaps(); + assertTrue("server did not launch correctly", launchServer(new FileStoreServer(PORT))); + createStaticBus(); + } + + @Parameters(name = "{0}") + public static Collection data() { + return Arrays.asList(new Boolean[] {Boolean.FALSE, Boolean.TRUE}); + } + + @Test + public void testMultipartChunking() { + final String url = "http://localhost:" + PORT + "/file-store"; + final WebClient webClient = WebClient.create(url, List.of(new MultipartProvider())).query("chunked", chunked); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + configureLogging(config); + + try { + final String filename = "keymanagers.jks"; + final MultivaluedMap headers = new MetadataMap<>(); + headers.add("Content-ID", filename); + headers.add("Content-Type", "application/binary"); + headers.add("Content-Disposition", "attachment; filename=" + chunked + "_" + filename); + final Attachment att = new Attachment(getClass().getResourceAsStream("/" + filename), headers); + final MultipartBody entity = new MultipartBody(att); + try (Response response = webClient.header("Content-Type", "multipart/form-data").post(entity)) { + assertThat(response.getStatus(), equalTo(201)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } + } finally { + webClient.close(); + } + } + + @Test + public void testStreamChunking() throws IOException { + final String url = "http://localhost:" + PORT + "/file-store/stream"; + final WebClient webClient = WebClient.create(url).query("chunked", chunked); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + configureLogging(config); + + final byte[] bytes = new byte [32 * 1024]; + final Random random = new Random(); + random.nextBytes(bytes); + + try (InputStream in = new ByteArrayInputStream(bytes)) { + final Entity entity = Entity.entity(in, MediaType.APPLICATION_OCTET_STREAM); + try (Response response = webClient.post(entity)) { + assertThat(response.getStatus(), equalTo(200)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } + } finally { + webClient.close(); + } + } + + private void configureLogging(final ClientConfiguration config) { + final LoggingOutInterceptor out = new LoggingOutInterceptor(); + out.setShowMultipartContent(false); + + final LoggingInInterceptor in = new LoggingInInterceptor(); + in.setShowBinaryContent(false); + + config.getInInterceptors().add(in); + config.getOutInterceptors().add(out); + } +} diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxws/JAXWSAsyncClientTest.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxws/JAXWSAsyncClientTest.java index 87aeab9545b..32806c92acc 100644 --- a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxws/JAXWSAsyncClientTest.java +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxws/JAXWSAsyncClientTest.java @@ -25,6 +25,7 @@ import java.net.URL; import java.util.ArrayList; import java.util.List; +import java.util.Random; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executors; import java.util.concurrent.Future; @@ -47,9 +48,12 @@ import jakarta.xml.ws.soap.SOAPBinding; import jakarta.xml.ws.soap.SOAPFaultException; import org.apache.cxf.endpoint.Client; +import org.apache.cxf.frontend.ClientProxy; import org.apache.cxf.greeter_control.AbstractGreeterImpl; import org.apache.cxf.greeter_control.Greeter; import org.apache.cxf.greeter_control.types.GreetMeResponse; +import org.apache.cxf.interceptor.LoggingInInterceptor; +import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; import org.apache.cxf.testutil.common.AbstractBusTestServerBase; @@ -60,6 +64,7 @@ import org.junit.Test; import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -143,6 +148,39 @@ public void testAsyncClient() throws Exception { } assertTrue("Response still not received.", response.isDone()); + assertThat(response.get().getResponseType(), equalTo("CXF")); + } + + @Test + public void testAsyncClientChunking() throws Exception { + // setup the feature by using JAXWS front-end API + JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); + factory.setAddress("http://localhost:" + PORT + "/SoapContext/GreeterPort"); + factory.getOutInterceptors().add(new LoggingOutInterceptor()); + factory.getInInterceptors().add(new LoggingInInterceptor()); + factory.setServiceClass(Greeter.class); + Greeter proxy = factory.create(Greeter.class); + + Client client = ClientProxy.getClient(proxy); + HTTPConduit http = (HTTPConduit) client.getConduit(); + http.getClient().setAllowChunking(true); + + final char[] bytes = new char [32 * 1024]; + final Random random = new Random(); + for (int i = 0; i < bytes.length; ++i) { + bytes[i] = (char)(random.nextInt(26) + 'a'); + } + + final String greeting = new String(bytes); + Response response = proxy.greetMeAsync(greeting); + int waitCount = 0; + while (!response.isDone() && waitCount < 15) { + Thread.sleep(1000); + waitCount++; + } + + assertTrue("Response still not received.", response.isDone()); + assertThat(response.get().getResponseType(), equalTo(greeting.toUpperCase())); } @Test diff --git a/systests/transport-hc5/src/test/resources/logging.properties b/systests/transport-hc5/src/test/resources/logging.properties index b2e5a799c83..c89316aba91 100644 --- a/systests/transport-hc5/src/test/resources/logging.properties +++ b/systests/transport-hc5/src/test/resources/logging.properties @@ -53,6 +53,13 @@ # Describes specific configuration info for Handlers. ############################################################ +# "handlers" specifies a comma separated list of log Handler +# classes. These handlers will be installed during VM startup. +# Note that these classes must be on the system classpath. +# By default we only configure a ConsoleHandler, which will only +# show messages at the INFO and above levels. +handlers= java.util.logging.ConsoleHandler + # default file output is in user's home directory. java.util.logging.FileHandler.pattern = %h/java%u.log java.util.logging.FileHandler.limit = 50000 From d3da696c254edcdd4ed95ad6ed24907f5ab036c1 Mon Sep 17 00:00:00 2001 From: "Freeman(Yue) Fang" Date: Tue, 8 Oct 2024 09:36:46 -0400 Subject: [PATCH 153/430] =?UTF-8?q?[CXF-9062]Be=20able=20to=20create=20Asy?= =?UTF-8?q?ncHTTPConduit=20based=20on=20URLConnectionHT=E2=80=A6=20(#2093)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [CXF-9062]Be able to create AsyncHTTPConduit based on URLConnectionHTTPConduit * [CXF-9062]address feedback --- .../http/asyncclient/AsyncHTTPConduit.java | 6 +- .../asyncclient/AsyncHTTPConduitFactory.java | 13 +- .../AsyncWrappedOutputStreamBase.java | 34 + .../CXFHttpAsyncResponseConsumer.java | 5 +- .../http/asyncclient/CXFHttpRequest.java | 8 +- .../URLConnectionAsyncHTTPConduit.java | 992 ++++++++++++++++ .../asyncclient/hc5/AsyncHTTPConduit.java | 6 +- .../hc5/AsyncHTTPConduitFactory.java | 13 +- .../hc5/AsyncWrappedOutputStreamBase.java | 34 + .../hc5/CXFHttpAsyncResponseConsumer.java | 5 +- .../http/asyncclient/hc5/CXFHttpRequest.java | 7 +- .../hc5/URLConnectionAsyncHTTPConduit.java | 1016 +++++++++++++++++ .../transport/http/HTTPTransportFactory.java | 13 +- .../http_undertow/UndertowDigestAuthTest.java | 2 +- ...AbstractUndertowClientServerHttp2Test.java | 8 +- .../http_jetty/JettyDigestAuthTest.java | 2 +- 16 files changed, 2126 insertions(+), 38 deletions(-) create mode 100644 rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java create mode 100755 rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java create mode 100644 rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncWrappedOutputStreamBase.java create mode 100644 rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java index 7325611b8b8..c3eb240191c 100755 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java @@ -31,7 +31,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.nio.ByteBuffer; -import java.nio.channels.WritableByteChannel; import java.security.GeneralSecurityException; import java.security.Principal; import java.security.cert.Certificate; @@ -58,7 +57,6 @@ import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.io.CacheAndWriteOutputStream; import org.apache.cxf.io.CachedOutputStream; -import org.apache.cxf.io.CopyingOutputStream; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageUtils; import org.apache.cxf.service.model.EndpointInfo; @@ -265,7 +263,7 @@ protected OutputStream createOutputStream(Message message, public class AsyncWrappedOutputStream extends WrappedOutputStream - implements CopyingOutputStream, WritableByteChannel { + implements AsyncWrappedOutputStreamBase { final HTTPClientPolicy csPolicy; CXFHttpRequest entity; @@ -618,7 +616,7 @@ private boolean isSslTargetDifferent(URI lastURL, URI url) { || lastURL.getPort() != url.getPort(); } - protected boolean retrySetHttpResponse(HttpResponse r) { + public boolean retrySetHttpResponse(HttpResponse r) { if (isAsync) { setHttpResponse(r); } diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java index f0c88a8cac0..9b0c928f29e 100644 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduitFactory.java @@ -32,6 +32,7 @@ import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transport.http.HTTPConduitFactory; import org.apache.cxf.transport.http.HTTPTransportFactory; +import org.apache.cxf.transport.http.URLConnectionHTTPConduit; import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; import org.apache.cxf.ws.addressing.EndpointReferenceType; import org.apache.http.HttpRequest; @@ -85,7 +86,8 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory { //CXF specific public static final String USE_POLICY = "org.apache.cxf.transport.http.async.usePolicy"; - + + public enum UseAsyncPolicy { ALWAYS, ASYNC_ONLY, NEVER; @@ -129,6 +131,7 @@ public static UseAsyncPolicy getPolicy(Object st) { int soTimeout = IOReactorConfig.DEFAULT.getSoTimeout(); boolean soKeepalive = IOReactorConfig.DEFAULT.isSoKeepalive(); boolean tcpNoDelay = true; + AsyncHTTPConduitFactory() { @@ -262,7 +265,11 @@ public HTTPConduit createConduit(Bus bus, if (isShutdown) { return null; } - return new AsyncHTTPConduit(bus, localInfo, target, this); + if (HTTPTransportFactory.isForceURLConnectionConduit()) { + return new URLConnectionAsyncHTTPConduit(bus, localInfo, target, this); + } else { + return new AsyncHTTPConduit(bus, localInfo, target, this); + } } public void shutdown() { @@ -375,7 +382,7 @@ public void addCookie(Cookie cookie) { protected void adaptClientBuilder(HttpAsyncClientBuilder httpAsyncClientBuilder) { } - public CloseableHttpAsyncClient createClient(final AsyncHTTPConduit c) throws IOException { + public CloseableHttpAsyncClient createClient(final URLConnectionHTTPConduit c) throws IOException { if (client == null) { setupNIOClient(c.getClient()); } diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java new file mode 100644 index 00000000000..66e5b241982 --- /dev/null +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java @@ -0,0 +1,34 @@ +/** + * 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.cxf.transport.http.asyncclient; + +import java.nio.channels.WritableByteChannel; + +import org.apache.cxf.io.CachedOutputStream; +import org.apache.cxf.io.CopyingOutputStream; +import org.apache.http.HttpResponse; + +interface AsyncWrappedOutputStreamBase + extends CopyingOutputStream, WritableByteChannel { + boolean retransmitable(); + + CachedOutputStream getCachedStream(); + + boolean retrySetHttpResponse(HttpResponse r); +} diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpAsyncResponseConsumer.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpAsyncResponseConsumer.java index 09af41f64b0..bae369f4dc0 100644 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpAsyncResponseConsumer.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/CXFHttpAsyncResponseConsumer.java @@ -21,7 +21,6 @@ import java.io.IOException; -import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit.AsyncWrappedOutputStream; import org.apache.http.HttpException; import org.apache.http.HttpResponse; import org.apache.http.nio.ContentDecoder; @@ -32,7 +31,7 @@ public class CXFHttpAsyncResponseConsumer implements HttpAsyncResponseConsumer { private final SharedInputBuffer buf; - private final AsyncWrappedOutputStream outstream; + private final AsyncWrappedOutputStreamBase outstream; private final CXFResponseCallback responseCallback; private volatile boolean completed; @@ -40,7 +39,7 @@ public class CXFHttpAsyncResponseConsumer implements HttpAsyncResponseConsumer connectionFuture; + + private Object sessionLock = new Object(); + private boolean closed; + + public AsyncWrappedOutputStream(Message message, + boolean needToCacheRequest, + boolean isChunking, + int chunkThreshold, + String conduitName, + URI uri) { + super(message, + needToCacheRequest, + isChunking, + chunkThreshold, + conduitName, + uri); + csPolicy = getClient(message); + entity = message.get(CXFHttpRequest.class); + basicEntity = (BasicHttpEntity)entity.getEntity(); + basicEntity.setChunked(isChunking); + HeapByteBufferAllocator allocator = new HeapByteBufferAllocator(); + int bufSize = csPolicy.getChunkLength() > 0 ? csPolicy.getChunkLength() : 16320; + inbuf = new SharedInputBuffer(bufSize, allocator); + outbuf = new SharedOutputBuffer(bufSize, allocator); + isAsync = outMessage != null && outMessage.getExchange() != null + && !outMessage.getExchange().isSynchronous(); + } + + public boolean retransmitable() { + return cachedStream != null; + } + public CachedOutputStream getCachedStream() { + return cachedStream; + } + + + protected void setProtocolHeaders() throws IOException { + Headers h = new Headers(outMessage); + basicEntity.setContentType(h.determineContentType()); + boolean addHeaders = MessageUtils.getContextualBoolean(outMessage, Headers.ADD_HEADERS_PROPERTY, false); + + for (Map.Entry> header : h.headerMap().entrySet()) { + if (HttpHeaderHelper.CONTENT_TYPE.equalsIgnoreCase(header.getKey())) { + continue; + } + if (addHeaders || HttpHeaderHelper.COOKIE.equalsIgnoreCase(header.getKey())) { + for (String s : header.getValue()) { + entity.addHeader(HttpHeaderHelper.COOKIE, s); + } + } else if (!"Content-Length".equalsIgnoreCase(header.getKey())) { + StringBuilder b = new StringBuilder(); + for (int i = 0; i < header.getValue().size(); i++) { + b.append(header.getValue().get(i)); + if (i + 1 < header.getValue().size()) { + b.append(','); + } + } + entity.setHeader(header.getKey(), b.toString()); + } + if (!entity.containsHeader("User-Agent")) { + entity.setHeader("User-Agent", Version.getCompleteVersionString()); + } + } + } + + protected void setFixedLengthStreamingMode(int i) { + basicEntity.setChunked(false); + basicEntity.setContentLength(i); + } + public void thresholdReached() throws IOException { + basicEntity.setChunked(chunking); + } + + protected void handleNoOutput() throws IOException { + connect(false); + outbuf.writeCompleted(); + } + + public boolean isOpen() { + return !closed; + } + + public int write(ByteBuffer src) throws IOException { + int total = 0; + if (buffer != null) { + int pos = buffer.size(); + int len = this.threshold - pos; + if (len > src.remaining()) { + len = src.remaining(); + } + src.get(buffer.getRawBytes(), pos, len); + buffer.setSize(buffer.size() + len); + total += len; + if (buffer.size() >= threshold) { + thresholdReached(); + unBuffer(); + } + } + if (cachingForRetransmission) { + wrappedStream.write(src.array(), src.position(), src.remaining()); + return src.remaining() + total; + } + return outbuf.write(src) + total; + } + + public int copyFrom(InputStream in) throws IOException { + int count = 0; + while (buffer != null) { + int pos = buffer.size(); + int i = in.read(buffer.getRawBytes(), pos, + this.threshold - pos); + if (i > 0) { + buffer.setSize(pos + i); + if (buffer.size() >= threshold) { + thresholdReached(); + unBuffer(); + } + count += i; + } else { + return count; + } + } + + if (cachingForRetransmission) { + count += IOUtils.copy(in, wrappedStream); + } else { + count += outbuf.copy(in); + } + return count; + } + + @Override + public void close() throws IOException { + if (closed) { + return; + } + closed = true; + if (!chunking && wrappedStream instanceof CachedOutputStream) { + CachedOutputStream out = (CachedOutputStream)wrappedStream; + this.basicEntity.setContentLength(out.size()); + wrappedStream = null; + handleHeadersTrustCaching(); + out.writeCacheTo(wrappedStream); + } + super.close(); + } + + @Override + protected void onFirstWrite() throws IOException { + if (chunking) { + super.onFirstWrite(); + } else { + wrappedStream = new CachedOutputStream(); + } + } + + protected void setupWrappedStream() throws IOException { + connect(true); + wrappedStream = new OutputStream() { + public void write(byte[] b, int off, int len) throws IOException { + if (exception instanceof IOException) { + throw (IOException) exception; + } + outbuf.write(b, off, len); + } + public void write(int b) throws IOException { + if (exception instanceof IOException) { + throw (IOException) exception; + } + outbuf.write(b); + } + public void close() throws IOException { + outbuf.writeCompleted(); + } + }; + + // If we need to cache for retransmission, store data in a + // CacheAndWriteOutputStream. Otherwise write directly to the output stream. + if (cachingForRetransmission) { + cachedStream = new CacheAndWriteOutputStream(wrappedStream); + wrappedStream = cachedStream; + } + } + + protected void connect(boolean output) throws IOException { + if (connectionFuture != null) { + return; + } + + CXFResponseCallback delegate = new CXFResponseCallback() { + @Override + public void responseReceived(HttpResponse response) { + setHttpResponse(response); + } + + }; + + CXFResponseCallback responseCallback = delegate; + if (asyncHttpResponseWrapperFactory != null) { + final AsyncHttpResponseWrapper wrapper = asyncHttpResponseWrapperFactory.create(); + if (wrapper != null) { + responseCallback = new CXFResponseCallback() { + @Override + public void responseReceived(HttpResponse response) { + wrapper.responseReceived(response, delegate::responseReceived); + } + }; + } + } + FutureCallback callback = new FutureCallback() { + + public void completed(Boolean result) { + } + + public void failed(Exception ex) { + setException(ex); + inbuf.shutdown(); + outbuf.shutdown(); + } + public void cancelled() { + handleCancelled(); + inbuf.shutdown(); + outbuf.shutdown(); + } + + }; + + if (!output) { + entity.removeHeaders("Transfer-Encoding"); + entity.removeHeaders("Content-Type"); + entity.setEntity(null); + } + + HttpClientContext ctx = HttpClientContext.create(); + + BasicCredentialsProvider credsProvider = new BasicCredentialsProvider() { + + @Override + public Credentials getCredentials(final AuthScope authscope) { + Credentials creds = super.getCredentials(authscope); + if (creds != null) { + return creds; + } + if (URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy != null + && URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName() != null) { + return new UsernamePasswordCredentials(URLConnectionAsyncHTTPConduit.this + .proxyAuthorizationPolicy.getUserName(), + URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getPassword()); + } + return null; + } + + }; + + ctx.setCredentialsProvider(credsProvider); + + if ("https".equals(url.getScheme())) { + try { + RegistryBuilder regBuilder + = RegistryBuilder.create() + .register("http", NoopIOSessionStrategy.INSTANCE); + + // check tlsClientParameters from message header + TLSClientParameters tlsClientParameters = outMessage.get(TLSClientParameters.class); + if (tlsClientParameters == null) { + tlsClientParameters = getTlsClientParameters(); + } + if (tlsClientParameters == null) { + tlsClientParameters = new TLSClientParameters(); + } + final SSLContext sslcontext = getSSLContext(tlsClientParameters); + final HostnameVerifier verifier = org.apache.cxf.transport.https.SSLUtils + .getHostnameVerifier(tlsClientParameters); + regBuilder + .register("https", + new SSLIOSessionStrategy(sslcontext) { + @Override + protected void initializeEngine(SSLEngine engine) { + initializeSSLEngine(sslcontext, engine); + } + @Override + protected void verifySession(final HttpHost host, + final IOSession iosession, + final SSLSession sslsession) throws SSLException { + if (!verifier.verify(host.getHostName(), sslsession)) { + throw new SSLException("Could not verify host " + host.getHostName()); + } + + iosession.setAttribute("cxf.handshake.done", Boolean.TRUE); + setSSLSession(sslsession); + } + }); + // See please https://issues.apache.org/jira/browse/HTTPASYNC-168, the attribute names + // are case-sensitive. + ctx.setAttribute("http.iosession-factory-registry", regBuilder.build()); + ctx.setAttribute("http.ioSession-factory-registry", regBuilder.build()); + } catch (GeneralSecurityException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + + if (sslURL != null && isSslTargetDifferent(sslURL, url)) { + sslURL = null; + sslState = null; + session = null; + } + if (tlsClientParameters != null && tlsClientParameters.hashCode() == lastTlsHash) { + ctx.setUserToken(sslState); + } + + connectionFuture = new BasicFuture<>(callback); + HttpAsyncClient c = getHttpAsyncClient(); + Credentials creds = (Credentials)outMessage.getContextualProperty(Credentials.class.getName()); + if (creds != null) { + credsProvider.setCredentials(AuthScope.ANY, creds); + ctx.setUserToken(creds.getUserPrincipal()); + } + @SuppressWarnings("unchecked") + Registry asp = (Registry)outMessage + .getContextualProperty(AuthSchemeProvider.class.getName()); + if (asp != null) { + ctx.setAuthSchemeRegistry(asp); + } + + c.execute(new CXFHttpAsyncRequestProducer(entity, outbuf), + new CXFHttpAsyncResponseConsumer(this, inbuf, responseCallback), + ctx, + callback); + } + + private boolean isSslTargetDifferent(URI lastURL, URI url) { + return !lastURL.getScheme().equals(url.getScheme()) + || !lastURL.getHost().equals(url.getHost()) + || lastURL.getPort() != url.getPort(); + } + + public boolean retrySetHttpResponse(HttpResponse r) { + if (isAsync) { + setHttpResponse(r); + } + + return !isAsync; + } + protected synchronized void setHttpResponse(HttpResponse r) { + httpResponse = r; + if (isAsync) { + //got a response, need to start the response processing now + try { + handleResponseOnWorkqueue(false, true); + isAsync = false; // don't trigger another start on next block. :-) + } catch (Exception ex) { + //ignore, we'll try again on the next consume; + } + } + notifyAll(); + } + protected synchronized void setException(Exception ex) { + exception = ex; + if (isAsync) { + //got a response, need to start the response processing now + try { + handleResponseOnWorkqueue(false, true); + isAsync = false; // don't trigger another start on next block. :-) + } catch (Exception ex2) { + ex2.printStackTrace(); + } + } + notifyAll(); + } + protected synchronized void handleCancelled() { + notifyAll(); + } + + protected synchronized HttpResponse getHttpResponse() throws IOException { + while (httpResponse == null) { + if (exception == null) { //already have an exception, skip waiting + try { + wait(); + } catch (InterruptedException e) { + throw new IOException(e); + } + } + if (httpResponse == null) { + outbuf.shutdown(); + inbuf.shutdown(); + //outbuf = null; + //inbuf = null; + + if (exception != null) { + if (exception instanceof IOException) { + throw (IOException)exception; + } + if (exception instanceof RuntimeException) { + throw (RuntimeException)exception; + } + throw new IOException(exception); + } + + throw new SocketTimeoutException("Read Timeout"); + } + } + return httpResponse; + } + + protected void handleResponseAsync() throws IOException { + + } + + protected void closeInputStream() throws IOException { + byte[] bytes = new byte[1024]; + while (inbuf.read(bytes) > 0) { + //nothing + } + inbuf.close(); + inbuf.shutdown(); + } + + protected synchronized InputStream getInputStream() throws IOException { + return new InputStream() { + public int read() throws IOException { + return inbuf.read(); + } + public int read(byte[] b) throws IOException { + return inbuf.read(b); + } + public int read(byte[] b, int off, int len) throws IOException { + return inbuf.read(b, off, len); + } + public int available() throws IOException { + return inbuf.available(); + } + public void close() throws IOException { + inbuf.close(); + } + }; + } + + protected boolean usingProxy() { + return this.entity.getConfig().getProxy() != null; + } + + protected HttpsURLConnectionInfo getHttpsURLConnectionInfo() throws IOException { + if ("http".equals(outMessage.get("http.scheme"))) { + return null; + } + connect(true); + synchronized (sessionLock) { + if (session == null) { + try { + sessionLock.wait(csPolicy.getConnectionTimeout()); + } catch (InterruptedException e) { + throw new IOException(e); + } + } + if (session == null) { + throw new IOException("No SSLSession detected"); + } + } + HostnameVerifier verifier = org.apache.cxf.transport.https.SSLUtils + .getHostnameVerifier(tlsClientParameters); + if (!verifier.verify(url.getHost(), session)) { + throw new IOException("Could not verify host " + url.getHost()); + } + + String method = (String)outMessage.get(Message.HTTP_REQUEST_METHOD); + String cipherSuite = null; + Certificate[] localCerts = null; + Principal principal = null; + Certificate[] serverCerts = null; + Principal peer = null; + if (session != null) { + cipherSuite = session.getCipherSuite(); + localCerts = session.getLocalCertificates(); + principal = session.getLocalPrincipal(); + serverCerts = session.getPeerCertificates(); + peer = session.getPeerPrincipal(); + } + + return new HttpsURLConnectionInfo(url, method, cipherSuite, localCerts, principal, serverCerts, peer); + } + + protected int getResponseCode() throws IOException { + return getHttpResponse().getStatusLine().getStatusCode(); + } + + protected String getResponseMessage() throws IOException { + return getHttpResponse().getStatusLine().getReasonPhrase(); + } + + private String readHeaders(Headers h) throws IOException { + Header[] headers = getHttpResponse().getAllHeaders(); + h.headerMap().clear(); + String ct = null; + for (Header header : headers) { + List s = h.headerMap().get(header.getName()); + if (s == null) { + s = new ArrayList<>(1); + h.headerMap().put(header.getName(), s); + } + s.add(header.getValue()); + if ("Content-Type".equalsIgnoreCase(header.getName())) { + ct = header.getValue(); + } + } + return ct; + } + + protected void updateResponseHeaders(Message inMessage) throws IOException { + Headers h = new Headers(inMessage); + inMessage.put(Message.CONTENT_TYPE, readHeaders(h)); + cookies.readFromHeaders(h); + } + + protected InputStream getPartialResponse() throws IOException { + InputStream in = null; + int responseCode = getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_ACCEPTED + || responseCode == HttpURLConnection.HTTP_OK) { + + Header head = httpResponse.getFirstHeader(HttpHeaderHelper.CONTENT_LENGTH); + int cli = 0; + if (head != null) { + cli = Integer.parseInt(head.getValue()); + } + head = httpResponse.getFirstHeader(HttpHeaderHelper.TRANSFER_ENCODING); + boolean isChunked = head != null && HttpHeaderHelper.CHUNKED.equalsIgnoreCase(head.getValue()); + head = httpResponse.getFirstHeader(HttpHeaderHelper.CONNECTION); + boolean isEofTerminated = head != null && HttpHeaderHelper.CLOSE.equalsIgnoreCase(head.getValue()); + if (cli > 0) { + in = getInputStream(); + } else if (isChunked || isEofTerminated) { + // ensure chunked or EOF-terminated response is non-empty + try { + PushbackInputStream pin = + new PushbackInputStream(getInputStream()); + int c = pin.read(); + if (c != -1) { + pin.unread((byte)c); + in = pin; + } + } catch (IOException ioe) { + // ignore + } + } + } + return in; + } + + protected void updateCookiesBeforeRetransmit() throws IOException { + Headers h = new Headers(); + readHeaders(h); + cookies.readFromHeaders(h); + } + + protected boolean authorizationRetransmit() throws IOException { + boolean b = super.authorizationRetransmit(); + if (!b) { + //HTTPClient may be handling the authorization things instead of us, we + //just need to make sure we set the cookies and proceed and HC + //will do the negotiation and such. + try { + closeInputStream(); + } catch (Throwable t) { + //ignore + } + cookies.writeToMessageHeaders(outMessage); + retransmit(url.toString()); + return true; + } + return b; + } + + protected void retransmitStream() throws IOException { + cachingForRetransmission = false; //already cached + setupWrappedStream(); + cachedStream.writeCacheTo(wrappedStream); + wrappedStream.flush(); + wrappedStream.close(); + } + + protected void setupNewConnection(String newURL) throws IOException { + httpResponse = null; + isAsync = outMessage != null && outMessage.getExchange() != null + && !outMessage.getExchange().isSynchronous(); + exception = null; + connectionFuture = null; + session = null; + sslState = null; + sslURL = null; + + //reset the buffers + HeapByteBufferAllocator allocator = new HeapByteBufferAllocator(); + int bufSize = csPolicy.getChunkLength() > 0 ? csPolicy.getChunkLength() : 16320; + inbuf = new SharedInputBuffer(bufSize, allocator); + outbuf = new SharedOutputBuffer(bufSize, allocator); + try { + if (defaultAddress.getString().equals(newURL)) { + setupConnection(outMessage, defaultAddress, csPolicy); + } else { + Address address = new Address(newURL); + this.url = address.getURI(); + setupConnection(outMessage, address, csPolicy); + } + entity = outMessage.get(CXFHttpRequest.class); + basicEntity = (BasicHttpEntity)entity.getEntity(); + entity.setOutputStream(this); + } catch (URISyntaxException e) { + throw new IOException(e); + } + } + + + public void setSSLSession(SSLSession sslsession) { + session = sslsession; + synchronized (sessionLock) { + sslState = sslsession.getLocalPrincipal(); + sslURL = url; + sessionLock.notifyAll(); + } + } + + } + + public synchronized SSLContext getSSLContext(TLSClientParameters tlsClientParameters) + throws GeneralSecurityException { + + int hash = tlsClientParameters.hashCode(); + if (hash == lastTlsHash && sslContext != null) { + return sslContext; + } + + final SSLContext ctx; + if (tlsClientParameters.getSslContext() != null) { + ctx = tlsClientParameters.getSslContext(); + } else { + String provider = tlsClientParameters.getJsseProvider(); + + String protocol = tlsClientParameters.getSecureSocketProtocol() != null ? tlsClientParameters + .getSecureSocketProtocol() : "TLS"; + + ctx = provider == null ? SSLContext.getInstance(protocol) : SSLContext + .getInstance(protocol, provider); + + KeyManager[] keyManagers = tlsClientParameters.getKeyManagers(); + if (keyManagers == null) { + keyManagers = org.apache.cxf.configuration.jsse.SSLUtils.getDefaultKeyStoreManagers(LOG); + } + KeyManager[] configuredKeyManagers = + org.apache.cxf.transport.https.SSLUtils.configureKeyManagersWithCertAlias( + tlsClientParameters, keyManagers); + + TrustManager[] trustManagers = tlsClientParameters.getTrustManagers(); + if (trustManagers == null) { + trustManagers = org.apache.cxf.configuration.jsse.SSLUtils.getDefaultTrustStoreManagers(LOG); + } + + ctx.init(configuredKeyManagers, trustManagers, tlsClientParameters.getSecureRandom()); + + if (ctx.getClientSessionContext() != null) { + ctx.getClientSessionContext().setSessionTimeout(tlsClientParameters.getSslCacheTimeout()); + } + } + + sslContext = ctx; + lastTlsHash = hash; + sslState = null; + sslURL = null; + session = null; + return ctx; + } + + public void initializeSSLEngine(SSLContext sslcontext, SSLEngine sslengine) { + TLSClientParameters tlsClientParameters = getTlsClientParameters(); + if (tlsClientParameters == null) { + tlsClientParameters = new TLSClientParameters(); + } + + String[] cipherSuites = + SSLUtils.getCiphersuitesToInclude(tlsClientParameters.getCipherSuites(), + tlsClientParameters.getCipherSuitesFilter(), + sslcontext.getSocketFactory().getDefaultCipherSuites(), + SSLUtils.getSupportedCipherSuites(sslcontext), + LOG); + sslengine.setEnabledCipherSuites(cipherSuites); + + String protocol = tlsClientParameters.getSecureSocketProtocol() != null ? tlsClientParameters + .getSecureSocketProtocol() : sslcontext.getProtocol(); + + String[] p = findProtocols(protocol, sslengine.getSupportedProtocols()); + if (p != null) { + sslengine.setEnabledProtocols(p); + } + } + + private String[] findProtocols(String p, String[] options) { + List list = new ArrayList<>(); + for (String s : options) { + if (s.equals(p)) { + return new String[] {p}; + } else if (s.startsWith(p)) { + list.add(s); + } + } + if (list.isEmpty()) { + return null; + } + return list.toArray(new String[0]); + } + +} diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java index 33351f17d63..3372ae43432 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java @@ -31,7 +31,6 @@ import java.net.URI; import java.net.URISyntaxException; import java.nio.ByteBuffer; -import java.nio.channels.WritableByteChannel; import java.security.GeneralSecurityException; import java.security.Principal; import java.security.cert.Certificate; @@ -58,7 +57,6 @@ import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.io.CacheAndWriteOutputStream; import org.apache.cxf.io.CachedOutputStream; -import org.apache.cxf.io.CopyingOutputStream; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageUtils; import org.apache.cxf.service.model.EndpointInfo; @@ -285,7 +283,7 @@ protected OutputStream createOutputStream(Message message, boolean needToCacheRe } public class AsyncWrappedOutputStream extends WrappedOutputStream - implements CopyingOutputStream, WritableByteChannel { + implements AsyncWrappedOutputStreamBase { private final HTTPClientPolicy csPolicy; private CXFHttpRequest entity; @@ -634,7 +632,7 @@ private boolean isSslTargetDifferent(URI lastURL, URI url) { || lastURL.getPort() != url.getPort(); } - protected boolean retrySetHttpResponse(HttpResponse r) { + public boolean retrySetHttpResponse(HttpResponse r) { if (isAsync) { setHttpResponse(r); } diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java index 0c1114cd5d3..634843dc195 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java @@ -35,6 +35,7 @@ import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transport.http.HTTPConduitFactory; import org.apache.cxf.transport.http.HTTPTransportFactory; +import org.apache.cxf.transport.http.URLConnectionHTTPConduit; import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; import org.apache.cxf.ws.addressing.EndpointReferenceType; import org.apache.hc.client5.http.SystemDefaultDnsResolver; @@ -89,7 +90,8 @@ public class AsyncHTTPConduitFactory implements HTTPConduitFactory { public static final String USE_POLICY = "org.apache.cxf.transport.http.async.usePolicy"; private static final Logger LOG = LogUtils.getL7dLogger(AsyncHTTPConduitFactory.class); - + + public enum UseAsyncPolicy { ALWAYS, ASYNC_ONLY, NEVER; @@ -154,6 +156,7 @@ public PoolingAsyncClientConnectionManager getConnectionManager() { private boolean soKeepalive = IOReactorConfig.DEFAULT.isSoKeepalive(); private boolean tcpNoDelay = true; + AsyncHTTPConduitFactory() { super(); } @@ -276,7 +279,11 @@ public HTTPConduit createConduit(Bus bus, EndpointInfo localInfo, if (isShutdown) { return null; } - return new AsyncHTTPConduit(bus, localInfo, target, this); + if (HTTPTransportFactory.isForceURLConnectionConduit()) { + return new URLConnectionAsyncHTTPConduit(bus, localInfo, target, this); + } else { + return new AsyncHTTPConduit(bus, localInfo, target, this); + } } public void shutdown() { @@ -399,7 +406,7 @@ public void addCookie(Cookie cookie) { protected void adaptClientBuilder(HttpAsyncClientBuilder httpAsyncClientBuilder) { } - public CloseableHttpAsyncClient createClient(final AsyncHTTPConduit c, final TlsStrategy tlsStrategy) + public CloseableHttpAsyncClient createClient(final URLConnectionHTTPConduit c, final TlsStrategy tlsStrategy) throws IOException { return clients diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncWrappedOutputStreamBase.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncWrappedOutputStreamBase.java new file mode 100644 index 00000000000..de367316363 --- /dev/null +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncWrappedOutputStreamBase.java @@ -0,0 +1,34 @@ +/** + * 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.cxf.transport.http.asyncclient.hc5; + +import java.nio.channels.WritableByteChannel; + +import org.apache.cxf.io.CachedOutputStream; +import org.apache.cxf.io.CopyingOutputStream; +import org.apache.hc.core5.http.HttpResponse; + +interface AsyncWrappedOutputStreamBase + extends CopyingOutputStream, WritableByteChannel { + boolean retransmitable(); + + CachedOutputStream getCachedStream(); + + boolean retrySetHttpResponse(HttpResponse r); +} diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpAsyncResponseConsumer.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpAsyncResponseConsumer.java index 5808de48703..2ed2b634e17 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpAsyncResponseConsumer.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/CXFHttpAsyncResponseConsumer.java @@ -23,7 +23,6 @@ import java.nio.ByteBuffer; import java.util.List; -import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit.AsyncWrappedOutputStream; import org.apache.hc.core5.concurrent.FutureCallback; import org.apache.hc.core5.http.EntityDetails; import org.apache.hc.core5.http.Header; @@ -35,7 +34,7 @@ public class CXFHttpAsyncResponseConsumer implements AsyncResponseConsumer { private final SharedInputBuffer buf; - private final AsyncWrappedOutputStream outstream; + private final AsyncWrappedOutputStreamBase outstream; private final CXFResponseCallback responseCallback; private volatile boolean completed; @@ -43,7 +42,7 @@ public class CXFHttpAsyncResponseConsumer implements AsyncResponseConsumer connectionFuture; + + private Object sessionLock = new Object(); + private boolean closed; + + public AsyncWrappedOutputStream(Message message, boolean needToCacheRequest, boolean isChunking, + int chunkThreshold, String conduitName, URI uri) { + super(message, needToCacheRequest, isChunking, chunkThreshold, conduitName, uri); + + csPolicy = getClient(message); + entity = message.get(CXFHttpRequest.class); + basicEntity = (MutableHttpEntity)entity.getEntity(); + basicEntity.setChunked(isChunking); + + final int bufSize = csPolicy.getChunkLength() > 0 ? csPolicy.getChunkLength() : 16320; + inbuf = new SharedInputBuffer(bufSize); + outbuf = new SharedOutputBuffer(bufSize); + isAsync = outMessage != null && outMessage.getExchange() != null + && !outMessage.getExchange().isSynchronous(); + } + + public boolean retransmitable() { + return cachedStream != null; + } + + public CachedOutputStream getCachedStream() { + return cachedStream; + } + + protected void setProtocolHeaders() throws IOException { + final Headers h = new Headers(outMessage); + basicEntity.setContentType(h.determineContentType()); + + final boolean addHeaders = MessageUtils.getContextualBoolean(outMessage, + Headers.ADD_HEADERS_PROPERTY, false); + for (Map.Entry> header : h.headerMap().entrySet()) { + if (HttpHeaderHelper.CONTENT_TYPE.equalsIgnoreCase(header.getKey())) { + continue; + } + if (addHeaders || HttpHeaderHelper.COOKIE.equalsIgnoreCase(header.getKey())) { + for (String s : header.getValue()) { + entity.addHeader(HttpHeaderHelper.COOKIE, s); + } + } else if (!"Content-Length".equalsIgnoreCase(header.getKey())) { + StringBuilder b = new StringBuilder(); + for (int i = 0; i < header.getValue().size(); i++) { + b.append(header.getValue().get(i)); + if (i + 1 < header.getValue().size()) { + b.append(','); + } + } + entity.setHeader(header.getKey(), b.toString()); + } + if (!entity.containsHeader("User-Agent")) { + entity.setHeader("User-Agent", Version.getCompleteVersionString()); + } + } + } + + protected void setFixedLengthStreamingMode(int i) { + basicEntity.setChunked(false); + basicEntity.setContentLength(i); + } + + public void thresholdReached() throws IOException { + basicEntity.setChunked(chunking); + } + + protected void handleNoOutput() throws IOException { + connect(false); + outbuf.writeCompleted(); + } + + public boolean isOpen() { + return !closed; + } + + public int write(ByteBuffer src) throws IOException { + int total = 0; + if (buffer != null) { + int pos = buffer.size(); + int len = this.threshold - pos; + if (len > src.remaining()) { + len = src.remaining(); + } + src.get(buffer.getRawBytes(), pos, len); + buffer.setSize(buffer.size() + len); + total += len; + if (buffer.size() >= threshold) { + thresholdReached(); + unBuffer(); + } + } + if (cachingForRetransmission) { + wrappedStream.write(src.array(), src.position(), src.remaining()); + return src.remaining() + total; + } + return outbuf.write(src) + total; + } + + public int copyFrom(InputStream in) throws IOException { + int count = 0; + while (buffer != null) { + int pos = buffer.size(); + int i = in.read(buffer.getRawBytes(), pos, + this.threshold - pos); + if (i > 0) { + buffer.setSize(pos + i); + if (buffer.size() >= threshold) { + thresholdReached(); + unBuffer(); + } + count += i; + } else { + return count; + } + } + + if (cachingForRetransmission) { + count += IOUtils.copy(in, wrappedStream); + } else { + count += outbuf.copy(in); + } + return count; + } + + @Override + public void close() throws IOException { + if (closed) { + return; + } + closed = true; + if (!chunking && wrappedStream instanceof CachedOutputStream) { + CachedOutputStream out = (CachedOutputStream)wrappedStream; + this.basicEntity.setContentLength(out.size()); + wrappedStream = null; + handleHeadersTrustCaching(); + out.writeCacheTo(wrappedStream); + } + super.close(); + } + + @Override + protected void onFirstWrite() throws IOException { + if (chunking) { + super.onFirstWrite(); + } else { + wrappedStream = new CachedOutputStream(); + } + } + + protected void setupWrappedStream() throws IOException { + connect(true); + wrappedStream = new OutputStream() { + public void write(byte[] b, int off, int len) throws IOException { + if (exception instanceof IOException) { + throw (IOException) exception; + } + outbuf.write(b, off, len); + } + public void write(int b) throws IOException { + if (exception instanceof IOException) { + throw (IOException) exception; + } + outbuf.write(b); + } + public void close() throws IOException { + outbuf.writeCompleted(); + } + }; + + // If we need to cache for retransmission, store data in a + // CacheAndWriteOutputStream. Otherwise write directly to the output stream. + if (cachingForRetransmission) { + cachedStream = new CacheAndWriteOutputStream(wrappedStream); + wrappedStream = cachedStream; + } + } + + protected void connect(boolean output) throws IOException { + if (connectionFuture != null) { + return; + } + + final CXFResponseCallback delegate = new CXFResponseCallback() { + @Override + public void responseReceived(HttpResponse response) { + setHttpResponse(response); + } + + }; + + CXFResponseCallback responseCallback = delegate; + if (asyncHttpResponseWrapperFactory != null) { + final AsyncHttpResponseWrapper wrapper = asyncHttpResponseWrapperFactory.create(); + if (wrapper != null) { + responseCallback = new CXFResponseCallback() { + @Override + public void responseReceived(HttpResponse response) { + wrapper.responseReceived(response, delegate::responseReceived); + } + }; + } + } + + + FutureCallback callback = new FutureCallback() { + + public void completed(Boolean result) { + } + + public void failed(Exception ex) { + setException(ex); + inbuf.shutdown(); + outbuf.shutdown(); + } + public void cancelled() { + handleCancelled(); + inbuf.shutdown(); + outbuf.shutdown(); + } + + }; + + if (!output) { + entity.removeHeaders("Transfer-Encoding"); + entity.removeHeaders("Content-Type"); + entity.setEntity(null); + } + + HttpClientContext ctx = HttpClientContext.create(); + + BasicCredentialsProvider credsProvider = new BasicCredentialsProvider() { + @Override + public Credentials getCredentials(final AuthScope authscope, HttpContext context) { + Credentials creds = super.getCredentials(authscope, context); + + if (creds != null) { + return creds; + } + if (URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy != null + && URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName() != null) { + return new UsernamePasswordCredentials( + URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getUserName(), + URLConnectionAsyncHTTPConduit.this.proxyAuthorizationPolicy.getPassword(). + toCharArray()); + } + return null; + } + + }; + + ctx.setCredentialsProvider(credsProvider); + + TlsStrategy tlsStrategy = null; + if ("https".equals(url.getScheme())) { + try { + + // check tlsClientParameters from message header + TLSClientParameters tlsClientParameters = outMessage.get(TLSClientParameters.class); + if (tlsClientParameters == null) { + tlsClientParameters = getTlsClientParameters(); + } + if (tlsClientParameters == null) { + tlsClientParameters = new TLSClientParameters(); + } + final SSLContext sslcontext = getSSLContext(tlsClientParameters); + final HostnameVerifier verifier = org.apache.cxf.transport.https.SSLUtils + .getHostnameVerifier(tlsClientParameters); + + tlsStrategy = new BasicClientTlsStrategy(sslcontext, + new SSLSessionInitializer() { + @Override + public void initialize(NamedEndpoint endpoint, SSLEngine engine) { + initializeSSLEngine(sslcontext, engine); + } + }, + new SSLSessionVerifier() { + @Override + public TlsDetails verify(NamedEndpoint endpoint, SSLEngine engine) + throws SSLException { + final SSLSession sslsession = engine.getSession(); + + if (!verifier.verify(endpoint.getHostName(), sslsession)) { + throw new SSLException("Could not verify host " + endpoint.getHostName()); + } + + setSSLSession(sslsession); + return new TlsDetails(sslsession, engine.getApplicationProtocol()); + } + } + ); + } catch (final GeneralSecurityException e) { + LOG.warning(e.getMessage()); + } + } + + if (sslURL != null && isSslTargetDifferent(sslURL, url)) { + sslURL = null; + sslState = null; + session = null; + } + + if (tlsClientParameters != null && tlsClientParameters.hashCode() == lastTlsHash) { + ctx.setUserToken(sslState); + } + + connectionFuture = new BasicFuture<>(callback); + // The HttpClientContext is not available in the AsyncClientConnectionOperator, so we have + // to provide our own TLS strategy on construction. + final HttpAsyncClient c = getHttpAsyncClient(tlsStrategy); + final Credentials creds = (Credentials)outMessage.getContextualProperty(Credentials.class.getName()); + if (creds != null) { + credsProvider.setCredentials(new AuthScope(url.getHost(), url.getPort()), creds); + ctx.setUserToken(creds.getUserPrincipal()); + } + @SuppressWarnings("unchecked") + Registry asp = (Registry)outMessage + .getContextualProperty(AuthSchemeFactory.class.getName()); + if (asp != null) { + ctx.setAuthSchemeRegistry(asp); + } + + c.execute(new CXFHttpAsyncRequestProducer(entity, outbuf), + new CXFHttpAsyncResponseConsumer(this, inbuf, responseCallback), + null, /* the push handler factory, optional and may be null */ + ctx, + callback); + } + + private boolean isSslTargetDifferent(URI lastURL, URI url) { + return !lastURL.getScheme().equals(url.getScheme()) + || !lastURL.getHost().equals(url.getHost()) + || lastURL.getPort() != url.getPort(); + } + + public boolean retrySetHttpResponse(HttpResponse r) { + if (isAsync) { + setHttpResponse(r); + } + + return !isAsync; + } + + protected synchronized void setHttpResponse(HttpResponse r) { + httpResponse = r; + if (isAsync) { + //got a response, need to start the response processing now + try { + handleResponseOnWorkqueue(false, true); + isAsync = false; // don't trigger another start on next block. :-) + } catch (Exception ex) { + //ignore, we'll try again on the next consume; + } + } + notifyAll(); + } + + protected synchronized void setException(Exception ex) { + exception = ex; + if (isAsync) { + //got a response, need to start the response processing now + try { + handleResponseOnWorkqueue(false, true); + isAsync = false; // don't trigger another start on next block. :-) + } catch (Exception ex2) { + ex2.printStackTrace(); + } + } + notifyAll(); + } + + protected synchronized void handleCancelled() { + notifyAll(); + } + + protected synchronized HttpResponse getHttpResponse() throws IOException { + while (httpResponse == null) { + if (exception == null) { //already have an exception, skip waiting + try { + wait(); + } catch (InterruptedException e) { + throw new IOException(e); + } + } + if (httpResponse == null) { + outbuf.shutdown(); + inbuf.shutdown(); + + if (exception != null) { + if (exception instanceof IOException) { + throw (IOException)exception; + } else if (exception instanceof RuntimeException) { + throw (RuntimeException)exception; + } + + throw new IOException(exception); + } + + throw new SocketTimeoutException("Read Timeout"); + } + } + return httpResponse; + } + + protected void handleResponseAsync() throws IOException { + isAsync = true; + } + + protected void closeInputStream() throws IOException { + byte[] bytes = new byte[1024]; + while (inbuf.read(bytes) > 0) { + //nothing + } + inbuf.close(); + inbuf.shutdown(); + } + + protected synchronized InputStream getInputStream() throws IOException { + return new InputStream() { + public int read() throws IOException { + return inbuf.read(); + } + public int read(byte[] b) throws IOException { + return inbuf.read(b); + } + public int read(byte[] b, int off, int len) throws IOException { + return inbuf.read(b, off, len); + } + public void close() throws IOException { + inbuf.close(); + } + }; + } + + protected boolean usingProxy() { + return this.entity.getConfig().getProxy() != null; + } + + protected HttpsURLConnectionInfo getHttpsURLConnectionInfo() throws IOException { + if ("http".equals(outMessage.get("http.scheme"))) { + return null; + } + connect(true); + synchronized (sessionLock) { + if (session == null) { + try { + sessionLock.wait(csPolicy.getConnectionTimeout()); + } catch (InterruptedException e) { + throw new IOException(e); + } + } + if (session == null) { + throw new IOException("No SSLSession detected"); + } + } + HostnameVerifier verifier = org.apache.cxf.transport.https.SSLUtils + .getHostnameVerifier(tlsClientParameters); + if (!verifier.verify(url.getHost(), session)) { + throw new IOException("Could not verify host " + url.getHost()); + } + + String method = (String)outMessage.get(Message.HTTP_REQUEST_METHOD); + String cipherSuite = null; + Certificate[] localCerts = null; + Principal principal = null; + Certificate[] serverCerts = null; + Principal peer = null; + if (session != null) { + cipherSuite = session.getCipherSuite(); + localCerts = session.getLocalCertificates(); + principal = session.getLocalPrincipal(); + serverCerts = session.getPeerCertificates(); + peer = session.getPeerPrincipal(); + } + + return new HttpsURLConnectionInfo(url, method, cipherSuite, localCerts, principal, serverCerts, peer); + } + + protected int getResponseCode() throws IOException { + return getHttpResponse().getCode(); + } + + protected String getResponseMessage() throws IOException { + return getHttpResponse().getReasonPhrase(); + } + + private String readHeaders(Headers h) throws IOException { + Header[] headers = getHttpResponse().getHeaders(); + h.headerMap().clear(); + String ct = null; + for (Header header : headers) { + List s = h.headerMap().get(header.getName()); + if (s == null) { + s = new ArrayList<>(1); + h.headerMap().put(header.getName(), s); + } + s.add(header.getValue()); + if ("Content-Type".equalsIgnoreCase(header.getName())) { + ct = header.getValue(); + } + } + return ct; + } + + protected void updateResponseHeaders(Message inMessage) throws IOException { + Headers h = new Headers(inMessage); + inMessage.put(Message.CONTENT_TYPE, readHeaders(h)); + cookies.readFromHeaders(h); + } + + protected InputStream getPartialResponse() throws IOException { + InputStream in = null; + int responseCode = getResponseCode(); + if (responseCode == HttpURLConnection.HTTP_ACCEPTED + || responseCode == HttpURLConnection.HTTP_OK) { + + Header head = httpResponse.getFirstHeader(HttpHeaderHelper.CONTENT_LENGTH); + int cli = 0; + if (head != null) { + cli = Integer.parseInt(head.getValue()); + } + head = httpResponse.getFirstHeader(HttpHeaderHelper.TRANSFER_ENCODING); + boolean isChunked = head != null && HttpHeaderHelper.CHUNKED.equalsIgnoreCase(head.getValue()); + head = httpResponse.getFirstHeader(HttpHeaderHelper.CONNECTION); + boolean isEofTerminated = head != null && HttpHeaderHelper.CLOSE.equalsIgnoreCase(head.getValue()); + if (cli > 0) { + in = getInputStream(); + } else if (isChunked || isEofTerminated) { + // ensure chunked or EOF-terminated response is non-empty + try { + PushbackInputStream pin = + new PushbackInputStream(getInputStream()); + int c = pin.read(); + if (c != -1) { + pin.unread((byte)c); + in = pin; + } + } catch (IOException ioe) { + // ignore + } + } + } + return in; + } + + protected void updateCookiesBeforeRetransmit() throws IOException { + Headers h = new Headers(); + readHeaders(h); + cookies.readFromHeaders(h); + } + + protected boolean authorizationRetransmit() throws IOException { + boolean b = super.authorizationRetransmit(); + if (!b) { + //HTTPClient may be handling the authorization things instead of us, we + //just need to make sure we set the cookies and proceed and HC + //will do the negotiation and such. + try { + closeInputStream(); + } catch (Throwable t) { + //ignore + } + cookies.writeToMessageHeaders(outMessage); + retransmit(url.toString()); + return true; + } + return b; + } + + protected void retransmitStream() throws IOException { + cachingForRetransmission = false; //already cached + setupWrappedStream(); + cachedStream.writeCacheTo(wrappedStream); + wrappedStream.flush(); + wrappedStream.close(); + } + + protected void setupNewConnection(String newURL) throws IOException { + httpResponse = null; + isAsync = outMessage != null && outMessage.getExchange() != null + && !outMessage.getExchange().isSynchronous(); + exception = null; + connectionFuture = null; + session = null; + sslState = null; + sslURL = null; + + //reset the buffers + int bufSize = csPolicy.getChunkLength() > 0 ? csPolicy.getChunkLength() : 16320; + inbuf = new SharedInputBuffer(bufSize); + outbuf = new SharedOutputBuffer(bufSize); + try { + if (defaultAddress.getString().equals(newURL)) { + setupConnection(outMessage, defaultAddress, csPolicy); + } else { + Address address = new Address(newURL); + this.url = address.getURI(); + setupConnection(outMessage, address, csPolicy); + } + entity = outMessage.get(CXFHttpRequest.class); + basicEntity = (MutableHttpEntity)entity.getEntity(); + entity.setOutputStream(this); + } catch (URISyntaxException e) { + throw new IOException(e); + } + } + + + public void setSSLSession(SSLSession sslsession) { + session = sslsession; + synchronized (sessionLock) { + sslState = sslsession.getLocalPrincipal(); + sslURL = url; + sessionLock.notifyAll(); + } + } + + } + + public synchronized SSLContext getSSLContext(TLSClientParameters tlsClientParameters) + throws GeneralSecurityException { + + int hash = tlsClientParameters.hashCode(); + if (hash == lastTlsHash && sslContext != null) { + return sslContext; + } + + final SSLContext ctx; + if (tlsClientParameters.getSslContext() != null) { + ctx = tlsClientParameters.getSslContext(); + } else { + String provider = tlsClientParameters.getJsseProvider(); + + String protocol = tlsClientParameters.getSecureSocketProtocol() != null ? tlsClientParameters + .getSecureSocketProtocol() : "TLS"; + + ctx = provider == null ? SSLContext.getInstance(protocol) : SSLContext + .getInstance(protocol, provider); + + KeyManager[] keyManagers = tlsClientParameters.getKeyManagers(); + if (keyManagers == null) { + keyManagers = org.apache.cxf.configuration.jsse.SSLUtils.getDefaultKeyStoreManagers(LOG); + } + KeyManager[] configuredKeyManagers = + org.apache.cxf.transport.https.SSLUtils.configureKeyManagersWithCertAlias( + tlsClientParameters, keyManagers); + + TrustManager[] trustManagers = tlsClientParameters.getTrustManagers(); + if (trustManagers == null) { + trustManagers = org.apache.cxf.configuration.jsse.SSLUtils.getDefaultTrustStoreManagers(LOG); + } + + ctx.init(configuredKeyManagers, trustManagers, tlsClientParameters.getSecureRandom()); + + if (ctx.getClientSessionContext() != null) { + ctx.getClientSessionContext().setSessionTimeout(tlsClientParameters.getSslCacheTimeout()); + } + } + + sslContext = ctx; + lastTlsHash = hash; + sslState = null; + sslURL = null; + session = null; + return ctx; + } + + public void initializeSSLEngine(SSLContext sslcontext, SSLEngine sslengine) { + TLSClientParameters tlsClientParameters = getTlsClientParameters(); + if (tlsClientParameters == null) { + tlsClientParameters = new TLSClientParameters(); + } + + String[] cipherSuites = + SSLUtils.getCiphersuitesToInclude(tlsClientParameters.getCipherSuites(), + tlsClientParameters.getCipherSuitesFilter(), + sslcontext.getSocketFactory().getDefaultCipherSuites(), + SSLUtils.getSupportedCipherSuites(sslcontext), + LOG); + sslengine.setEnabledCipherSuites(cipherSuites); + + String protocol = tlsClientParameters.getSecureSocketProtocol() != null ? tlsClientParameters + .getSecureSocketProtocol() : sslcontext.getProtocol(); + + String[] p = findProtocols(protocol, sslengine.getSupportedProtocols()); + if (p != null) { + sslengine.setEnabledProtocols(p); + } + } + + @Override + public void close() { + super.close(); + if (factory != null) { + factory.close(this.getClient()); + } + } + + private String[] findProtocols(String p, String[] options) { + List list = new ArrayList<>(); + for (String s : options) { + if (s.equals(p)) { + return new String[] {p}; + } else if (s.startsWith(p)) { + list.add(s); + } + } + if (list.isEmpty()) { + return null; + } + return list.toArray(new String[0]); + } + +} diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java index 40d42c8e31c..11e1f69cc51 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPTransportFactory.java @@ -69,6 +69,10 @@ public class HTTPTransportFactory "http://schemas.xmlsoap.org/wsdl/http/" )); + private static boolean forceURLConnectionConduit + = Boolean.valueOf(SystemPropertyAction.getProperty("org.apache.cxf.transport.http.forceURLConnection")); + + private static final Logger LOG = LogUtils.getL7dLogger(HTTPTransportFactory.class); /** @@ -86,8 +90,6 @@ public class HTTPTransportFactory private final Lock r = lock.readLock(); private final Lock w = lock.writeLock(); - private boolean forceURLConnectionConduit - = Boolean.valueOf(SystemPropertyAction.getProperty("org.apache.cxf.transport.http.forceURLConnection")); public HTTPTransportFactory() { this(new DestinationRegistryImpl()); @@ -237,7 +239,7 @@ public Conduit getConduit( conduit = factory.createConduit(this, bus, endpointInfo, target); } if (conduit == null) { - if (forceURLConnectionConduit) { + if (HTTPTransportFactory.isForceURLConnectionConduit()) { conduit = new URLConnectionHTTPConduit(bus, endpointInfo, target); } else { conduit = new HttpClientHTTPConduit(bus, endpointInfo, target); @@ -301,5 +303,8 @@ public Destination getDestination(EndpointInfo endpointInfo, Bus bus) throws IOE r.unlock(); } } - + + public static boolean isForceURLConnectionConduit() { + return forceURLConnectionConduit; + } } diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java index ce295b66e3b..ab48a964722 100644 --- a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java +++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java @@ -118,7 +118,7 @@ private HTTPConduit setupClient(boolean async) throws Exception { client.setReceiveTimeout(600000); cond.setClient(client); if (async) { - if (cond instanceof AsyncHTTPConduit) { + if (cond.getClass().getName().endsWith("AsyncHTTPConduit")) { UsernamePasswordCredentials creds = new UsernamePasswordCredentials("ffang", "pswd".toCharArray()); bp.getRequestContext().put(Credentials.class.getName(), creds); bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE); diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java index 1f318e148b2..d1179bb23f8 100644 --- a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java +++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java @@ -30,15 +30,15 @@ import org.junit.Test; import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; abstract class AbstractUndertowClientServerHttp2Test extends AbstractBusClientServerTestBase { @Test public void testBookNotFoundWithHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/notFound", true); - assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class)); + assertTrue(WebClient.getConfig(client).getHttpConduit().getClass().getName().endsWith("AsyncHTTPConduit")); final Response response = client .accept("text/plain") @@ -53,7 +53,7 @@ public void testBookNotFoundWithHttp2() throws Exception { @Test public void testBookWithHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/booknames", true); - assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class)); + assertTrue(WebClient.getConfig(client).getHttpConduit().getClass().getName().endsWith("AsyncHTTPConduit")); final Response response = client .accept("text/plain") @@ -68,7 +68,7 @@ public void testBookWithHttp2() throws Exception { @Test public void testGetBookStreamHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/bookstream", true); - assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class)); + assertTrue(WebClient.getConfig(client).getHttpConduit().getClass().getName().endsWith("AsyncHTTPConduit")); final Response response = client .accept("application/json") diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java b/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java index aef52d81216..fa10c667315 100644 --- a/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java +++ b/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java @@ -116,7 +116,7 @@ private HTTPConduit setupClient(boolean async) throws Exception { HTTPClientPolicy client = new HTTPClientPolicy(); cond.setClient(client); if (async) { - if (cond instanceof AsyncHTTPConduit) { + if (cond.getClass().getName().endsWith("AsyncHTTPConduit")) { UsernamePasswordCredentials creds = new UsernamePasswordCredentials("ffang", "pswd"); bp.getRequestContext().put(Credentials.class.getName(), creds); bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE); From a86f4f2001337d3ebb23db6d029bb6169e87163e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:53:06 -0400 Subject: [PATCH 154/430] Bump actions/cache from 4.0.2 to 4.1.0 (#2094) Bumps [actions/cache](https://github.com/actions/cache) from 4.0.2 to 4.1.0. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/0c45773b623bea8c8e75f6c82b208c3cf94ea4f9...2cdf405574d6ef1f33a1d12acccd3ae82f47b3f2) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index b061f028747..622fe694e21 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -36,7 +36,7 @@ jobs: distribution: 'temurin' java-version: '17' - name: Cache local Maven repository - uses: actions/cache@0c45773b623bea8c8e75f6c82b208c3cf94ea4f9 # v4.0.2 + uses: actions/cache@2cdf405574d6ef1f33a1d12acccd3ae82f47b3f2 # v4.1.0 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} From bea3fd5397c92199692e7dfd0738214c3ec8a4ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:53:43 -0400 Subject: [PATCH 155/430] Bump github/codeql-action from 3.26.9 to 3.26.11 (#2095) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.9 to 3.26.11. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/461ef6c76dfe95d5c364de2f431ddbd31a417628...6db8d6351fd0be61f9ed8ebd12ccd35dcec51fea) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 622fe694e21..71c6d15206b 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@461ef6c76dfe95d5c364de2f431ddbd31a417628 # v3.26.9 + uses: github/codeql-action/init@6db8d6351fd0be61f9ed8ebd12ccd35dcec51fea # v3.26.11 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@461ef6c76dfe95d5c364de2f431ddbd31a417628 # v3.26.9 + uses: github/codeql-action/analyze@6db8d6351fd0be61f9ed8ebd12ccd35dcec51fea # v3.26.11 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index df588f2273b..d53117c6199 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@461ef6c76dfe95d5c364de2f431ddbd31a417628 #tag=v2 + uses: github/codeql-action/upload-sarif@6db8d6351fd0be61f9ed8ebd12ccd35dcec51fea #tag=v2 with: sarif_file: results.sarif From 818daec10c4de2dd65b21d40a8970ab499a23630 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 8 Oct 2024 10:54:28 -0400 Subject: [PATCH 156/430] Bump org.apache.maven.plugins:maven-surefire-report-plugin (#2096) Bumps [org.apache.maven.plugins:maven-surefire-report-plugin](https://github.com/apache/maven-surefire) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.0...surefire-3.5.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-report-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 3b337af9f8c..e0f960f18d3 100644 --- a/pom.xml +++ b/pom.xml @@ -559,7 +559,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 3.5.0 + 3.5.1 org.apache.maven.plugins From f4c01962b630583127feed0731c8018ebb6d464a Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 8 Oct 2024 12:47:51 -0400 Subject: [PATCH 157/430] CXF-9062: Be able to create AsyncHTTPConduit based on URLConnectionHTTPConduit (add test suites to test forceURLConnection property activation) --- systests/transport-hc5/pom.xml | 25 +++++++++ .../cxf/systest/hc5/IsAsyncHttpConduit.java | 52 +++++++++++++++++++ .../systest/hc5/http/auth/DigestAuthTest.java | 15 +++--- .../AbstractApacheClientServerHttp2Test.java | 14 ++--- systests/transport-undertow/pom.xml | 25 +++++++++ .../http_undertow/IsAsyncHttpConduit.java | 52 +++++++++++++++++++ .../http_undertow/UndertowDigestAuthTest.java | 15 +++--- ...AbstractUndertowClientServerHttp2Test.java | 10 ++-- systests/transports/pom.xml | 25 +++++++++ .../cxf/systest/IsAsyncHttpConduit.java | 52 +++++++++++++++++++ .../http_jetty/JettyDigestAuthTest.java | 15 +++--- 11 files changed, 264 insertions(+), 36 deletions(-) create mode 100644 systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/IsAsyncHttpConduit.java create mode 100644 systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/IsAsyncHttpConduit.java create mode 100644 systests/transports/src/test/java/org/apache/cxf/systest/IsAsyncHttpConduit.java diff --git a/systests/transport-hc5/pom.xml b/systests/transport-hc5/pom.xml index 19440a2f334..e9d12f475eb 100644 --- a/systests/transport-hc5/pom.xml +++ b/systests/transport-hc5/pom.xml @@ -70,6 +70,31 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + forceURLConnection-test + + test + + + + true + + + + + default-test + + + false + + + + + diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/IsAsyncHttpConduit.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/IsAsyncHttpConduit.java new file mode 100644 index 00000000000..2bf01803a64 --- /dev/null +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/IsAsyncHttpConduit.java @@ -0,0 +1,52 @@ +/** + * 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.cxf.systest.hc5; + +import org.apache.cxf.transport.http.HTTPTransportFactory; +import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit; +import org.apache.cxf.transport.http.asyncclient.hc5.URLConnectionAsyncHTTPConduit; +import org.hamcrest.Description; +import org.hamcrest.TypeSafeMatcher; + +public class IsAsyncHttpConduit extends TypeSafeMatcher { + public void describeTo(Description description) { + if (HTTPTransportFactory.isForceURLConnectionConduit()) { + description.appendText("instance of URLConnectionAsyncHTTPConduit async conduit "); + } else { + description.appendText("instance of AsyncHTTPConduit async conduit "); + } + } + + @Override + protected boolean matchesSafely(Object item) { + return isAsyncConduit(item); + } + + public static IsAsyncHttpConduit isInstanceOfAsyncHttpConduit() { + return new IsAsyncHttpConduit(); + } + + private static boolean isAsyncConduit(Object instance) { + if (HTTPTransportFactory.isForceURLConnectionConduit()) { + return instance instanceof URLConnectionAsyncHTTPConduit; + } else { + return instance instanceof AsyncHTTPConduit; + } + } +} diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http/auth/DigestAuthTest.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http/auth/DigestAuthTest.java index 4d2565cc395..b412dc1dda2 100644 --- a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http/auth/DigestAuthTest.java +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http/auth/DigestAuthTest.java @@ -49,6 +49,8 @@ import org.junit.BeforeClass; import org.junit.Test; +import static org.apache.cxf.systest.hc5.IsAsyncHttpConduit.isInstanceOfAsyncHttpConduit; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; @@ -127,14 +129,11 @@ private Greeter setupClient(boolean async) throws Exception { client.setReceiveTimeout(600000); cond.setClient(client); if (async) { - if (cond instanceof AsyncHTTPConduit) { - UsernamePasswordCredentials creds = new UsernamePasswordCredentials("foo", "bar".toCharArray()); - bp.getRequestContext().put(Credentials.class.getName(), creds); - bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE); - client.setAutoRedirect(true); - } else { - fail("Not an async conduit"); - } + assertThat("Not an async conduit", cond, isInstanceOfAsyncHttpConduit()); + UsernamePasswordCredentials creds = new UsernamePasswordCredentials("foo", "bar".toCharArray()); + bp.getRequestContext().put(Credentials.class.getName(), creds); + bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE); + client.setAutoRedirect(true); } else { bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "foo"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "bar"); diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http2/AbstractApacheClientServerHttp2Test.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http2/AbstractApacheClientServerHttp2Test.java index da4628ad68b..b93efc56b0b 100644 --- a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http2/AbstractApacheClientServerHttp2Test.java +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/http2/AbstractApacheClientServerHttp2Test.java @@ -29,8 +29,8 @@ import org.junit.Test; +import static org.apache.cxf.systest.hc5.IsAsyncHttpConduit.isInstanceOfAsyncHttpConduit; import static org.hamcrest.CoreMatchers.equalTo; -import static org.hamcrest.CoreMatchers.instanceOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; @@ -38,8 +38,8 @@ abstract class AbstractApacheClientServerHttp2Test extends AbstractBusClientServ @Test public void testBookNotFoundWithHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/notFound", true); - assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class)); - + assertThat(WebClient.getConfig(client).getHttpConduit(), isInstanceOfAsyncHttpConduit()); + final Response response = client .accept("text/plain") .path(getContext() + "/web/bookstore/notFound") @@ -51,7 +51,7 @@ public void testBookNotFoundWithHttp2() throws Exception { @Test public void testBookTraceWithHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/trace", true); - assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class)); + assertThat(WebClient.getConfig(client).getHttpConduit(), isInstanceOfAsyncHttpConduit()); final Response response = client .accept("text/plain") @@ -66,7 +66,7 @@ public void testBookTraceWithHttp2() throws Exception { @Test public void testBookWithHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/booknames", true); - assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class)); + assertThat(WebClient.getConfig(client).getHttpConduit(), isInstanceOfAsyncHttpConduit()); final Response response = client .accept("text/plain") @@ -81,7 +81,7 @@ public void testBookWithHttp2() throws Exception { @Test public void testBookEncodedWithHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/book%20names", true); - assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class)); + assertThat(WebClient.getConfig(client).getHttpConduit(), isInstanceOfAsyncHttpConduit()); final Response response = client .accept("text/plain") @@ -96,7 +96,7 @@ public void testBookEncodedWithHttp2() throws Exception { @Test public void testGetBookStreamHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/bookstream", true); - assertThat(WebClient.getConfig(client).getHttpConduit(), instanceOf(AsyncHTTPConduit.class)); + assertThat(WebClient.getConfig(client).getHttpConduit(), isInstanceOfAsyncHttpConduit()); final Response response = client .accept("application/xml") diff --git a/systests/transport-undertow/pom.xml b/systests/transport-undertow/pom.xml index e300a0cce7a..a6c6c088be8 100644 --- a/systests/transport-undertow/pom.xml +++ b/systests/transport-undertow/pom.xml @@ -89,6 +89,31 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + forceURLConnection-test + + test + + + + true + + + + + default-test + + + false + + + + + diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/IsAsyncHttpConduit.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/IsAsyncHttpConduit.java new file mode 100644 index 00000000000..aebdeb35bf8 --- /dev/null +++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/IsAsyncHttpConduit.java @@ -0,0 +1,52 @@ +/** + * 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.cxf.systest.http_undertow; + +import org.apache.cxf.transport.http.HTTPTransportFactory; +import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit; +import org.apache.cxf.transport.http.asyncclient.hc5.URLConnectionAsyncHTTPConduit; +import org.hamcrest.Description; +import org.hamcrest.TypeSafeMatcher; + +public class IsAsyncHttpConduit extends TypeSafeMatcher { + public void describeTo(Description description) { + if (HTTPTransportFactory.isForceURLConnectionConduit()) { + description.appendText("instance of URLConnectionAsyncHTTPConduit async conduit "); + } else { + description.appendText("instance of AsyncHTTPConduit async conduit "); + } + } + + @Override + protected boolean matchesSafely(Object item) { + return isAsyncConduit(item); + } + + public static IsAsyncHttpConduit isInstanceOfAsyncHttpConduit() { + return new IsAsyncHttpConduit(); + } + + private static boolean isAsyncConduit(Object instance) { + if (HTTPTransportFactory.isForceURLConnectionConduit()) { + return instance instanceof URLConnectionAsyncHTTPConduit; + } else { + return instance instanceof AsyncHTTPConduit; + } + } +} diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java index ab48a964722..448bf49bace 100644 --- a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java +++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java @@ -55,6 +55,8 @@ import org.junit.BeforeClass; import org.junit.Test; +import static org.apache.cxf.systest.http_undertow.IsAsyncHttpConduit.isInstanceOfAsyncHttpConduit; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -118,14 +120,11 @@ private HTTPConduit setupClient(boolean async) throws Exception { client.setReceiveTimeout(600000); cond.setClient(client); if (async) { - if (cond.getClass().getName().endsWith("AsyncHTTPConduit")) { - UsernamePasswordCredentials creds = new UsernamePasswordCredentials("ffang", "pswd".toCharArray()); - bp.getRequestContext().put(Credentials.class.getName(), creds); - bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE); - client.setAutoRedirect(true); - } else { - fail("Not an async conduit"); - } + assertThat("Not an async conduit", cond, isInstanceOfAsyncHttpConduit()); + UsernamePasswordCredentials creds = new UsernamePasswordCredentials("ffang", "pswd".toCharArray()); + bp.getRequestContext().put(Credentials.class.getName(), creds); + bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE); + client.setAutoRedirect(true); } else { bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "ffang"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pswd"); diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java index d1179bb23f8..faac3e1d231 100644 --- a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java +++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/http2/AbstractUndertowClientServerHttp2Test.java @@ -29,16 +29,16 @@ import org.junit.Test; +import static org.apache.cxf.systest.http_undertow.IsAsyncHttpConduit.isInstanceOfAsyncHttpConduit; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertTrue; abstract class AbstractUndertowClientServerHttp2Test extends AbstractBusClientServerTestBase { @Test public void testBookNotFoundWithHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/notFound", true); - assertTrue(WebClient.getConfig(client).getHttpConduit().getClass().getName().endsWith("AsyncHTTPConduit")); + assertThat(WebClient.getConfig(client).getHttpConduit(), isInstanceOfAsyncHttpConduit()); final Response response = client .accept("text/plain") @@ -53,7 +53,7 @@ public void testBookNotFoundWithHttp2() throws Exception { @Test public void testBookWithHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/booknames", true); - assertTrue(WebClient.getConfig(client).getHttpConduit().getClass().getName().endsWith("AsyncHTTPConduit")); + assertThat(WebClient.getConfig(client).getHttpConduit(), isInstanceOfAsyncHttpConduit()); final Response response = client .accept("text/plain") @@ -68,8 +68,8 @@ public void testBookWithHttp2() throws Exception { @Test public void testGetBookStreamHttp2() throws Exception { final WebClient client = createWebClient("/web/bookstore/bookstream", true); - assertTrue(WebClient.getConfig(client).getHttpConduit().getClass().getName().endsWith("AsyncHTTPConduit")); - + assertThat(WebClient.getConfig(client).getHttpConduit(), isInstanceOfAsyncHttpConduit()); + final Response response = client .accept("application/json") .get(); diff --git a/systests/transports/pom.xml b/systests/transports/pom.xml index 30444864db7..7a911f3d17f 100644 --- a/systests/transports/pom.xml +++ b/systests/transports/pom.xml @@ -88,6 +88,31 @@ + + org.apache.maven.plugins + maven-surefire-plugin + + + forceURLConnection-test + + test + + + + true + + + + + default-test + + + false + + + + + diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/IsAsyncHttpConduit.java b/systests/transports/src/test/java/org/apache/cxf/systest/IsAsyncHttpConduit.java new file mode 100644 index 00000000000..e2b773704ed --- /dev/null +++ b/systests/transports/src/test/java/org/apache/cxf/systest/IsAsyncHttpConduit.java @@ -0,0 +1,52 @@ +/** + * 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.cxf.systest; + +import org.apache.cxf.transport.http.HTTPTransportFactory; +import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit; +import org.apache.cxf.transport.http.asyncclient.URLConnectionAsyncHTTPConduit; +import org.hamcrest.Description; +import org.hamcrest.TypeSafeMatcher; + +public class IsAsyncHttpConduit extends TypeSafeMatcher { + public void describeTo(Description description) { + if (HTTPTransportFactory.isForceURLConnectionConduit()) { + description.appendText("instance of URLConnectionAsyncHTTPConduit async conduit "); + } else { + description.appendText("instance of AsyncHTTPConduit async conduit "); + } + } + + @Override + protected boolean matchesSafely(Object item) { + return isAsyncConduit(item); + } + + public static IsAsyncHttpConduit isInstanceOfAsyncHttpConduit() { + return new IsAsyncHttpConduit(); + } + + private static boolean isAsyncConduit(Object instance) { + if (HTTPTransportFactory.isForceURLConnectionConduit()) { + return instance instanceof URLConnectionAsyncHTTPConduit; + } else { + return instance instanceof AsyncHTTPConduit; + } + } +} diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java b/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java index fa10c667315..c19dbe7663f 100644 --- a/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java +++ b/systests/transports/src/test/java/org/apache/cxf/systest/http_jetty/JettyDigestAuthTest.java @@ -55,6 +55,8 @@ import org.junit.BeforeClass; import org.junit.Test; +import static org.apache.cxf.systest.IsAsyncHttpConduit.isInstanceOfAsyncHttpConduit; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -116,14 +118,11 @@ private HTTPConduit setupClient(boolean async) throws Exception { HTTPClientPolicy client = new HTTPClientPolicy(); cond.setClient(client); if (async) { - if (cond.getClass().getName().endsWith("AsyncHTTPConduit")) { - UsernamePasswordCredentials creds = new UsernamePasswordCredentials("ffang", "pswd"); - bp.getRequestContext().put(Credentials.class.getName(), creds); - bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE); - client.setAutoRedirect(true); - } else { - fail("Not an async conduit"); - } + assertThat("Not an async conduit", cond, isInstanceOfAsyncHttpConduit()); + UsernamePasswordCredentials creds = new UsernamePasswordCredentials("ffang", "pswd"); + bp.getRequestContext().put(Credentials.class.getName(), creds); + bp.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, Boolean.TRUE); + client.setAutoRedirect(true); } else { bp.getRequestContext().put(BindingProvider.USERNAME_PROPERTY, "ffang"); bp.getRequestContext().put(BindingProvider.PASSWORD_PROPERTY, "pswd"); From 261528901c836356beff20d53db97a7d9d629ea8 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 8 Oct 2024 12:50:17 -0400 Subject: [PATCH 158/430] Update Logback to 1.5.9 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index f02d68ca721..551b8cbb79a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -174,7 +174,7 @@ 2.0.3 7.0.1 1.1.2 - 1.5.8 + 1.5.9 9.12.0 3.9.8 1.13.5 From 8764966250c3ef1910c00fe3adbca483684f0455 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 9 Oct 2024 14:11:40 -0400 Subject: [PATCH 159/430] CXF-8629: AsyncHTTPConduit (hc5) should support chunked request / response. Fix java.lang.IllegalStateException caused by Encoding process already completed --- .../transport/http/asyncclient/hc5/SharedOutputBuffer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/SharedOutputBuffer.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/SharedOutputBuffer.java index b0b9ed2338c..a006ebacb6c 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/SharedOutputBuffer.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/SharedOutputBuffer.java @@ -113,9 +113,9 @@ public int produceContent(final DataStreamChannel stream) throws IOException { setOutputMode(); int bytesWritten = 0; if (largeWrapper != null || super.hasData()) { - if (!buffer().hasRemaining() && largeWrapper != null) { + if (!buffer().hasRemaining() && largeWrapper != null && largeWrapper.hasRemaining()) { bytesWritten = channel.write(largeWrapper); - } else { + } else if (buffer().hasRemaining()) { bytesWritten = channel.write(buffer()); } } From b4291c83bc6ba807e56078101b1164fc985370f0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 9 Oct 2024 21:10:21 -0400 Subject: [PATCH 160/430] Bump com.googlecode.maven-download-plugin:download-maven-plugin (#2097) Bumps [com.googlecode.maven-download-plugin:download-maven-plugin](https://github.com/maven-download-plugin/maven-download-plugin) from 1.9.0 to 1.10.0. - [Release notes](https://github.com/maven-download-plugin/maven-download-plugin/releases) - [Commits](https://github.com/maven-download-plugin/maven-download-plugin/compare/1.9.0...1.10.0) --- updated-dependencies: - dependency-name: com.googlecode.maven-download-plugin:download-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- rt/transports/http/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rt/transports/http/pom.xml b/rt/transports/http/pom.xml index f9631ead88d..8d44c625737 100644 --- a/rt/transports/http/pom.xml +++ b/rt/transports/http/pom.xml @@ -160,7 +160,7 @@ com.googlecode.maven-download-plugin download-maven-plugin - 1.9.0 + 1.10.0 download-public-suffix-list From 97d3e0643545be2c363f4ca3b7f4723d7fdcd102 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 10 Oct 2024 09:20:33 -0400 Subject: [PATCH 161/430] Bump cxf.openfeign.version from 13.4 to 13.5 (#2098) Bumps `cxf.openfeign.version` from 13.4 to 13.5. Updates `io.github.openfeign:feign-core` from 13.4 to 13.5 - [Release notes](https://github.com/openfeign/feign/releases) - [Changelog](https://github.com/OpenFeign/feign/blob/master/CHANGELOG.md) - [Commits](https://github.com/openfeign/feign/compare/13.4...13.5) Updates `io.github.openfeign:feign-httpclient` from 13.4 to 13.5 - [Release notes](https://github.com/openfeign/feign/releases) - [Changelog](https://github.com/OpenFeign/feign/blob/master/CHANGELOG.md) - [Commits](https://github.com/openfeign/feign/compare/13.4...13.5) Updates `io.github.openfeign:feign-micrometer` from 13.4 to 13.5 - [Release notes](https://github.com/openfeign/feign/releases) - [Changelog](https://github.com/OpenFeign/feign/blob/master/CHANGELOG.md) - [Commits](https://github.com/openfeign/feign/compare/13.4...13.5) --- updated-dependencies: - dependency-name: io.github.openfeign:feign-core dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.github.openfeign:feign-httpclient dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.github.openfeign:feign-micrometer dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index ec768cb101f..9079e020c5b 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -52,7 +52,7 @@ 5.13.1.Final 2.6.7 4.8.0 - 13.4 + 13.5 From caadcaffbfaacf8f2dbc58b6dd3cbb906e11988b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 11 Oct 2024 08:22:50 -0400 Subject: [PATCH 162/430] Bump org.atmosphere:atmosphere-runtime from 3.0.10 to 3.0.11 (#2099) Bumps [org.atmosphere:atmosphere-runtime](https://github.com/Atmosphere/atmosphere) from 3.0.10 to 3.0.11. - [Commits](https://github.com/Atmosphere/atmosphere/compare/atmosphere-project-3.0.10...atmosphere-project-3.0.11) --- updated-dependencies: - dependency-name: org.atmosphere:atmosphere-runtime dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 551b8cbb79a..9193ded727b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -94,7 +94,7 @@ 1.9.22.1 3.26.3 [3.0, 4.0) - 3.0.10 + 3.0.11 1.77 6.0.3 4.0.1 From 663d05cf68ea504da9f3262c86a5e48d97d69b1c Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 11 Oct 2024 15:53:14 -0400 Subject: [PATCH 163/430] Update OpenTelemetry to 1.43.0 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 9193ded727b..2f6dc289b81 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -191,7 +191,7 @@ 2.0.46.Final 2.0.12 3.2.2 - 1.42.1 + 1.43.0 1.27.0-alpha 0.33.0 2.0.27 From f09ba9f0675bd5d53ce27a699b2e03b256c5d3ea Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:24:06 -0400 Subject: [PATCH 164/430] Bump actions/upload-artifact from 4.4.0 to 4.4.3 (#2100) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.4.0 to 4.4.3. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/50769540e7f4bd5e21e526ee35c689e35e0d6874...b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecards.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index d53117c6199..5aac8c1d11a 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -49,7 +49,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@50769540e7f4bd5e21e526ee35c689e35e0d6874 # tag=v4.4.0 + uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # tag=v4.4.3 with: name: SARIF file path: results.sarif From 99998a4cd990b73f830c9e9036f2120f5af1dcc3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:24:22 -0400 Subject: [PATCH 165/430] Bump github/codeql-action from 3.26.11 to 3.26.12 (#2103) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.11 to 3.26.12. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/6db8d6351fd0be61f9ed8ebd12ccd35dcec51fea...c36620d31ac7c881962c3d9dd939c40ec9434f2b) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 71c6d15206b..2069e2674d5 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@6db8d6351fd0be61f9ed8ebd12ccd35dcec51fea # v3.26.11 + uses: github/codeql-action/init@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@6db8d6351fd0be61f9ed8ebd12ccd35dcec51fea # v3.26.11 + uses: github/codeql-action/analyze@c36620d31ac7c881962c3d9dd939c40ec9434f2b # v3.26.12 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 5aac8c1d11a..b52d36dd191 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@6db8d6351fd0be61f9ed8ebd12ccd35dcec51fea #tag=v2 + uses: github/codeql-action/upload-sarif@c36620d31ac7c881962c3d9dd939c40ec9434f2b #tag=v2 with: sarif_file: results.sarif From 90048034ed3e9fe7d94085b3cd64127016b65813 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:24:35 -0400 Subject: [PATCH 166/430] Bump org.cyclonedx:cyclonedx-maven-plugin from 2.8.2 to 2.9.0 (#2104) Bumps [org.cyclonedx:cyclonedx-maven-plugin](https://github.com/CycloneDX/cyclonedx-maven-plugin) from 2.8.2 to 2.9.0. - [Release notes](https://github.com/CycloneDX/cyclonedx-maven-plugin/releases) - [Commits](https://github.com/CycloneDX/cyclonedx-maven-plugin/compare/cyclonedx-maven-plugin-2.8.2...cyclonedx-maven-plugin-2.9.0) --- updated-dependencies: - dependency-name: org.cyclonedx:cyclonedx-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index e0f960f18d3..b5cdcef7648 100644 --- a/pom.xml +++ b/pom.xml @@ -706,7 +706,7 @@ org.cyclonedx cyclonedx-maven-plugin - 2.8.2 + 2.9.0 make-bom From 98df96cfb82963ec48a47d0062fd65cf9569092f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:24:48 -0400 Subject: [PATCH 167/430] Bump actions/cache from 4.1.0 to 4.1.1 (#2102) Bumps [actions/cache](https://github.com/actions/cache) from 4.1.0 to 4.1.1. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/2cdf405574d6ef1f33a1d12acccd3ae82f47b3f2...3624ceb22c1c5a301c8db4169662070a689d9ea8) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 2069e2674d5..55a15567087 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -36,7 +36,7 @@ jobs: distribution: 'temurin' java-version: '17' - name: Cache local Maven repository - uses: actions/cache@2cdf405574d6ef1f33a1d12acccd3ae82f47b3f2 # v4.1.0 + uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} From 7e7bccecbdbdd1669578dfeb157b635f1588fa2d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 14 Oct 2024 11:25:05 -0400 Subject: [PATCH 168/430] Bump actions/checkout from 4.2.0 to 4.2.1 (#2101) Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.0 to 4.2.1. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/d632683dd7b4114ad314bca15554477dd762a938...eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pull-request-build.yml | 2 +- .github/workflows/scorecards.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 55a15567087..4eb56c5488a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v4.2.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Setup JDK 17 uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 diff --git a/.github/workflows/pull-request-build.yml b/.github/workflows/pull-request-build.yml index 9bbc9af916d..7d94ea33ee3 100644 --- a/.github/workflows/pull-request-build.yml +++ b/.github/workflows/pull-request-build.yml @@ -18,7 +18,7 @@ jobs: pull-requests: read timeout-minutes: 130 steps: - - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # v3.6.0 + - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v3.6.0 - name: Set up JDK 17 uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 with: diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index b52d36dd191..f21d53445b5 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -25,7 +25,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@d632683dd7b4114ad314bca15554477dd762a938 # tag=v3.0.0 + uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # tag=v3.0.0 with: persist-credentials: false From 77afe82ccd5c0eea583ebebcc9e10bd7e784581d Mon Sep 17 00:00:00 2001 From: Daniel Holm Date: Mon, 14 Oct 2024 20:35:52 +0200 Subject: [PATCH 169/430] [CXF-9067] Fix MaskSensitiveHelper incorrectly matching wrapper element (#2106) - Update the regex pattern in `MATCH_PATTERN_XML_TEMPLATE` to strictly match the element name, avoiding incorrect matches with similar names. - Add new test cases in `MaskSensitiveHelperTest` to verify the correct masking of sensitive data within wrapper elements. --- .../org/apache/cxf/ext/logging/MaskSensitiveHelper.java | 2 +- .../org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java index 94f2aa7c4a2..8387fcfbc22 100644 --- a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java +++ b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java @@ -32,7 +32,7 @@ public class MaskSensitiveHelper { + "\\u00F8-\\u02FF\\u0300-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u203F-\\u2040\\u2070-\\u218F" + "\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]+"; private static final String MATCH_PATTERN_XML_TEMPLATE = "(<(" + PATTERN_XML_NAMESPACE_PREFIX - + ":)?-ELEMENT_NAME-.*?>)(.*?)()"; + + ":)?-ELEMENT_NAME-\\b[^>]*>)(.*?)()"; private static final String REPLACEMENT_XML_TEMPLATE = "$1XXX$4"; private static final String MATCH_PATTERN_JSON_TEMPLATE = "\"-ELEMENT_NAME-\"[ \\t]*:[ \\t]*\"(.*?)\""; private static final String REPLACEMENT_JSON_TEMPLATE = "\"-ELEMENT_NAME-\": \"XXX\""; diff --git a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java index a61e5032b88..1b1a20fb359 100644 --- a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java +++ b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java @@ -56,6 +56,11 @@ public class MaskSensitiveHelperTest { private static final String MASKED_LOGGING_CONTENT_XML_WITH_ATTRIBUTE = "testUserXXX"; + private static final String SENSITIVE_LOGGING_CONTENT_XML_WITH_WRAPPER = + "my secret password"; + private static final String MASKED_LOGGING_CONTENT_XML_WITH_WITH_WRAPPER = + "XXX"; + private static final String SENSITIVE_LOGGING_CONTENT_JSON = "\"user\":\"testUser\", \"password\": \"my secret password\""; private static final String MASKED_LOGGING_CONTENT_JSON = @@ -93,6 +98,7 @@ public static Collection primeNumbers() { return Arrays.asList(new Object[][] { {SENSITIVE_LOGGING_CONTENT_XML, MASKED_LOGGING_CONTENT_XML, APPLICATION_XML}, {SENSITIVE_LOGGING_CONTENT_XML_WITH_ATTRIBUTE, MASKED_LOGGING_CONTENT_XML_WITH_ATTRIBUTE, APPLICATION_XML}, + {SENSITIVE_LOGGING_CONTENT_XML_WITH_WRAPPER, MASKED_LOGGING_CONTENT_XML_WITH_WITH_WRAPPER, APPLICATION_XML}, {SENSITIVE_LOGGING_MULTIPLE_ELEMENT_XML, MASKED_LOGGING_MULTIPLE_ELEMENT_XML, APPLICATION_XML}, {SENSITIVE_LOGGING_CONTENT_XML_WITH_NAMESPACE, MASKED_LOGGING_CONTENT_XML_WITH_NAMESPACE, APPLICATION_XML}, {SENSITIVE_LOGGING_CONTENT_JSON, MASKED_LOGGING_CONTENT_JSON, APPLICATION_JSON} From 38f4171e832c87e30b95756bb923d8a0a0257e1f Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 14 Oct 2024 13:51:39 -0400 Subject: [PATCH 170/430] Update Logback to 1.5.10 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 2f6dc289b81..1a515671eec 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -174,7 +174,7 @@ 2.0.3 7.0.1 1.1.2 - 1.5.9 + 1.5.10 9.12.0 3.9.8 1.13.5 From f496518dfa0e846faf0ce245de2b2abeec5819f1 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 14 Oct 2024 13:52:08 -0400 Subject: [PATCH 171/430] Update Apache Tomcat to 10.1.31 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1a515671eec..544e22c81b5 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -221,7 +221,7 @@ 5.17.14 2.2.25 2.9.1 - 10.1.30 + 10.1.31 1.8 2.3.17.Final 3.0.4 From eb5a7bda8c1c8fc10e9fa1ac12a61b5c841bbc6c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 15 Oct 2024 11:19:58 -0400 Subject: [PATCH 172/430] Bump cxf.micrometer.version from 1.13.5 to 1.13.6 (#2108) Bumps `cxf.micrometer.version` from 1.13.5 to 1.13.6. Updates `io.micrometer:micrometer-core` from 1.13.5 to 1.13.6 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.13.5...v1.13.6) Updates `io.micrometer:micrometer-observation` from 1.13.5 to 1.13.6 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.13.5...v1.13.6) Updates `io.micrometer:micrometer-test` from 1.13.5 to 1.13.6 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.13.5...v1.13.6) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-observation dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-test dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 544e22c81b5..449e4a1920b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -177,7 +177,7 @@ 1.5.10 9.12.0 3.9.8 - 1.13.5 + 1.13.6 1.3.4 3.1 3.0.1 From c899d7443b20e329ae5aabb37fd532332750936a Mon Sep 17 00:00:00 2001 From: Daniel Holm Date: Tue, 15 Oct 2024 18:59:58 +0200 Subject: [PATCH 173/430] [CXF-9066] Fix MaskSensitiveHelper masking of multi-line content (#2105) --- .../org/apache/cxf/ext/logging/MaskSensitiveHelper.java | 2 +- .../org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java index 8387fcfbc22..6d96e1bce3f 100644 --- a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java +++ b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/MaskSensitiveHelper.java @@ -47,7 +47,7 @@ private static class ReplacementPair { private final String replacement; ReplacementPair(String matchPattern, String replacement) { - this.matchPattern = Pattern.compile(matchPattern); + this.matchPattern = Pattern.compile(matchPattern, Pattern.DOTALL); this.replacement = replacement; } } diff --git a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java index 1b1a20fb359..44a98568efd 100644 --- a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java +++ b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/MaskSensitiveHelperTest.java @@ -56,6 +56,11 @@ public class MaskSensitiveHelperTest { private static final String MASKED_LOGGING_CONTENT_XML_WITH_ATTRIBUTE = "testUserXXX"; + private static final String SENSITIVE_LOGGING_CONTENT_XML_WITH_MULTILINE = + "testUsermy \nsecret \npassword"; + private static final String MASKED_LOGGING_CONTENT_XML_WITH_MULTILINE = + "testUserXXX"; + private static final String SENSITIVE_LOGGING_CONTENT_XML_WITH_WRAPPER = "my secret password"; private static final String MASKED_LOGGING_CONTENT_XML_WITH_WITH_WRAPPER = @@ -98,6 +103,7 @@ public static Collection primeNumbers() { return Arrays.asList(new Object[][] { {SENSITIVE_LOGGING_CONTENT_XML, MASKED_LOGGING_CONTENT_XML, APPLICATION_XML}, {SENSITIVE_LOGGING_CONTENT_XML_WITH_ATTRIBUTE, MASKED_LOGGING_CONTENT_XML_WITH_ATTRIBUTE, APPLICATION_XML}, + {SENSITIVE_LOGGING_CONTENT_XML_WITH_MULTILINE, MASKED_LOGGING_CONTENT_XML_WITH_MULTILINE, APPLICATION_XML}, {SENSITIVE_LOGGING_CONTENT_XML_WITH_WRAPPER, MASKED_LOGGING_CONTENT_XML_WITH_WITH_WRAPPER, APPLICATION_XML}, {SENSITIVE_LOGGING_MULTIPLE_ELEMENT_XML, MASKED_LOGGING_MULTIPLE_ELEMENT_XML, APPLICATION_XML}, {SENSITIVE_LOGGING_CONTENT_XML_WITH_NAMESPACE, MASKED_LOGGING_CONTENT_XML_WITH_NAMESPACE, APPLICATION_XML}, From 03e27a45e2ecc9c35758438848b0719b33ab4767 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 15 Oct 2024 13:10:48 -0400 Subject: [PATCH 174/430] Update Mockito to 5.14.2 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 449e4a1920b..1f28e46d0b8 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -183,7 +183,7 @@ 3.0.1 3.1.2 2.2.1 - 5.14.1 + 5.14.2 2022.7 3.2.0 [4,5) From 593c6d9cbd5ae883750c16d784b832b1d019aa15 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 15 Oct 2024 13:11:23 -0400 Subject: [PATCH 175/430] Update Micrometer Tracing to 1.3.5 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1f28e46d0b8..0935a5274c3 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -178,7 +178,7 @@ 9.12.0 3.9.8 1.13.6 - 1.3.4 + 1.3.5 3.1 3.0.1 3.1.2 From e95b62ac216a4dcea57a5903f733f49e9f3b09e6 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 15 Oct 2024 13:12:08 -0400 Subject: [PATCH 176/430] Update Project Reactor to 3.6.11 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 0935a5274c3..4e4ff62f74d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -200,7 +200,7 @@ 4.10.0 3.5.1 1.0.4 - 3.6.10 + 3.6.11 1.7.15 1.3.8 2.2.21 From 65eb26a2162112a602e951e0a3d5e9907ad957e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Oct 2024 07:32:17 -0400 Subject: [PATCH 177/430] Bump cxf.opentelemetry.semconv.version from 1.27.0-alpha to 1.28.0-alpha (#2109) Bumps `cxf.opentelemetry.semconv.version` from 1.27.0-alpha to 1.28.0-alpha. Updates `io.opentelemetry.semconv:opentelemetry-semconv` from 1.27.0-alpha to 1.28.0-alpha - [Release notes](https://github.com/open-telemetry/semantic-conventions-java/releases) - [Changelog](https://github.com/open-telemetry/semantic-conventions-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/semantic-conventions-java/commits) Updates `io.opentelemetry.semconv:opentelemetry-semconv-incubating` from 1.27.0-alpha to 1.28.0-alpha - [Release notes](https://github.com/open-telemetry/semantic-conventions-java/releases) - [Changelog](https://github.com/open-telemetry/semantic-conventions-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/semantic-conventions-java/commits) --- updated-dependencies: - dependency-name: io.opentelemetry.semconv:opentelemetry-semconv dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.opentelemetry.semconv:opentelemetry-semconv-incubating dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 4e4ff62f74d..958f442decf 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -192,7 +192,7 @@ 2.0.12 3.2.2 1.43.0 - 1.27.0-alpha + 1.28.0-alpha 0.33.0 2.0.27 1.1.7 From 20d6ea72fc763e82772d3605c70c8e7fc7bd4131 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 16 Oct 2024 09:10:14 -0400 Subject: [PATCH 178/430] Update Apache Tomcat to 10.1.31 (samples/pom.xml) --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 9079e020c5b..d25d2f8605b 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -38,7 +38,7 @@ 4.5.14 5.17.14 2.9.1 - 10.1.30 + 10.1.31 4.0.3.Final 2.11.0 9.12.0 From 9deffa6ddfa9df0ea8011a54dd16773c059fe5e9 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 16 Oct 2024 09:17:05 -0400 Subject: [PATCH 179/430] Update Logback to 1.5.11 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 958f442decf..070af9d5990 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -174,7 +174,7 @@ 2.0.3 7.0.1 1.1.2 - 1.5.10 + 1.5.11 9.12.0 3.9.8 1.13.6 From 90f828c9f84379f67135cb31d826cc1ecc3d18a6 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 16 Oct 2024 09:22:56 -0400 Subject: [PATCH 180/430] Update ASM to 9.7.1 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 070af9d5990..30b8023f30e 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -56,7 +56,7 @@ org.ow2.asm asm - 9.7 + 9.7.1 From a798520bae98f7c162811dfa2abe6fc40cdf4af3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 17 Oct 2024 07:36:55 -0400 Subject: [PATCH 181/430] Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.0 to 3.5.1 (#2110) Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.0 to 3.5.1. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.0...surefire-3.5.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index d25d2f8605b..c4aa7d487c9 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -228,7 +228,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.0 + 3.5.1 org.apache.maven.plugins diff --git a/pom.xml b/pom.xml index b5cdcef7648..79295ef5c82 100644 --- a/pom.xml +++ b/pom.xml @@ -490,7 +490,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.0 + 3.5.1 org.apache.maven.plugins From 0b41018fe470b459a01c0ef7c66431d542fc591c Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 17 Oct 2024 08:43:42 -0400 Subject: [PATCH 182/430] Update Spring Framework to 6.1.14 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 30b8023f30e..b73afe0d6e2 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -216,7 +216,7 @@ 3.2.6 spring-test 6.3.3 - 6.1.13 + 6.1.14 1.8.3 5.17.14 2.2.25 From 138ea01e28f86fe29bb004efcf1a0e26c1752b76 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 18 Oct 2024 07:53:35 -0400 Subject: [PATCH 183/430] Bump org.springframework.ldap:spring-ldap-core from 3.2.6 to 3.2.7 (#2112) Bumps [org.springframework.ldap:spring-ldap-core](https://github.com/spring-projects/spring-ldap) from 3.2.6 to 3.2.7. - [Release notes](https://github.com/spring-projects/spring-ldap/releases) - [Changelog](https://github.com/spring-projects/spring-ldap/blob/main/changelog.txt) - [Commits](https://github.com/spring-projects/spring-ldap/compare/3.2.6...3.2.7) --- updated-dependencies: - dependency-name: org.springframework.ldap:spring-ldap-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index b73afe0d6e2..507025f2f13 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -213,7 +213,7 @@ 2.3 2.3_2 3.3.4 - 3.2.6 + 3.2.7 spring-test 6.3.3 6.1.14 From 911543ae776e717500e907e3a3de10d56ec92954 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 20 Oct 2024 15:13:20 -0400 Subject: [PATCH 184/430] Update Undertow to 2.3.18.Final --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 507025f2f13..8ef4abcf0e0 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -223,7 +223,7 @@ 2.9.1 10.1.31 1.8 - 2.3.17.Final + 2.3.18.Final 3.0.4 true UTF-8 - 3.3.4 + 3.3.5 4.1.3 12.0.14 4.1.114.Final diff --git a/parent/pom.xml b/parent/pom.xml index c0165b9fe56..d225bff2562 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -212,7 +212,7 @@ 2.0.16 2.3 2.3_2 - 3.3.4 + 3.3.5 3.2.7 spring-test 6.3.4 From bbba93ebbaf0d2978f5605bfc16001825c138efe Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 26 Oct 2024 10:17:04 -0400 Subject: [PATCH 197/430] CXF-7396: CachedOutputStream doesn't delete temp files. Add forced cleanup on Bus shutdown (#2111) --- .../org/apache/cxf/io/CachedConstants.java | 8 +++++++ .../io/DelayedCachedOutputStreamCleaner.java | 19 ++++++++++++++- .../DelayedCachedOutputStreamCleanerTest.java | 24 ++++++++++++++++++- 3 files changed, 49 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/cxf/io/CachedConstants.java b/core/src/main/java/org/apache/cxf/io/CachedConstants.java index 1b23f66e995..7b45d0861b8 100644 --- a/core/src/main/java/org/apache/cxf/io/CachedConstants.java +++ b/core/src/main/java/org/apache/cxf/io/CachedConstants.java @@ -79,6 +79,14 @@ public final class CachedConstants { public static final String CLEANER_DELAY_BUS_PROP = "bus.io.CachedOutputStreamCleaner.Delay"; + /** + * Forces cleaning of the unclosed {@code CachedOutputStream} instances on {@link Bus} shutdown. + * The default value is "true", if the cleaner is deactivated or the value is set to "false", no + * cleanup attempt on shutdown will be performed. + */ + public static final String CLEANER_CLEAN_ON_SHUTDOWN_BUS_PROP = + "bus.io.CachedOutputStreamCleaner.CleanOnShutdown"; + private CachedConstants() { // complete } diff --git a/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java b/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java index 04a258a558e..cb4f9ba8807 100644 --- a/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java +++ b/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java @@ -46,6 +46,7 @@ public final class DelayedCachedOutputStreamCleaner implements CachedOutputStrea }; private DelayedCleaner cleaner = NOOP_CLEANER; + private boolean cleanupOnShutdown = true; private interface DelayedCleaner extends CachedOutputStreamCleaner, Closeable { @Override @@ -174,9 +175,11 @@ public boolean equals(Object obj) { public void setBus(Bus bus) { Number delayValue = null; BusLifeCycleManager busLifeCycleManager = null; + Boolean cleanupOnShutdownValue = null; if (bus != null) { delayValue = (Number) bus.getProperty(CachedConstants.CLEANER_DELAY_BUS_PROP); + cleanupOnShutdownValue = (Boolean) bus.getProperty(CachedConstants.CLEANER_CLEAN_ON_SHUTDOWN_BUS_PROP); busLifeCycleManager = bus.getExtension(BusLifeCycleManager.class); } @@ -184,6 +187,12 @@ public void setBus(Bus bus) { cleaner.close(); } + if (cleanupOnShutdownValue != null) { + cleanupOnShutdown = cleanupOnShutdownValue; + } else { + cleanupOnShutdown = true; + } + if (delayValue == null) { // Default delay is set to 30 mins cleaner = new DelayedCleanerImpl(TimeUnit.MILLISECONDS.convert(30, TimeUnit.MINUTES)); @@ -226,11 +235,19 @@ public void initComplete() { @Override public void postShutdown() { + // If cleanup on shutdown is asked, force cleaning all cached output streams + if (cleanupOnShutdown) { + forceClean(); + cleaner.close(); + } } @Override public void preShutdown() { - cleaner.close(); + // If cleanup on shutdown is asked, defer closing till postShutdown hook + if (!cleanupOnShutdown) { + cleaner.close(); + } } public void forceClean() { diff --git a/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java b/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java index 3f0603aa7f3..8fcb12cf461 100644 --- a/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java +++ b/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java @@ -146,7 +146,7 @@ public void testForceCleanException() throws InterruptedException { } @Test - public void testBusLifecycle() throws InterruptedException { + public void testCleanOnShutdown() throws InterruptedException { /* Delay of 2.5 seconds */ final Map properties = Collections.singletonMap(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); bus = new ExtensionManagerBus(new HashMap<>(), properties); @@ -161,6 +161,28 @@ public void testBusLifecycle() throws InterruptedException { // Closes the bus, the cleaner should cancel the internal timer(s) bus.shutdown(true); + // The Closeable::close should be called on shutdown + assertThat(latch.get(), is(true)); + } + + @Test + public void testCleanOnShutdownDisabled() throws InterruptedException { + /* Delay of 2.5 seconds */ + final Map properties = new HashMap<>(); + properties.put(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); + properties.put(CachedConstants.CLEANER_CLEAN_ON_SHUTDOWN_BUS_PROP, false); + bus = new ExtensionManagerBus(new HashMap<>(), properties); + + final AtomicBoolean latch = new AtomicBoolean(); + final Closeable closeable = () -> latch.compareAndSet(false, true); + + bus.setProperty(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); /* 2.5 seconds */ + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + cleaner.register(closeable); + + // Closes the bus, the cleaner should cancel the internal timer(s) + bus.shutdown(true); + // The Closeable::close should not be called since timer(s) is cancelled await().during(3, TimeUnit.SECONDS).untilAtomic(latch, is(false)); } From 96788dca979ef5711efbfe4c96c513788bd89df5 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 27 Oct 2024 14:06:05 -0400 Subject: [PATCH 198/430] Fix Jakarta REST TCK configuration related to client initialization (Jersey instead of Apache CXF) --- tck/cxf-tck/lib/jersey-client-3.1.3.jar | Bin 0 -> 302120 bytes tck/cxf-tck/pom.xml | 37 +- .../clientutils/GlassFishClientUtil.java | 373 ++++++++++++++++++ 3 files changed, 409 insertions(+), 1 deletion(-) create mode 100644 tck/cxf-tck/lib/jersey-client-3.1.3.jar create mode 100644 tck/cxf-tck/src/main/java/org/jboss/arquillian/container/glassfish/clientutils/GlassFishClientUtil.java diff --git a/tck/cxf-tck/lib/jersey-client-3.1.3.jar b/tck/cxf-tck/lib/jersey-client-3.1.3.jar new file mode 100644 index 0000000000000000000000000000000000000000..c3f24982b9d8bdb6ca6777c9c163e996edda90c3 GIT binary patch literal 302120 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%0A$oBRFQ_MG;&ux7w~&U%sfv~MDaW$ocD5FC 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 literal 0 HcmV?d00001 diff --git a/tck/cxf-tck/pom.xml b/tck/cxf-tck/pom.xml index d3a77e769bb..fab7009b299 100644 --- a/tck/cxf-tck/pom.xml +++ b/tck/cxf-tck/pom.xml @@ -178,6 +178,26 @@ sigtest-maven-plugin 1.4 + + + org.glassfish.jersey.core + jersey-common + 3.1.3 + + + + + org.glassfish.jersey.core + jersey-client + 3.1.3 + system + ${project.basedir}/lib/jersey-client-3.1.3.jar + @@ -287,7 +307,7 @@ - UpdateConfigs + UpdateJerseyServerManifests pre-integration-test exec @@ -301,6 +321,21 @@ + + UpdateJerseyClientManifests + pre-integration-test + + exec + + + zip + + -d + ${project.build.directory}/glassfish7/glassfish/modules/jersey-client.jar + META-INF/services/jakarta.ws.rs.client.ClientBuilder + + + StartDomain1 pre-integration-test diff --git a/tck/cxf-tck/src/main/java/org/jboss/arquillian/container/glassfish/clientutils/GlassFishClientUtil.java b/tck/cxf-tck/src/main/java/org/jboss/arquillian/container/glassfish/clientutils/GlassFishClientUtil.java new file mode 100644 index 00000000000..c45c6c475e0 --- /dev/null +++ b/tck/cxf-tck/src/main/java/org/jboss/arquillian/container/glassfish/clientutils/GlassFishClientUtil.java @@ -0,0 +1,373 @@ +/* + * JBoss, Home of Professional Open Source + * Copyright 2011, Red Hat Middleware LLC, and individual contributors + * by the @authors tag. See the copyright.txt in the distribution for a + * full listing of individual contributors. + * + * Licensed 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. + */ + +/** + * @author Z.Paulovics + */ +package org.jboss.arquillian.container.glassfish.clientutils; + +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.Response; +import org.glassfish.jersey.client.JerseyClientBuilder; +import org.glassfish.jersey.client.ClientConfig; +import org.glassfish.jersey.client.authentication.HttpAuthenticationFeature; +import org.glassfish.jersey.client.filter.CsrfProtectionFilter; +import org.glassfish.jersey.media.multipart.FormDataMultiPart; +import org.glassfish.jersey.media.multipart.MultiPartFeature; +import org.jboss.arquillian.container.glassfish.CommonGlassFishConfiguration; + +import jakarta.ws.rs.core.MediaType; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +import static jakarta.ws.rs.core.HttpHeaders.USER_AGENT; + +/** + * This is a copy of the org.jboss.arquillian.container.glassfish.GlassFishClientUtil from + * arquillian-glassfish-common-jakarta-7.0.10.jar that overrides {@link ClientBuilder#newBuilder()} usages + * with {@link JerseyClientBuilder} instance. + */ +public class GlassFishClientUtil { + + /** + * Status for a successful GlassFish exit code deployment. + */ + public static final String SUCCESS = "SUCCESS"; + + /** + * Status for a GlassFish exit code deployment which ended in warning. + */ + public static final String WARNING = "WARNING"; + + private CommonGlassFishConfiguration configuration; + + private String adminBaseUrl; + + private static final Logger log = Logger.getLogger(GlassFishClientUtil.class.getName()); + + public GlassFishClientUtil(CommonGlassFishConfiguration configuration, String adminBaseUrl) { + this.configuration = configuration; + this.adminBaseUrl = adminBaseUrl; + } + + public CommonGlassFishConfiguration getConfiguration() { + return configuration; + } + + public Map getAttributes(String additionalResourceUrl) { + Map responseMap = GETRequest(additionalResourceUrl); + Map attributes = new HashMap(); + + Map> resultExtraProperties = (Map>) responseMap.get("extraProperties"); + if (resultExtraProperties != null) { + attributes = resultExtraProperties.get("entity"); + } + + return attributes; + } + + public Map getChildResources(String additionalResourceUrl) throws GlassFishClientException { + Map responseMap = GETRequest(additionalResourceUrl); + Map childResources = new HashMap(); + + Map resultExtraProperties = (Map) responseMap.get("extraProperties"); + if (resultExtraProperties != null) { + childResources = (Map) resultExtraProperties.get("childResources"); + } + + return childResources; + } + + /** + * Create a WebTarget for accessing a subpath under the admin endpoint that has authorization, logging + * and CSRF setup. + * + * @return WebTarget for admin base endpoint + */ + public WebTarget prepareGET() { + ClientBuilder builder = new JerseyClientBuilder(); + ClientConfig jerseyConfig = new ClientConfig(); + if (configuration.isAuthorisation()) { + jerseyConfig.register(HttpAuthenticationFeature.basic(configuration.getAdminUser(), configuration.getAdminPassword())); + } + + builder.withConfig(jerseyConfig); + builder.register(new CsrfProtectionFilter()); + Client client = builder.build(); + return client.target(this.adminBaseUrl); + } + + /** + * Invoke a GET request against the adminSubPath + * @param adminSubPath - subpath of the admin command + * @return map of the parsed XML response + */ + public Map GETRequest(String adminSubPath) { + try { + Invocation.Builder getBuilder = prepareClient(adminSubPath, false); + Response response = getBuilder.buildGet().invoke(); + Map responseMap = getResponseMap(response); + + return responseMap; + } catch (Exception e) { + throw new GlassFishClientException(e); + } + } + + public List> getInstancesList(String additionalResourceUrl) throws GlassFishClientException { + Map responseMap = GETRequest(additionalResourceUrl); + List> instancesList = new ArrayList>(); + + Map resultExtraProperties = (Map) responseMap.get("extraProperties"); + if (resultExtraProperties != null) { + instancesList = (List>) resultExtraProperties.get("instanceList"); + } + + return instancesList; + } + + public Map POSTMultiPartRequest(String additionalResourceUrl, FormDataMultiPart form) { + try { + Response response = prepareClient(additionalResourceUrl, true) + .accept(MediaType.MULTIPART_FORM_DATA_TYPE) + .buildPost(Entity.entity(form, MediaType.MULTIPART_FORM_DATA)) + .invoke(); + Map responseMap = getResponseMap(response); + + return responseMap; + } catch (Exception e) { + throw new GlassFishClientException(e); + } + } + + /** + * Basic REST call preparation, with the additional resource url appended + * + * @param additionalResourceUrl + * url portion past the base to use + * + * @return the resource builder to execute + */ + private Invocation.Builder prepareClient(String additionalResourceUrl, boolean multiPart) { + ClientBuilder builder = new JerseyClientBuilder(); + ClientConfig jerseyConfig = new ClientConfig(); + if (configuration.isAuthorisation()) { + jerseyConfig.register(HttpAuthenticationFeature.basic(configuration.getAdminUser(), configuration.getAdminPassword())); + } + if (multiPart) { + jerseyConfig.register(MultiPartFeature.class); + } + + builder.withConfig(jerseyConfig); + builder.register(new CsrfProtectionFilter()); + Client client = builder.build(); + return client.target(this.adminBaseUrl) + .path(additionalResourceUrl) + .request(MediaType.APPLICATION_XML_TYPE) + .header(USER_AGENT, GlassFishClientService.USER_AGENT_VALUE); + } + + Map getResponseMap(Response response) throws GlassFishClientException { + Map responseMap = new HashMap<>(); + String message = ""; + final String xmlDoc = response.readEntity(String.class); + + // Marshalling the XML format response to a java Map + if (xmlDoc != null && !xmlDoc.isEmpty()) { + responseMap = xmlToMap(xmlDoc); + + message = "exit_code: " + responseMap.get("exit_code") + + ", message: " + responseMap.get("message"); + } + + Response.StatusType status = response.getStatusInfo(); + if (status.getFamily() == Response.Status.Family.SUCCESSFUL) { + // O.K. the jersey call was successful, what about the GlassFish server response? + if (responseMap.get("exit_code") == null) { + throw new GlassFishClientException(message); + } else if (WARNING.equals(responseMap.get("exit_code"))) { + // Warning is not a failure - some warnings in GlassFish are inevitable (i.e. persistence-related: ARQ-606) + log.warning("Deployment resulted in a warning: " + message); + } else if (!SUCCESS.equals(responseMap.get("exit_code"))) { + // Response is not a warning nor success - it's surely a failure. + throw new GlassFishClientException(message); + } + } else if (status.getReasonPhrase().contains("Not Found")) { + // the REST resource can not be found (for optional resources it can be O.K.) + message += " [status: " + status.getFamily() + " reason: " + status.getReasonPhrase() + "]"; + log.warning(message); + } else { + message += " [status: " + status.getFamily() + " reason: " + status.getReasonPhrase() + "]"; + log.severe(message); + throw new GlassFishClientException(message); + } + + return responseMap; + } + + /** + * Marshalling a Glassfish Mng API response XML document to a java Map object + * + * @param document XML + * + * @return map containing the XML doc representation in java map format + */ + public Map xmlToMap(String document) { + + if (document == null) { + return new HashMap<>(); + } + + InputStream input = null; + Map map = null; + try { + XMLInputFactory factory = XMLInputFactory.newInstance(); + factory.setProperty(XMLInputFactory.IS_VALIDATING, false); + input = new ByteArrayInputStream(document.trim().getBytes("UTF-8")); + XMLStreamReader stream = factory.createXMLStreamReader(input); + while (stream.hasNext()) { + int currentEvent = stream.next(); + if (currentEvent == XMLStreamConstants.START_ELEMENT) { + if ("map".equals(stream.getLocalName())) { + map = resolveXmlMap(stream); + } + } + } + } catch (Exception ex) { + log.log(Level.SEVERE, null, ex); + throw new RuntimeException(ex); + } finally { + try { + input.close(); + } catch (IOException ex) { + log.log(Level.SEVERE, null, ex); + } + } + + return map; + } + + private Map resolveXmlMap(XMLStreamReader stream) throws XMLStreamException { + + boolean endMapFlag = false; + Map entry = new HashMap(); + String key = null; + String elementName = null; + + while (!endMapFlag) { + + int currentEvent = stream.next(); + if (currentEvent == XMLStreamConstants.START_ELEMENT) { + + if ("entry".equals(stream.getLocalName())) { + key = stream.getAttributeValue(null, "key"); + String value = stream.getAttributeValue(null, "value"); + if (value != null) { + entry.put(key, value); + key = null; + } + } else if ("map".equals(stream.getLocalName())) { + Map value = resolveXmlMap(stream); + entry.put(key, value); + } else if ("list".equals(stream.getLocalName())) { + List value = resolveXmlList(stream); + entry.put(key, value); + } else { + elementName = stream.getLocalName(); + } + } else if (currentEvent == XMLStreamConstants.END_ELEMENT) { + + if ("map".equals(stream.getLocalName())) { + endMapFlag = true; + } + elementName = null; + } else { + + String document = stream.getText(); + if (elementName != null) { + if ("number".equals(elementName)) { + if (document.contains(".")) { + entry.put(key, Double.parseDouble(document)); + } else { + entry.put(key, Long.parseLong(document)); + } + } else if ("string".equals(elementName)) { + entry.put(key, document); + } + elementName = null; + } + } // end if + } // end while + return entry; + } + + private List resolveXmlList(XMLStreamReader stream) throws XMLStreamException { + + boolean endListFlag = false; + List list = new ArrayList(); + String elementName = null; + + while (!endListFlag) { + + int currentEvent = stream.next(); + if (currentEvent == XMLStreamConstants.START_ELEMENT) { + if ("map".equals(stream.getLocalName())) { + list.add(resolveXmlMap(stream)); + } else { + elementName = stream.getLocalName(); + } + } else if (currentEvent == XMLStreamConstants.END_ELEMENT) { + + if ("list".equals(stream.getLocalName())) { + endListFlag = true; + } + elementName = null; + } else { + + String document = stream.getText(); + if (elementName != null) { + if ("number".equals(elementName)) { + if (document.contains(".")) { + list.add(Double.parseDouble(document)); + } else { + list.add(Long.parseLong(document)); + } + } else if ("string".equals(elementName)) { + list.add(document); + } + elementName = null; + } + } // end if + } // end while + return list; + } +} From 7b43956cbac47bcc55ce9e63dfe28f398c03aaab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:28:51 -0400 Subject: [PATCH 199/430] Bump actions/setup-java from 4.4.0 to 4.5.0 (#2120) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.4.0 to 4.5.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/b36c23c0d998641eff861008f374ee103c25ac73...8df1039502a15bceb9433410b1a100fbe190c53b) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pull-request-build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index fed0e482905..e9477e9e231 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 - name: Setup JDK 17 - uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 + uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/pull-request-build.yml b/.github/workflows/pull-request-build.yml index 7d94ea33ee3..39e1e076d63 100644 --- a/.github/workflows/pull-request-build.yml +++ b/.github/workflows/pull-request-build.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v3.6.0 - name: Set up JDK 17 - uses: actions/setup-java@b36c23c0d998641eff861008f374ee103c25ac73 # v4.4.0 + uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 with: java-version: '17' distribution: 'temurin' From 8bb01ba388f382a34cbb32e5e01942f7b3e8839b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:29:06 -0400 Subject: [PATCH 200/430] Bump ch.qos.logback:logback-classic from 1.5.11 to 1.5.12 (#2124) Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.11 to 1.5.12. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.11...v_1.5.12) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index d225bff2562..6b74a3f095c 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -174,7 +174,7 @@ 2.0.3 7.0.1 1.1.2 - 1.5.11 + 1.5.12 9.12.0 3.9.8 1.13.6 From 39f98b2685b0088f9be5dbb55777e92e10ab7a35 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:29:20 -0400 Subject: [PATCH 201/430] Bump actions/checkout from 4.2.1 to 4.2.2 (#2123) Bumps [actions/checkout](https://github.com/actions/checkout) from 4.2.1 to 4.2.2. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871...11bd71901bbe5b1630ceea73d27597364c9af683) --- updated-dependencies: - dependency-name: actions/checkout dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pull-request-build.yml | 2 +- .github/workflows/scorecards.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e9477e9e231..0b97025c988 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -28,7 +28,7 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v4.2.1 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup JDK 17 uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 diff --git a/.github/workflows/pull-request-build.yml b/.github/workflows/pull-request-build.yml index 39e1e076d63..26d92aa1d06 100644 --- a/.github/workflows/pull-request-build.yml +++ b/.github/workflows/pull-request-build.yml @@ -18,7 +18,7 @@ jobs: pull-requests: read timeout-minutes: 130 steps: - - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # v3.6.0 + - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v3.6.0 - name: Set up JDK 17 uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 with: diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 832116cf1dc..939692f67ff 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -25,7 +25,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@eef61447b9ff4aafe5dcd4e0bbf5d482be7e7871 # tag=v3.0.0 + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # tag=v3.0.0 with: persist-credentials: false From 751a076643bc313628dc03b127c90b6c23863efc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:29:35 -0400 Subject: [PATCH 202/430] Bump actions/cache from 4.1.1 to 4.1.2 (#2122) Bumps [actions/cache](https://github.com/actions/cache) from 4.1.1 to 4.1.2. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/3624ceb22c1c5a301c8db4169662070a689d9ea8...6849a6489940f00c2f30c0fb92c6274307ccb58a) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 0b97025c988..28765c7c3f6 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -36,7 +36,7 @@ jobs: distribution: 'temurin' java-version: '17' - name: Cache local Maven repository - uses: actions/cache@3624ceb22c1c5a301c8db4169662070a689d9ea8 # v4.1.1 + uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} From 85f31862370b15fd26fcfa0078813921afdbbd8c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 28 Oct 2024 09:29:50 -0400 Subject: [PATCH 203/430] Bump github/codeql-action from 3.26.13 to 3.27.0 (#2121) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.26.13 to 3.27.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/f779452ac5af1c261dce0346a8f964149f49322b...662472033e021d55d94146f66f6058822b0b39fd) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 28765c7c3f6..65c324dca1f 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/init@662472033e021d55d94146f66f6058822b0b39fd # v3.27.0 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f779452ac5af1c261dce0346a8f964149f49322b # v3.26.13 + uses: github/codeql-action/analyze@662472033e021d55d94146f66f6058822b0b39fd # v3.27.0 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 939692f67ff..a619d2837ac 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@f779452ac5af1c261dce0346a8f964149f49322b #tag=v2 + uses: github/codeql-action/upload-sarif@662472033e021d55d94146f66f6058822b0b39fd #tag=v2 with: sarif_file: results.sarif From 3a6c3e8667160a78ad094779e631deba46c0b8be Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 28 Oct 2024 21:16:14 -0400 Subject: [PATCH 204/430] Fix Jakarta REST TCK configuration related to server initialization (Jersey instead of Apache CXF) --- tck/cxf-tck/pom.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tck/cxf-tck/pom.xml b/tck/cxf-tck/pom.xml index fab7009b299..3d5d76e2598 100644 --- a/tck/cxf-tck/pom.xml +++ b/tck/cxf-tck/pom.xml @@ -306,6 +306,21 @@ + + UpdateJerseyCommonManifests + pre-integration-test + + exec + + + zip + + -d + ${project.build.directory}/glassfish7/glassfish/modules/jersey-common.jar + META-INF/services/jakarta.ws.rs.ext.RuntimeDelegate + + + UpdateJerseyServerManifests pre-integration-test From 9bef7a027c3ff17fed3568f9ef1e338c43132d36 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 29 Oct 2024 07:29:25 -0400 Subject: [PATCH 205/430] Bump org.apache.camel.springboot:camel-spring-boot-dependencies (#2127) Bumps org.apache.camel.springboot:camel-spring-boot-dependencies from 4.8.0 to 4.8.1. --- updated-dependencies: - dependency-name: org.apache.camel.springboot:camel-spring-boot-dependencies dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index a381d8f63e7..e0303a036e9 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -51,7 +51,7 @@ 2.3.232 5.13.1.Final 2.6.7 - 4.8.0 + 4.8.1 13.5 From 715df8f97c644f3e4c7eeed4676fe3c06daaea96 Mon Sep 17 00:00:00 2001 From: Colm O hEigeartaigh Date: Wed, 30 Oct 2024 10:04:54 +0000 Subject: [PATCH 206/430] Updating Neethi to 3.2.1 (#2129) --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 6b74a3f095c..2fe415dc7b3 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -185,7 +185,7 @@ 2.2.1 5.14.2 2022.7 - 3.2.0 + 3.2.1 [4,5) 4.1.114.Final 2.0.46.Final From 90b1151c6da824703f408cbcdb5a24ef303941e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 30 Oct 2024 09:14:45 -0400 Subject: [PATCH 207/430] Bump org.apache.maven.plugins:maven-plugin-plugin from 3.15.0 to 3.15.1 (#2128) Bumps [org.apache.maven.plugins:maven-plugin-plugin](https://github.com/apache/maven-plugin-tools) from 3.15.0 to 3.15.1. - [Release notes](https://github.com/apache/maven-plugin-tools/releases) - [Commits](https://github.com/apache/maven-plugin-tools/compare/maven-plugin-tools-3.15.0...maven-plugin-tools-3.15.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-plugin-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 85400a73b10..0c1121debfd 100644 --- a/pom.xml +++ b/pom.xml @@ -569,7 +569,7 @@ org.apache.maven.plugins maven-plugin-plugin - 3.15.0 + 3.15.1 org.apache.maven.plugins From 6c569cfab2fb5665d73076fe8fa8b09a4ba4ae48 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 31 Oct 2024 07:58:07 -0400 Subject: [PATCH 208/430] Bump org.atmosphere:atmosphere-runtime from 3.0.11 to 3.0.13 (#2130) Bumps [org.atmosphere:atmosphere-runtime](https://github.com/Atmosphere/atmosphere) from 3.0.11 to 3.0.13. - [Commits](https://github.com/Atmosphere/atmosphere/compare/atmosphere-project-3.0.11...atmosphere-project-3.0.13) --- updated-dependencies: - dependency-name: org.atmosphere:atmosphere-runtime dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 2fe415dc7b3..b4630a460c1 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -94,7 +94,7 @@ 1.9.22.1 3.26.3 [3.0, 4.0) - 3.0.11 + 3.0.13 1.77 6.0.3 4.0.1 From 85492df6c6c5ed18d0be3027482f84793f042efe Mon Sep 17 00:00:00 2001 From: Radek Kraus <6397085+lenoch7@users.noreply.github.com> Date: Thu, 31 Oct 2024 21:01:02 +0100 Subject: [PATCH 209/430] [CXF-9074] Fix problem with custom SSLContext in TLSClientParameters (#2131) Fix problem in https communication, when Java HttpClient is used and custom SSLContext is registered in TLSClientParameters. --- .../transport/http/HttpClientHTTPConduit.java | 1 + .../https/conduit/HTTPSConduitTest.java | 84 ++++++++++++++++++- 2 files changed, 84 insertions(+), 1 deletion(-) diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java index d40582d576e..a59bc3e6a18 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java @@ -383,6 +383,7 @@ protected void setupConnection(Message message, Address address, HTTPClientPolic cb.sslContext(sslContext); } if (sslContext != null) { + cb.sslContext(sslContext); String[] supportedCiphers = org.apache.cxf.configuration.jsse.SSLUtils .getSupportedCipherSuites(sslContext); String[] cipherSuites = org.apache.cxf.configuration.jsse.SSLUtils diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/https/conduit/HTTPSConduitTest.java b/systests/transports/src/test/java/org/apache/cxf/systest/https/conduit/HTTPSConduitTest.java index bcb9616c474..ae696925074 100644 --- a/systests/transports/src/test/java/org/apache/cxf/systest/https/conduit/HTTPSConduitTest.java +++ b/systests/transports/src/test/java/org/apache/cxf/systest/https/conduit/HTTPSConduitTest.java @@ -22,19 +22,29 @@ import java.io.IOException; import java.io.InputStream; +import java.net.Socket; import java.net.URI; import java.net.URL; import java.security.GeneralSecurityException; import java.security.KeyStore; +import java.security.SecureRandom; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.TreeMap; +import javax.net.ssl.HostnameVerifier; import javax.net.ssl.KeyManager; import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLEngine; +import javax.net.ssl.SSLPeerUnverifiedException; +import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.X509ExtendedTrustManager; import javax.xml.namespace.QName; import org.apache.cxf.Bus; @@ -361,6 +371,78 @@ private void verifyBethalClient(Greeter bethal) { */ @Test public void testHttpsBasicConnection() throws Exception { + // Use common/shared TLSClientParameters + testHttpsBasicConnection(tlsClientParameters); + } + + @Test + public void testHttpsBasicConnectionCustomSslContext() throws Exception { + // Use custom SSLContext registered in TLSClientParameters + SSLContext ctx = SSLContext.getInstance("TLSv1.3"); + try (InputStream keyStoreIs = ClassLoaderUtils.getResourceAsStream( + "keys/Morpit.jks", HTTPSConduitTest.class + )) { + KeyManager[] keyManagers = getKeyManagers(getKeyStore( + "JKS", keyStoreIs, "password"), "password" + ); + // I need to disable CN verification (as certificate contains Bethal as CN), + // but I cannot use TLSClientParameters.setDisableCNCheck(), because in this case + // URLCONNECTION is always used (see HttpClientHTTPConduit.setupConnection()) + // -> I must used own TrustManager without verification + TrustManager trustManager = new X509ExtendedTrustManager() { + @Override + public X509Certificate[] getAcceptedIssuers() { + return new X509Certificate[] {}; + } + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType) { + } + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType) { + } + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType, Socket socket) { + } + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType, Socket socket) { + } + @Override + public void checkClientTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { + } + @Override + public void checkServerTrusted(X509Certificate[] chain, String authType, SSLEngine engine) { + } + }; + ctx.init( + keyManagers, + new TrustManager[] {trustManager}, + SecureRandom.getInstance("SHA1PRNG") + ); + } + + // HostnameVerifier (disable host name verification) + class AllowAllHostnameVerifier implements HostnameVerifier { + @Override + public boolean verify(String host, SSLSession session) { + try { + Certificate[] certs = session.getPeerCertificates(); + return certs != null && certs[0] instanceof X509Certificate; + } catch (SSLPeerUnverifiedException e) { + return false; + } + } + } + + // TLSClientParameters (Custom SSLContext) + TLSClientParameters tlsClientParams = new TLSClientParameters(); + tlsClientParams.setSslContext(ctx); + // TLSClientParameters (disable host name verification - now needed only when URLConnection is used) + tlsClientParams.setHostnameVerifier(new AllowAllHostnameVerifier()); + + testHttpsBasicConnection(tlsClientParams); + } + + private void testHttpsBasicConnection(TLSClientParameters tlsClientParams) throws Exception { startServer("Bethal"); URL wsdl = getClass().getResource("greeting.wsdl"); @@ -392,7 +474,7 @@ public void testHttpsBasicConnection() throws Exception { authPolicy.setPassword("password"); http.setClient(httpClientPolicy); - http.setTlsClientParameters(tlsClientParameters); + http.setTlsClientParameters(tlsClientParams); http.setAuthorization(authPolicy); configureProxy(client); From 4e2dac0c0d68b482058cb9de1542fed485cb6e28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 1 Nov 2024 09:58:54 -0400 Subject: [PATCH 210/430] Bump com.googlecode.maven-download-plugin:download-maven-plugin (#2133) Bumps [com.googlecode.maven-download-plugin:download-maven-plugin](https://github.com/maven-download-plugin/maven-download-plugin) from 1.11.0 to 1.11.2. - [Release notes](https://github.com/maven-download-plugin/maven-download-plugin/releases) - [Commits](https://github.com/maven-download-plugin/maven-download-plugin/compare/1.11.0...1.11.2) --- updated-dependencies: - dependency-name: com.googlecode.maven-download-plugin:download-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- rt/transports/http/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rt/transports/http/pom.xml b/rt/transports/http/pom.xml index f95be708abc..741ad101170 100644 --- a/rt/transports/http/pom.xml +++ b/rt/transports/http/pom.xml @@ -160,7 +160,7 @@ com.googlecode.maven-download-plugin download-maven-plugin - 1.11.0 + 1.11.2 download-public-suffix-list From 8d52cc9a8a8d0547c076c5becb33dd34285c0ff4 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 1 Nov 2024 09:59:04 -0400 Subject: [PATCH 211/430] Add ContextResolver support on the JAX-RS client side (#2132) --- .../jaxrs/client/ClientProviderFactory.java | 12 ++ .../jaxrs/JAXRS31ClientServerBookTest.java | 172 ++++++++++++++++++ 2 files changed, 184 insertions(+) create mode 100644 systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS31ClientServerBookTest.java diff --git a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java index 7c03a414b95..ae3cf81ae92 100644 --- a/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java +++ b/rt/rs/client/src/main/java/org/apache/cxf/jaxrs/client/ClientProviderFactory.java @@ -27,6 +27,7 @@ import jakarta.ws.rs.client.ClientResponseFilter; import jakarta.ws.rs.client.RxInvokerProvider; import jakarta.ws.rs.core.Configuration; +import jakarta.ws.rs.ext.ContextResolver; import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; import org.apache.cxf.common.util.ClassHelper; @@ -42,6 +43,8 @@ public final class ClientProviderFactory extends ProviderFactory { new ArrayList<>(1); private List>> responseExceptionMappers = new ArrayList<>(1); + private List>> contextResolvers = + new ArrayList<>(); private RxInvokerProvider rxInvokerProvider; private ClientProviderFactory(Bus bus) { super(bus); @@ -98,6 +101,10 @@ protected void setProviders(boolean custom, boolean busGlobal, Object... provide if (RxInvokerProvider.class.isAssignableFrom(providerCls)) { this.rxInvokerProvider = RxInvokerProvider.class.cast(provider.getProvider()); } + + if (filterContractSupported(provider, providerCls, ContextResolver.class)) { + addProviderToList(contextResolvers, provider); + } } Collections.sort(clientRequestFilters, new BindingPriorityComparator(ClientRequestFilter.class, true)); @@ -125,6 +132,7 @@ public void clearProviders() { responseExceptionMappers.clear(); clientRequestFilters.clear(); clientResponseFilters.clear(); + contextResolvers.clear(); } public List> getClientRequestFilters() { @@ -135,6 +143,10 @@ public List> getClientResponseFilters() { return Collections.unmodifiableList(clientResponseFilters); } + public List>> getContextResolvers() { + return Collections.unmodifiableList(contextResolvers); + } + @Override public Configuration getConfiguration(Message m) { return (Configuration)m.getExchange().getOutMessage() diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS31ClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS31ClientServerBookTest.java new file mode 100644 index 00000000000..bf1d6aefcde --- /dev/null +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS31ClientServerBookTest.java @@ -0,0 +1,172 @@ +/** + * 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.cxf.systest.jaxrs; + +import java.lang.reflect.Type; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.concurrent.ThreadLocalRandom; + +import jakarta.json.bind.Jsonb; +import jakarta.json.bind.JsonbBuilder; +import jakarta.json.bind.JsonbConfig; +import jakarta.json.bind.serializer.DeserializationContext; +import jakarta.json.bind.serializer.JsonbDeserializer; +import jakarta.json.bind.serializer.JsonbSerializer; +import jakarta.json.bind.serializer.SerializationContext; +import jakarta.json.stream.JsonGenerator; +import jakarta.json.stream.JsonParser; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.RuntimeType; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.UriBuilder; +import jakarta.ws.rs.ext.ContextResolver; +import org.apache.cxf.Bus; +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; +import org.apache.cxf.jaxrs.provider.jsrjsonb.JsrJsonbProvider; +import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; +import org.apache.cxf.testutil.common.AbstractServerTestServerBase; + +import org.junit.BeforeClass; +import org.junit.Test; + +import static jakarta.ws.rs.RuntimeType.CLIENT; +import static jakarta.ws.rs.RuntimeType.SERVER; +import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON; +import static jakarta.ws.rs.core.MediaType.APPLICATION_JSON_TYPE; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertTrue; + +public class JAXRS31ClientServerBookTest extends AbstractBusClientServerTestBase { + public static final String PORT = BookServer31.PORT; + + @BeforeClass + public static void startServers() throws Exception { + assertTrue("server did not launch correctly", launchServer(BookServer31.class, true)); + } + + @Test + public final void shouldUseApplicationProvidedJsonbInstance() throws URISyntaxException { + final String origin = String.format("Origin(%d)", ThreadLocalRandom.current().nextInt(1000)); + try (Client client = ClientBuilder + .newBuilder() + .register(new JsrJsonbProvider()) + .register(new CustomJsonbProvider(CLIENT)) + .build()) { + + final Book book = new Book(); + book.setName(origin); + + final URI effectiveUri = UriBuilder + .fromUri("http://localhost:" + PORT + "/") + .path("bookstore") + .build(); + + final Book response = client + .target(effectiveUri) + .request(APPLICATION_JSON_TYPE) + .buildPost(Entity.entity(book, APPLICATION_JSON_TYPE)) + .invoke(Book.class); + + final String expectedWaypoints = String.join(",", origin, + "CustomSerializer(CLIENT)", + "CustomDeserializer(SERVER)", + "BookResource", + "CustomSerializer(SERVER)", + "CustomDeserializer(CLIENT)"); + + assertThat(response.getName(), is(expectedWaypoints)); + } + } + + public static final class BookServer31 extends AbstractServerTestServerBase { + public static final String PORT = allocatePort(BookServer31.class); + + @Override + protected Server createServer(Bus bus) throws Exception { + JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); + sf.setResourceClasses(BookStoreResource.class); + sf.setProvider(new JsrJsonbProvider()); + sf.setProvider(new CustomJsonbProvider(SERVER)); + sf.setAddress("http://localhost:" + PORT + "/"); + return sf.create(); + } + + public static void main(String[] args) throws Exception { + new BookServer31().start(); + } + } + + @Path("/bookstore") + public static class BookStoreResource { + @POST + @Consumes(APPLICATION_JSON) + @Produces(APPLICATION_JSON) + public Book echo(final Book book) { + book.setName(String.join(",", book.getName(), "BookResource")); + return book; + } + } + + public static final class CustomJsonbProvider implements ContextResolver { + private final RuntimeType runtimeType; + + private CustomJsonbProvider(final RuntimeType runtimeType) { + this.runtimeType = runtimeType; + } + + public Jsonb getContext(final Class type) { + if (!Book.class.isAssignableFrom(type)) { + return null; + } + + return JsonbBuilder.create(new JsonbConfig() + .withSerializers(new CustomSerializer()) + .withDeserializers(new CustomDeserializer())); + } + + private final class CustomSerializer implements JsonbSerializer { + @Override + public void serialize(final Book book, final JsonGenerator generator, final SerializationContext ctx) { + generator.writeStartObject(); + generator.write("name", String.format("%s,CustomSerializer(%s)", book.getName(), + CustomJsonbProvider.this.runtimeType)); + generator.writeEnd(); + } + } + + private final class CustomDeserializer implements JsonbDeserializer { + @Override + public Book deserialize(final JsonParser parser, final DeserializationContext ctx, final Type rtType) { + final Book book = new Book(); + book.setName(String.format("%s,CustomDeserializer(%s)", parser.getObject().getString("name"), + CustomJsonbProvider.this.runtimeType)); + return book; + } + } + } +} From 8f5e9601f72d7781f72557195beaf771da8cf62c Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 3 Nov 2024 09:30:39 -0500 Subject: [PATCH 212/430] CXF-9064: AsyncHTTPConduit doesn't close copied wrappedStream on close (#2134) --- .../transport/http/asyncclient/AsyncHTTPConduit.java | 11 ++++++----- .../asyncclient/URLConnectionAsyncHTTPConduit.java | 11 ++++++----- .../http/asyncclient/hc5/AsyncHTTPConduit.java | 11 ++++++----- .../hc5/URLConnectionAsyncHTTPConduit.java | 11 ++++++----- 4 files changed, 24 insertions(+), 20 deletions(-) diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java index c3eb240191c..3cb93af1021 100755 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java @@ -416,11 +416,12 @@ public void close() throws IOException { } closed = true; if (!chunking && wrappedStream instanceof CachedOutputStream) { - CachedOutputStream out = (CachedOutputStream)wrappedStream; - this.basicEntity.setContentLength(out.size()); - wrappedStream = null; - handleHeadersTrustCaching(); - out.writeCacheTo(wrappedStream); + try (CachedOutputStream out = (CachedOutputStream)wrappedStream) { + this.basicEntity.setContentLength(out.size()); + wrappedStream = null; + handleHeadersTrustCaching(); + out.writeCacheTo(wrappedStream); + } } super.close(); } diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java index 9244db36ad4..e7b280811f5 100755 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java @@ -416,11 +416,12 @@ public void close() throws IOException { } closed = true; if (!chunking && wrappedStream instanceof CachedOutputStream) { - CachedOutputStream out = (CachedOutputStream)wrappedStream; - this.basicEntity.setContentLength(out.size()); - wrappedStream = null; - handleHeadersTrustCaching(); - out.writeCacheTo(wrappedStream); + try (CachedOutputStream out = (CachedOutputStream)wrappedStream) { + this.basicEntity.setContentLength(out.size()); + wrappedStream = null; + handleHeadersTrustCaching(); + out.writeCacheTo(wrappedStream); + } } super.close(); } diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java index 3372ae43432..689341c4a54 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java @@ -430,11 +430,12 @@ public void close() throws IOException { } closed = true; if (!chunking && wrappedStream instanceof CachedOutputStream) { - CachedOutputStream out = (CachedOutputStream)wrappedStream; - this.basicEntity.setContentLength(out.size()); - wrappedStream = null; - handleHeadersTrustCaching(); - out.writeCacheTo(wrappedStream); + try (CachedOutputStream out = (CachedOutputStream)wrappedStream) { + this.basicEntity.setContentLength(out.size()); + wrappedStream = null; + handleHeadersTrustCaching(); + out.writeCacheTo(wrappedStream); + } } super.close(); } diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java index d8e70f1ff2a..81010856e53 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java @@ -432,11 +432,12 @@ public void close() throws IOException { } closed = true; if (!chunking && wrappedStream instanceof CachedOutputStream) { - CachedOutputStream out = (CachedOutputStream)wrappedStream; - this.basicEntity.setContentLength(out.size()); - wrappedStream = null; - handleHeadersTrustCaching(); - out.writeCacheTo(wrappedStream); + try (CachedOutputStream out = (CachedOutputStream)wrappedStream) { + this.basicEntity.setContentLength(out.size()); + wrappedStream = null; + handleHeadersTrustCaching(); + out.writeCacheTo(wrappedStream); + } } super.close(); } From 3b89b45947b7db23e3292d5c1fb7fb39c2df2738 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 5 Nov 2024 07:41:16 -0500 Subject: [PATCH 213/430] Bump org.apache.maven.plugins:maven-surefire-report-plugin (#2136) Bumps [org.apache.maven.plugins:maven-surefire-report-plugin](https://github.com/apache/maven-surefire) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.1...surefire-3.5.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-report-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 0c1121debfd..7e4281415e5 100644 --- a/pom.xml +++ b/pom.xml @@ -559,7 +559,7 @@ org.apache.maven.plugins maven-surefire-report-plugin - 3.5.1 + 3.5.2 org.apache.maven.plugins From ed8519d0715d36d073a9639c75624aa22927698a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 6 Nov 2024 08:34:35 -0500 Subject: [PATCH 214/430] Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.1 to 3.11.1 (#2138) Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.10.1 to 3.11.1. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.10.1...maven-javadoc-plugin-3.11.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index b4630a460c1..fd0b2dfef15 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -2002,7 +2002,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.10.1 + 3.11.1 org.ehcache diff --git a/pom.xml b/pom.xml index 7e4281415e5..90b97244f4d 100644 --- a/pom.xml +++ b/pom.xml @@ -472,7 +472,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.10.1 + 3.11.1 true ${cxf.jdk.version} From b16ea53d45147a148a90e1563a4a80cd6881514b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Nov 2024 07:24:55 -0500 Subject: [PATCH 215/430] Bump cxf.jetty.version from 12.0.14 to 12.0.15 (#2139) Bumps `cxf.jetty.version` from 12.0.14 to 12.0.15. Updates `org.eclipse.jetty:jetty-server` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty.ee10:jetty-ee10-webapp` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty.websocket:jetty-websocket-jetty-server` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jetty-server` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty.ee10:jetty-ee10-apache-jsp` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty.ee10:jetty-ee10-servlet` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-session` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-util` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-io` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-security` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-jmx` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-http` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty.http2:jetty-http2-server` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-alpn-server` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-alpn-java-server` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty.ee10:jetty-ee10-annotations` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty.http2:jetty-http2-client` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-alpn-java-client` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-jndi` from 12.0.14 to 12.0.15 Updates `org.eclipse.jetty:jetty-client` from 12.0.14 to 12.0.15 --- updated-dependencies: - dependency-name: org.eclipse.jetty:jetty-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10:jetty-ee10-webapp dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.websocket:jetty-websocket-jetty-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jetty-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10:jetty-ee10-apache-jsp dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10:jetty-ee10-servlet dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-session dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-util dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-io dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-security dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-jmx dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-http dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.http2:jetty-http2-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-alpn-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-alpn-java-server dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.ee10:jetty-ee10-annotations dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty.http2:jetty-http2-client dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-alpn-java-client dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-jndi dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.eclipse.jetty:jetty-client dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index e0303a036e9..4682f186b42 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -33,7 +33,7 @@ UTF-8 3.3.5 4.1.3 - 12.0.14 + 12.0.15 4.1.114.Final 4.5.14 5.17.14 diff --git a/parent/pom.xml b/parent/pom.xml index fd0b2dfef15..cdfbad0c444 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -161,7 +161,7 @@ 1.1.1 1.0 1.5.4 - 12.0.14 + 12.0.15 ${cxf.jetty12.version} 3.3 2.10.10 From c6c68177d0434a88ba35e0d9f1423b18c956acb7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9dric=20Tabin?= Date: Thu, 7 Nov 2024 18:51:48 +0100 Subject: [PATCH 216/430] Fixes NPE if ClientImpl has been closed/destroyed before the end of invokation (#2140) * Fixes NPE if ClientImpl has been closed/destroyed before the end of the invokation * Guard setResponseContext * Fixes checkstyle --- core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java b/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java index d676da9d963..30ac1ba0b3a 100644 --- a/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java +++ b/core/src/main/java/org/apache/cxf/endpoint/ClientImpl.java @@ -543,7 +543,9 @@ public void onMessage(Message message) { Integer responseCode = (Integer)exchange.get(Message.RESPONSE_CODE); resContext.put(MessageContext.HTTP_RESPONSE_CODE, responseCode); resContext.put(org.apache.cxf.message.Message.RESPONSE_CODE, responseCode); - setResponseContext(resContext); + if (null != responseContext) { + setResponseContext(resContext); + } } if (origLoader != null) { origLoader.reset(); From 21ec58bf1e9ed621876b364d153405e44ea27a38 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 8 Nov 2024 07:37:31 -0500 Subject: [PATCH 217/430] Bump org.webjars:swagger-ui from 5.17.14 to 5.18.1 (#2141) Bumps [org.webjars:swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.17.14 to 5.18.1. - [Release notes](https://github.com/swagger-api/swagger-ui/releases) - [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc) - [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.17.14...v5.18.1) --- updated-dependencies: - dependency-name: org.webjars:swagger-ui dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 4682f186b42..85a6d354c78 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -36,7 +36,7 @@ 12.0.15 4.1.114.Final 4.5.14 - 5.17.14 + 5.18.1 3.0.0 10.1.31 4.0.3.Final diff --git a/parent/pom.xml b/parent/pom.xml index cdfbad0c444..e7233ad2480 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -218,7 +218,7 @@ 6.3.4 6.1.14 1.8.3 - 5.17.14 + 5.18.1 2.2.25 3.0.0 10.1.31 From b6d1e6978bdea139d6d093656f92979b7d6cb204 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 9 Nov 2024 09:35:48 -0500 Subject: [PATCH 218/430] CXF-9077: Add JSON-P/JSON-B providers support by default (Jakarta RESTful Web Services 3.1 spec) (#2135) --- .../demo/jaxrs/openapi/server/AppConfig.java | 2 -- .../cxf/jaxrs/provider/ProviderFactory.java | 16 ++++++++++++-- rt/rs/extensions/providers/pom.xml | 2 +- .../provider/ProviderFactoryAllTest.java | 6 +++--- .../provider/dom4j/DOM4JProviderTest.java | 19 ++++++++++++++--- .../apache/cxf/systest/jaxrs/BookServer.java | 3 +++ .../jaxrs/JAXRS31ClientServerBookTest.java | 3 --- .../jaxrs/JAXRSClientServerBookTest.java | 6 +++++- .../JAXRSClientServerProxySpringBookTest.java | 6 +++++- ...rverResourceJacksonSpringProviderTest.java | 7 +++++-- .../JAXRSClientServerSpringBookTest.java | 6 +++++- .../cxf/systest/jaxrs/JAXRSMultipartTest.java | 8 ++++--- .../cxf/systest/jaxrs/MultipartServer.java | 4 +++- ...AbstractOpenApiServiceDescriptionTest.java | 10 +++++++++ ...ContextBasedConfigApplicationOnlyTest.java | 8 +++++++ .../OpenApiContextBasedConfigTest.java | 8 +++++++ .../jaxrs/failover/AbstractFailoverTest.java | 8 +++++++ .../jaxrs/failover/LoadDistributorServer.java | 2 ++ .../jaxrs/failover/LoadDistributorTest.java | 10 ++++++++- .../LoadDistributorWebClientTest.java | 6 +++++- .../cxf/systest/jaxrs/failover/Server.java | 19 ++++++++++++++--- .../jaxrs/provider/JsrJsonbProviderTest.java | 6 +----- .../reactive/JAXRSRxJava2FlowableTest.java | 6 +++++- .../reactive/JAXRSRxJava2ObservableTest.java | 6 +++++- .../reactive/JAXRSRxJava3FlowableTest.java | 6 +++++- .../reactive/JAXRSRxJava3ObservableTest.java | 6 +++++- .../jaxrs/reactive/RxJava2FlowableServer.java | 6 ++++-- .../jaxrs/reactive/RxJava2MaybeServer.java | 5 ++++- .../reactive/RxJava2ObservableServer.java | 6 +++++- .../jaxrs/reactive/RxJava2SingleServer.java | 5 ++++- .../jaxrs/reactive/RxJava3FlowableServer.java | 5 ++++- .../jaxrs/reactor/FluxReactorTest.java | 6 +++++- .../systest/jaxrs/reactor/ReactorServer.java | 5 ++++- .../jaxrs/websocket/BookServerWebSocket.java | 4 ++++ .../test/resources/jaxrs/WEB-INF/beans.xml | 6 ++++++ .../jaxrs_jackson_provider/WEB-INF/beans.xml | 2 ++ .../resources/jaxrs_proxy/WEB-INF/beans.xml | 8 ++++++- .../jaxrs_websocket/WEB-INF/beans.xml | 6 ++++++ .../jaxrs_websocket/beans-embedded.xml | 6 ++++++ .../jaxrs_websocket/beans-embedded2.xml | 7 +++++++ systests/microprofile/client/tracing/pom.xml | 4 ++-- .../tracing/brave/BraveTracingTest.java | 4 ---- tck/cxf-tck/pom.xml | 21 +++++++++++++++++++ 43 files changed, 243 insertions(+), 52 deletions(-) diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/src/main/java/demo/jaxrs/openapi/server/AppConfig.java b/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/src/main/java/demo/jaxrs/openapi/server/AppConfig.java index 0a5fb809541..9cb3848d354 100644 --- a/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/src/main/java/demo/jaxrs/openapi/server/AppConfig.java +++ b/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/src/main/java/demo/jaxrs/openapi/server/AppConfig.java @@ -4,7 +4,6 @@ import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.microprofile.openapi.OpenApiFeature; -import org.apache.cxf.jaxrs.provider.jsrjsonb.JsrJsonbProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -29,7 +28,6 @@ org.apache.cxf.endpoint.Server server() { factory.setFeatures(Arrays.asList(openApiFeature())); factory.setServiceBean(sampleResource()); factory.setAddress("http://localhost:9000/"); - factory.setProvider(new JsrJsonbProvider()); return factory.create(); } } diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java index 5c4d17a9a0b..b9f6424a019 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ProviderFactory.java @@ -79,6 +79,9 @@ import org.apache.cxf.message.MessageUtils; public abstract class ProviderFactory { + public static final String SKIP_DEFAULT_JSON_PROVIDER_REGISTRATION = "skip.default.json.provider.registration"; + public static final String SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION = "skip.jakarta.json.providers.registration"; + public static final String DEFAULT_FILTER_NAME_BINDING = "org.apache.cxf.filter.binding"; public static final String PROVIDER_SELECTION_PROPERTY_CHANGED = "provider.selection.property.changed"; public static final String ACTIVE_JAXRS_PROVIDER_KEY = "active.jaxrs.provider"; @@ -157,6 +160,10 @@ public Object tryCreateInstance(Bus bus) { new LazyProviderClass("org.apache.cxf.jaxrs.provider.JAXBElementTypedProvider"); private static final LazyProviderClass MULTIPART_PROVIDER_CLASS = new LazyProviderClass("org.apache.cxf.jaxrs.provider.MultipartProvider"); + private static final LazyProviderClass JSONB_PROVIDER_CLASS = + new LazyProviderClass("org.apache.cxf.jaxrs.provider.jsrjsonb.JsrJsonbProvider"); + private static final LazyProviderClass JSONP_PROVIDER_CLASS = + new LazyProviderClass("org.apache.cxf.jaxrs.provider.jsrjsonp.JsrJsonpProvider"); protected Map> readerInterceptors = new NameKeyMap<>(true); @@ -216,8 +223,13 @@ protected static void initFactory(ProviderFactory factory) { JAXB_PROVIDER_CLASS.tryCreateInstance(factory.getBus()), JAXB_ELEMENT_PROVIDER_CLASS.tryCreateInstance(factory.getBus()), MULTIPART_PROVIDER_CLASS.tryCreateInstance(factory.getBus())); - Object prop = factory.getBus().getProperty("skip.default.json.provider.registration"); - if (!PropertyUtils.isTrue(prop)) { + final Object skipJakartaJsonProviders = factory.getBus().getProperty(SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION); + if (!PropertyUtils.isTrue(skipJakartaJsonProviders)) { + factory.setProviders(false, false, JSONP_PROVIDER_CLASS.tryCreateInstance(factory.getBus()), + JSONB_PROVIDER_CLASS.tryCreateInstance(factory.getBus())); + } + final Object skipDefaultJsonProvider = factory.getBus().getProperty(SKIP_DEFAULT_JSON_PROVIDER_REGISTRATION); + if (!PropertyUtils.isTrue(skipDefaultJsonProvider)) { factory.setProviders(false, false, createProvider(JSON_PROVIDER_NAME, factory.getBus())); } } diff --git a/rt/rs/extensions/providers/pom.xml b/rt/rs/extensions/providers/pom.xml index f9df2bab2a6..c1b5c452722 100644 --- a/rt/rs/extensions/providers/pom.xml +++ b/rt/rs/extensions/providers/pom.xml @@ -135,7 +135,7 @@ ${cxf.mockito.version} test - + org.eclipse.parsson parsson test diff --git a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java b/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java index cefcb2a8e34..31be7905bea 100644 --- a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java +++ b/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/ProviderFactoryAllTest.java @@ -22,7 +22,7 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.ext.MessageBodyReader; import jakarta.ws.rs.ext.MessageBodyWriter; -import org.apache.cxf.jaxrs.provider.json.JSONProvider; +import org.apache.cxf.jaxrs.provider.jsrjsonb.JsrJsonbProvider; import org.apache.cxf.jaxrs.resources.Book; import org.apache.cxf.message.MessageImpl; @@ -42,7 +42,7 @@ public void setUp() { @Test public void testCustomJsonProvider() { ProviderFactory pf = ServerProviderFactory.getInstance(); - JSONProvider provider = new JSONProvider<>(); + JsrJsonbProvider provider = new JsrJsonbProvider(); pf.registerUserProvider(provider); MessageBodyReader customJsonReader = pf.createMessageBodyReader(Book.class, null, null, MediaType.APPLICATION_JSON_TYPE, new MessageImpl()); @@ -78,7 +78,7 @@ private void verifyProvider(Class type, Class provider, String mediaType) @Test public void testGetJSONProviderConsumeMime() throws Exception { - verifyProvider(org.apache.cxf.jaxrs.resources.Book.class, JSONProvider.class, + verifyProvider(org.apache.cxf.jaxrs.resources.Book.class, JsrJsonbProvider.class, "application/json"); } diff --git a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProviderTest.java b/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProviderTest.java index f41093fdb9f..81e36bf05d5 100644 --- a/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProviderTest.java +++ b/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/dom4j/DOM4JProviderTest.java @@ -28,6 +28,8 @@ import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.ext.Providers; +import org.apache.cxf.Bus; +import org.apache.cxf.bus.extension.ExtensionManagerBus; import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.endpoint.Endpoint; import org.apache.cxf.jaxrs.impl.MetadataMap; @@ -190,7 +192,10 @@ public void testWriteJSONAsArray() throws Exception { org.dom4j.Document dom = readXML(MediaType.APPLICATION_XML_TYPE, "1"); DOM4JProvider p = new DOM4JProvider(); - ProviderFactory factory = ServerProviderFactory.getInstance(); + final Bus bus = new ExtensionManagerBus(); + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + + ProviderFactory factory = ServerProviderFactory.createInstance(bus); JSONProvider provider = new JSONProvider<>(); provider.setSerializeAsArray(true); provider.setDropRootElement(true); @@ -208,7 +213,11 @@ public void testWriteJSONAsArray() throws Exception { } private Message createMessage(boolean suppress) { - ProviderFactory factory = ServerProviderFactory.getInstance(); + final Bus bus = new ExtensionManagerBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + + ProviderFactory factory = ServerProviderFactory.createInstance(bus); Message m = new MessageImpl(); m.put("org.apache.cxf.http.case_insensitive_queries", false); Exchange e = new ExchangeImpl(); @@ -227,7 +236,11 @@ private Message createMessage(boolean suppress) { } private Message createMessageWithJSONProvider() { - ProviderFactory factory = ServerProviderFactory.getInstance(); + final Bus bus = new ExtensionManagerBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + + ProviderFactory factory = ServerProviderFactory.createInstance(bus); JSONProvider provider = new JSONProvider<>(); provider.setDropRootElement(true); provider.setIgnoreNamespaces(true); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java index 24d748ecac0..da035006c11 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookServer.java @@ -64,6 +64,7 @@ import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; import org.apache.cxf.jaxrs.provider.BinaryDataProvider; import org.apache.cxf.jaxrs.provider.JAXBElementProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.provider.StreamingResponseProvider; import org.apache.cxf.message.Message; import org.apache.cxf.phase.AbstractPhaseInterceptor; @@ -90,6 +91,8 @@ public BookServer(final Map< ? extends String, ? extends Object > properties) { @Override protected Server createServer(Bus bus) throws Exception { bus.setProperty(ExceptionMapper.class.getName(), new BusMapperExceptionMapper()); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setResourceClasses(BookStore.class, SimpleBookStore.class, BookStorePerRequest.class, BookStoreRegex.class); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS31ClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS31ClientServerBookTest.java index bf1d6aefcde..3c7dc735d1d 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS31ClientServerBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS31ClientServerBookTest.java @@ -46,7 +46,6 @@ import org.apache.cxf.Bus; import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; -import org.apache.cxf.jaxrs.provider.jsrjsonb.JsrJsonbProvider; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; @@ -74,7 +73,6 @@ public final void shouldUseApplicationProvidedJsonbInstance() throws URISyntaxEx final String origin = String.format("Origin(%d)", ThreadLocalRandom.current().nextInt(1000)); try (Client client = ClientBuilder .newBuilder() - .register(new JsrJsonbProvider()) .register(new CustomJsonbProvider(CLIENT)) .build()) { @@ -110,7 +108,6 @@ public static final class BookServer31 extends AbstractServerTestServerBase { protected Server createServer(Bus bus) throws Exception { JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setResourceClasses(BookStoreResource.class); - sf.setProvider(new JsrJsonbProvider()); sf.setProvider(new CustomJsonbProvider(SERVER)); sf.setAddress("http://localhost:" + PORT + "/"); return sf.create(); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java index a5f6c141db9..5a6f4c818f6 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerBookTest.java @@ -65,6 +65,7 @@ import jakarta.ws.rs.ext.ReaderInterceptor; import jakarta.xml.bind.JAXBElement; import org.apache.commons.lang3.StringUtils; +import org.apache.cxf.Bus; import org.apache.cxf.ext.logging.LoggingFeature; import org.apache.cxf.ext.logging.LoggingInInterceptor; import org.apache.cxf.helpers.IOUtils; @@ -75,6 +76,7 @@ import org.apache.cxf.jaxrs.ext.xml.XMLSource; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; import org.apache.cxf.jaxrs.provider.JAXBElementProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.provider.XSLTJaxbProvider; import org.apache.cxf.message.Message; import org.apache.cxf.systest.jaxrs.BookStore.BookInfo; @@ -118,7 +120,9 @@ public class JAXRSClientServerBookTest extends AbstractBusClientServerTestBase { public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); assertTrue("server did not launch correctly", launchServer(BookServer.class, true)); - createStaticBus(); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerProxySpringBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerProxySpringBookTest.java index ecea1795488..f057391ec00 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerProxySpringBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerProxySpringBookTest.java @@ -32,11 +32,13 @@ import org.w3c.dom.Element; import jakarta.ws.rs.core.Response; +import org.apache.cxf.Bus; import org.apache.cxf.helpers.DOMUtils; import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; import org.apache.cxf.jaxrs.model.wadl.WadlGenerator; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.staxutils.StaxUtils; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -55,7 +57,9 @@ public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); assertTrue("server did not launch correctly", launchServer(BookServerProxySpring.class, true)); - createStaticBus(); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceJacksonSpringProviderTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceJacksonSpringProviderTest.java index 69906a28240..70c0903b58e 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceJacksonSpringProviderTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerResourceJacksonSpringProviderTest.java @@ -38,6 +38,7 @@ import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; import org.apache.cxf.jaxrs.provider.JAXBElementProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; import org.junit.AfterClass; @@ -58,11 +59,13 @@ public static void startServers() throws Exception { assertTrue("server did not launch correctly", launchServer(BookServerResourceJacksonSpringProviders.class, true)); createStaticBus(); - BusFactory.getDefaultBus().setProperty("skip.default.json.provider.registration", true); + BusFactory.getDefaultBus().setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + BusFactory.getDefaultBus().setProperty(ProviderFactory.SKIP_DEFAULT_JSON_PROVIDER_REGISTRATION, true); } @AfterClass public static void afterClass() throws Exception { - BusFactory.getDefaultBus().getProperties().remove("skip.default.json.provider.registration"); + BusFactory.getDefaultBus().getProperties().remove(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION); + BusFactory.getDefaultBus().getProperties().remove(ProviderFactory.SKIP_DEFAULT_JSON_PROVIDER_REGISTRATION); } @Test diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java index 4903aac9383..4a609d41237 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java @@ -45,6 +45,7 @@ import jakarta.ws.rs.ext.ParamConverterProvider; import jakarta.xml.bind.annotation.XmlElement; import jakarta.xml.bind.annotation.XmlRootElement; +import org.apache.cxf.Bus; import org.apache.cxf.helpers.DOMUtils; import org.apache.cxf.helpers.IOUtils; import org.apache.cxf.jaxrs.client.JAXRSClientFactory; @@ -53,6 +54,7 @@ import org.apache.cxf.jaxrs.model.AbstractResourceInfo; import org.apache.cxf.jaxrs.model.wadl.WadlGenerator; import org.apache.cxf.jaxrs.provider.JAXBElementProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.provider.aegis.AegisElementProvider; import org.apache.cxf.staxutils.StaxUtils; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -84,7 +86,9 @@ public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); assertTrue("server did not launch correctly", launchServer(BookServerSpring.class, true)); - createStaticBus(); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java index 398a4f23324..061f4a129bb 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java @@ -37,8 +37,6 @@ import javax.imageio.ImageIO; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import jakarta.activation.DataHandler; import jakarta.mail.util.ByteArrayDataSource; import jakarta.ws.rs.client.ClientBuilder; @@ -50,6 +48,7 @@ import jakarta.ws.rs.core.Response; import jakarta.xml.bind.JAXBContext; import jakarta.xml.bind.Unmarshaller; +import org.apache.cxf.Bus; import org.apache.cxf.ext.logging.LoggingInInterceptor; import org.apache.cxf.ext.logging.LoggingOutInterceptor; import org.apache.cxf.helpers.FileUtils; @@ -63,6 +62,7 @@ import org.apache.cxf.jaxrs.ext.multipart.InputStreamDataSource; import org.apache.cxf.jaxrs.ext.multipart.MultipartBody; import org.apache.cxf.jaxrs.impl.MetadataMap; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.provider.json.JSONProvider; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; import org.apache.cxf.transport.http.HTTPConduit; @@ -96,6 +96,9 @@ public class JAXRSMultipartTest extends AbstractBusClientServerTestBase { public static void startServers() throws Exception { assertTrue("server did not launch correctly", launchServer(MultipartServer.class, true)); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test @@ -1106,7 +1109,6 @@ public void testLargerThanDefaultHeader() throws Exception { public void testUpdateBookMultipart() { final WebTarget target = ClientBuilder .newClient() - .register(JacksonJsonProvider.class) .target("http://localhost:" + PORT + "/bookstore"); final MultipartBody builder = new MultipartBody(Arrays.asList( diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartServer.java index 1c9678d0323..c883c26541a 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartServer.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartServer.java @@ -27,14 +27,16 @@ import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; - public class MultipartServer extends AbstractServerTestServerBase { public static final String PORT = allocatePort(MultipartServer.class); @Override protected Server createServer(Bus bus) throws Exception { + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setResourceClasses(MultipartStore.class); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/AbstractOpenApiServiceDescriptionTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/AbstractOpenApiServiceDescriptionTest.java index 38d8b4cd6c5..b7ee757e1e4 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/AbstractOpenApiServiceDescriptionTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/AbstractOpenApiServiceDescriptionTest.java @@ -29,6 +29,7 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; import org.apache.cxf.ext.logging.LoggingFeature; import org.apache.cxf.feature.Feature; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; @@ -42,6 +43,7 @@ import org.apache.cxf.jaxrs.model.UserResource; import org.apache.cxf.jaxrs.openapi.OpenApiFeature; import org.apache.cxf.jaxrs.openapi.parse.OpenApiParseUtils; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.testutil.common.AbstractClientServerTestBase; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; import org.hamcrest.CoreMatchers; @@ -78,6 +80,9 @@ public abstract static class Server extends AbstractServerTestServerBase { @Override protected org.apache.cxf.endpoint.Server createServer(Bus bus) throws Exception { + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + final JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setResourceClasses(BookStoreOpenApi.class); sf.setResourceClasses(BookStoreStylesheetsOpenApi.class); @@ -87,6 +92,7 @@ protected org.apache.cxf.endpoint.Server createServer(Bus bus) throws Exception final OpenApiFeature feature = createOpenApiFeature(); sf.setFeatures(Arrays.asList(feature)); sf.setAddress("http://localhost:" + port + "/"); + sf.setBus(bus); return sf.create(); } @@ -110,6 +116,10 @@ protected static void startServers(final Class< ? extends Server> serverClass) t AbstractResourceInfo.clearAllMaps(); //keep out of process due to stack traces testing failures assertTrue("server did not launch correctly", launchServer(serverClass, false)); + + final Bus bus = BusFactory.getThreadDefaultBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } protected abstract String getPort(); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/OpenApiContextBasedConfigApplicationOnlyTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/OpenApiContextBasedConfigApplicationOnlyTest.java index e2c5b8f4855..0f23beb21ae 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/OpenApiContextBasedConfigApplicationOnlyTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/OpenApiContextBasedConfigApplicationOnlyTest.java @@ -27,6 +27,7 @@ import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.MediaType; import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; import org.apache.cxf.endpoint.Server; import org.apache.cxf.ext.logging.LoggingFeature; import org.apache.cxf.feature.Feature; @@ -37,6 +38,7 @@ import org.apache.cxf.jaxrs.openapi.OpenApiCustomizer; import org.apache.cxf.jaxrs.openapi.OpenApiFeature; import org.apache.cxf.jaxrs.openapi.parse.OpenApiParseUtils; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.systest.jaxrs.description.group2.BookStore; import org.apache.cxf.testutil.common.AbstractClientServerTestBase; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; @@ -58,6 +60,8 @@ public class OpenApiContextBasedConfigApplicationOnlyTest extends AbstractClient public static class OpenApiContextBased extends AbstractServerTestServerBase { @Override protected Server createServer(Bus bus) throws Exception { + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); createServerFactory("/api", "This is first API (api)", BookStoreOpenApi.class); return createServerFactory("/api2", "This is second API (api2)", BookStore.class); } @@ -101,6 +105,10 @@ public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); //keep out of process due to stack traces testing failures assertTrue("server did not launch correctly", launchServer(OpenApiContextBased.class, false)); + + final Bus bus = BusFactory.getThreadDefaultBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/OpenApiContextBasedConfigTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/OpenApiContextBasedConfigTest.java index 2c0c4baf12a..fb4e95a504c 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/OpenApiContextBasedConfigTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/description/openapi/OpenApiContextBasedConfigTest.java @@ -25,6 +25,7 @@ import jakarta.ws.rs.core.MediaType; import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; import org.apache.cxf.endpoint.Server; import org.apache.cxf.ext.logging.LoggingFeature; import org.apache.cxf.feature.Feature; @@ -35,6 +36,7 @@ import org.apache.cxf.jaxrs.openapi.OpenApiCustomizer; import org.apache.cxf.jaxrs.openapi.OpenApiFeature; import org.apache.cxf.jaxrs.openapi.parse.OpenApiParseUtils; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.systest.jaxrs.description.group2.BookStore; import org.apache.cxf.testutil.common.AbstractClientServerTestBase; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; @@ -54,6 +56,8 @@ public class OpenApiContextBasedConfigTest extends AbstractClientServerTestBase public static class OpenApiContextBased extends AbstractServerTestServerBase { @Override protected Server createServer(Bus bus) throws Exception { + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); createServerFactory("/api", "This is first API (api)", BookStoreOpenApi.class); return createServerFactory("/api2", "This is second API (api2)", BookStore.class); } @@ -91,6 +95,10 @@ public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); //keep out of process due to stack traces testing failures assertTrue("server did not launch correctly", launchServer(OpenApiContextBased.class, false)); + + final Bus bus = BusFactory.getThreadDefaultBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/AbstractFailoverTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/AbstractFailoverTest.java index 1fd0693954b..b2045f01729 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/AbstractFailoverTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/AbstractFailoverTest.java @@ -27,6 +27,8 @@ import jakarta.ws.rs.InternalServerErrorException; import jakarta.ws.rs.ProcessingException; import jakarta.ws.rs.core.Response; +import org.apache.cxf.Bus; +import org.apache.cxf.bus.extension.ExtensionManagerBus; import org.apache.cxf.clustering.FailoverFeature; import org.apache.cxf.clustering.FailoverTargetSelector; import org.apache.cxf.clustering.RandomStrategy; @@ -35,6 +37,7 @@ import org.apache.cxf.endpoint.ConduitSelector; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.systest.jaxrs.Book; import org.apache.cxf.systest.jaxrs.BookStore; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -206,9 +209,14 @@ protected WebClient getWebClient(String address, private static JAXRSClientFactoryBean createBean(String address, FailoverFeature feature) { + final Bus bus = new ExtensionManagerBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); bean.setAddress(address); bean.setFeatures(Arrays.asList(feature)); + bean.setBus(bus); return bean; } diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorServer.java index 99a74360c3b..fa5a134ebd3 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorServer.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorServer.java @@ -24,12 +24,14 @@ import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; import org.apache.cxf.bus.spring.SpringBusFactory; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.testutil.common.AbstractBusTestServerBase; public class LoadDistributorServer extends AbstractBusTestServerBase { protected void run() { URL busFile = Server.class.getResource("cxf-lb-service.xml"); Bus busLocal = new SpringBusFactory().createBus(busFile); + busLocal.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); BusFactory.setDefaultBus(busLocal); setBus(busLocal); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorTest.java index 5d314e9428e..cb83f476e29 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorTest.java @@ -23,6 +23,8 @@ import java.util.List; import jakarta.ws.rs.core.Response; +import org.apache.cxf.Bus; +import org.apache.cxf.bus.extension.ExtensionManagerBus; import org.apache.cxf.clustering.FailoverFeature; import org.apache.cxf.clustering.FailoverTargetSelector; import org.apache.cxf.clustering.LoadDistributorFeature; @@ -32,6 +34,7 @@ import org.apache.cxf.feature.AbstractFeature; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.systest.jaxrs.Book; import org.apache.cxf.systest.jaxrs.BookStore; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -128,12 +131,17 @@ protected BookStore getBookStore(String address, protected JAXRSClientFactoryBean createBean(String address, FailoverFeature feature) { + final Bus bus = new ExtensionManagerBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); bean.setAddress(address); List features = new ArrayList<>(); features.add(feature); bean.setFeatures(features); - + bean.setBus(bus); + return bean; } diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorWebClientTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorWebClientTest.java index 74f69011b37..e5b053d2b71 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorWebClientTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/LoadDistributorWebClientTest.java @@ -24,10 +24,12 @@ import java.util.Collections; import java.util.List; +import org.apache.cxf.Bus; import org.apache.cxf.clustering.LoadDistributorFeature; import org.apache.cxf.clustering.SequentialStrategy; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.systest.jaxrs.Book; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -50,7 +52,9 @@ public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); assertTrue("server did not launch correctly", launchServer(LoadDistributorServer.class, true)); - createStaticBus(); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/Server.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/Server.java index c2c6073f8ed..306d40ab7b8 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/Server.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/Server.java @@ -23,8 +23,11 @@ import java.util.ArrayList; import java.util.List; +import org.apache.cxf.Bus; +import org.apache.cxf.bus.extension.ExtensionManagerBus; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.systest.jaxrs.BookStore; import org.apache.cxf.testutil.common.AbstractBusTestServerBase; @@ -41,8 +44,17 @@ public class Server extends AbstractBusTestServerBase { List servers = new ArrayList<>(); protected void run() { - createEndpoint(ADDRESS2); - createEndpoint(ADDRESS3); + Bus bus = getBus(); + + if (bus == null) { + bus = new ExtensionManagerBus(); + } + + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + + createEndpoint(ADDRESS2, bus); + createEndpoint(ADDRESS3, bus); } public void tearDown() throws Exception { for (org.apache.cxf.endpoint.Server s : servers) { @@ -52,11 +64,12 @@ public void tearDown() throws Exception { servers.clear(); } - private void createEndpoint(String address) { + private void createEndpoint(String address, Bus bus) { JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setResourceClasses(BookStore.class); sf.setResourceProvider(BookStore.class, new SingletonResourceProvider(new BookStore(), false)); sf.setAddress(address); + sf.setBus(bus); servers.add(sf.create()); } diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/provider/JsrJsonbProviderTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/provider/JsrJsonbProviderTest.java index 00a096f40c6..8fc7746911e 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/provider/JsrJsonbProviderTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/provider/JsrJsonbProviderTest.java @@ -19,7 +19,6 @@ package org.apache.cxf.systest.jaxrs.provider; -import java.util.Arrays; import jakarta.json.Json; import jakarta.json.JsonArray; @@ -32,7 +31,6 @@ import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; -import org.apache.cxf.jaxrs.provider.jsrjsonb.JsrJsonbProvider; import org.apache.cxf.testutil.common.AbstractClientServerTestBase; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; @@ -60,7 +58,6 @@ protected org.apache.cxf.endpoint.Server createServer(Bus bus) throws Exception new SingletonResourceProvider(new BookJsonStore())); sf.setResourceProvider(BookJsonStore2.class, new SingletonResourceProvider(new BookJsonStore2())); - sf.setProvider(new JsrJsonbProvider()); sf.setAddress("http://localhost:" + PORT + "/"); return sf.create(); } @@ -241,8 +238,7 @@ public void testGetBook() { private static WebClient createWebClient(final String url) { return WebClient - .create("http://localhost:" + PORT + url, - Arrays.< Object >asList(new JsrJsonbProvider())) + .create("http://localhost:" + PORT + url) .accept(MediaType.APPLICATION_JSON); } diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava2FlowableTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava2FlowableTest.java index f2926ea8991..ac5a8d704b7 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava2FlowableTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava2FlowableTest.java @@ -33,8 +33,10 @@ import jakarta.ws.rs.core.GenericType; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; +import org.apache.cxf.Bus; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.rx2.client.FlowableRxInvoker; import org.apache.cxf.jaxrs.rx2.client.FlowableRxInvokerProvider; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -55,7 +57,9 @@ public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); assertTrue("server did not launch correctly", launchServer(RxJava2FlowableServer.class, true)); - createStaticBus(); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test public void testGetHelloWorldAsyncText() throws Exception { diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava2ObservableTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava2ObservableTest.java index f7635bdc3e2..18955bd3394 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava2ObservableTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava2ObservableTest.java @@ -32,8 +32,10 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.xml.ws.Holder; +import org.apache.cxf.Bus; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.rx2.client.ObservableRxInvoker; import org.apache.cxf.jaxrs.rx2.client.ObservableRxInvokerProvider; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -55,7 +57,9 @@ public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); assertTrue("server did not launch correctly", launchServer(RxJava2ObservableServer.class, true)); - createStaticBus(); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test public void testGetHelloWorldText() throws Exception { diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava3FlowableTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava3FlowableTest.java index 229e251abfc..15a89dc7742 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava3FlowableTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava3FlowableTest.java @@ -33,8 +33,10 @@ import jakarta.ws.rs.core.GenericType; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; +import org.apache.cxf.Bus; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.rx3.client.FlowableRxInvoker; import org.apache.cxf.jaxrs.rx3.client.FlowableRxInvokerProvider; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -55,7 +57,9 @@ public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); assertTrue("server did not launch correctly", launchServer(RxJava3FlowableServer.class, true)); - createStaticBus(); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test public void testGetHelloWorldAsyncText() throws Exception { diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava3ObservableTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava3ObservableTest.java index b9f094c1619..b826cdc1dda 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava3ObservableTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/JAXRSRxJava3ObservableTest.java @@ -32,8 +32,10 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.Response; import jakarta.xml.ws.Holder; +import org.apache.cxf.Bus; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.rx3.client.ObservableRxInvoker; import org.apache.cxf.jaxrs.rx3.client.ObservableRxInvokerProvider; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -55,7 +57,9 @@ public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); assertTrue("server did not launch correctly", launchServer(RxJava3ObservableServer.class, true)); - createStaticBus(); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test public void testGetHelloWorldText() throws Exception { diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2FlowableServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2FlowableServer.java index 73aa4275d40..d0d9365055e 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2FlowableServer.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2FlowableServer.java @@ -26,6 +26,7 @@ import org.apache.cxf.ext.logging.LoggingOutInterceptor; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.rx2.server.ReactiveIOCustomizer; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; @@ -35,8 +36,9 @@ public class RxJava2FlowableServer extends AbstractServerTestServerBase { @Override protected Server createServer(Bus bus) throws Exception { - // Make sure default JSONProvider is not loaded - bus.setProperty("skip.default.json.provider.registration", true); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + createFactoryBean(false, "/rx2").create(); return createFactoryBean(true, "/rx22").create(); } diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2MaybeServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2MaybeServer.java index 9303e5eca0a..a9522780501 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2MaybeServer.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2MaybeServer.java @@ -26,6 +26,7 @@ import org.apache.cxf.ext.logging.LoggingOutInterceptor; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.rx2.server.ReactiveIOCustomizer; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; @@ -35,8 +36,10 @@ public class RxJava2MaybeServer extends AbstractServerTestServerBase { @Override protected Server createServer(Bus bus) throws Exception { + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); // Make sure default JSONProvider is not loaded - bus.setProperty("skip.default.json.provider.registration", true); + bus.setProperty(ProviderFactory.SKIP_DEFAULT_JSON_PROVIDER_REGISTRATION, true); JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setProvider(new JacksonJsonProvider()); new ReactiveIOCustomizer().customize(sf); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2ObservableServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2ObservableServer.java index 18562cdf674..702da0ecee3 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2ObservableServer.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2ObservableServer.java @@ -26,6 +26,7 @@ import org.apache.cxf.ext.logging.LoggingOutInterceptor; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.rx2.server.ReactiveIOCustomizer; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; @@ -35,7 +36,10 @@ public class RxJava2ObservableServer extends AbstractServerTestServerBase { @Override protected Server createServer(Bus bus) throws Exception { - bus.setProperty("skip.default.json.provider.registration", true); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + // Make sure default JSONProvider is not loaded + bus.setProperty(ProviderFactory.SKIP_DEFAULT_JSON_PROVIDER_REGISTRATION, true); JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setProvider(new JacksonJsonProvider()); sf.setProvider(new IllegalStateExceptionMapper()); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2SingleServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2SingleServer.java index e9f5d2b26b3..54e314646ac 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2SingleServer.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava2SingleServer.java @@ -26,6 +26,7 @@ import org.apache.cxf.ext.logging.LoggingOutInterceptor; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.rx2.server.ReactiveIOCustomizer; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; @@ -35,8 +36,10 @@ public class RxJava2SingleServer extends AbstractServerTestServerBase { @Override protected Server createServer(Bus bus) throws Exception { + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); // Make sure default JSONProvider is not loaded - bus.setProperty("skip.default.json.provider.registration", true); + bus.setProperty(ProviderFactory.SKIP_DEFAULT_JSON_PROVIDER_REGISTRATION, true); JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setProvider(new JacksonJsonProvider()); new ReactiveIOCustomizer().customize(sf); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava3FlowableServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava3FlowableServer.java index 1e798436b70..ffecf78f3ab 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava3FlowableServer.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactive/RxJava3FlowableServer.java @@ -26,6 +26,7 @@ import org.apache.cxf.ext.logging.LoggingOutInterceptor; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.rx3.server.ReactiveIOCustomizer; import org.apache.cxf.testutil.common.AbstractServerTestServerBase; @@ -35,8 +36,10 @@ public class RxJava3FlowableServer extends AbstractServerTestServerBase { @Override protected Server createServer(Bus bus) throws Exception { + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); // Make sure default JSONProvider is not loaded - bus.setProperty("skip.default.json.provider.registration", true); + bus.setProperty(ProviderFactory.SKIP_DEFAULT_JSON_PROVIDER_REGISTRATION, true); createFactoryBean(false, "/rx3").create(); return createFactoryBean(true, "/rx33").create(); } diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactor/FluxReactorTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactor/FluxReactorTest.java index ad20415d19d..f7dd6e1203a 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactor/FluxReactorTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactor/FluxReactorTest.java @@ -26,7 +26,9 @@ import jakarta.ws.rs.client.ClientBuilder; import jakarta.ws.rs.core.GenericType; import jakarta.ws.rs.core.MediaType; +import org.apache.cxf.Bus; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.reactor.client.ReactorInvoker; import org.apache.cxf.jaxrs.reactor.client.ReactorInvokerProvider; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; @@ -43,7 +45,9 @@ public class FluxReactorTest extends AbstractBusClientServerTestBase { public static void startServers() throws Exception { AbstractResourceInfo.clearAllMaps(); assertTrue("server did not launch correctly", launchServer(ReactorServer.class, true)); - createStaticBus(); + final Bus bus = createStaticBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); } @Test diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactor/ReactorServer.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactor/ReactorServer.java index 8fbf406449b..3bdf6e13c31 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactor/ReactorServer.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/reactor/ReactorServer.java @@ -25,6 +25,7 @@ import org.apache.cxf.BusFactory; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.reactor.server.ReactorCustomizer; import org.apache.cxf.testutil.common.AbstractBusTestServerBase; @@ -37,8 +38,10 @@ public class ReactorServer extends AbstractBusTestServerBase { @Override protected void run() { Bus bus = BusFactory.getDefaultBus(); + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); // Make sure default JSONProvider is not loaded - bus.setProperty("skip.default.json.provider.registration", true); + bus.setProperty(ProviderFactory.SKIP_DEFAULT_JSON_PROVIDER_REGISTRATION, true); JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.getProperties(true).put("useStreamingSubscriber", false); sf.setProvider(new JacksonJsonProvider()); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/websocket/BookServerWebSocket.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/websocket/BookServerWebSocket.java index 3f26f8b0cc3..cedc8522acb 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/websocket/BookServerWebSocket.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/websocket/BookServerWebSocket.java @@ -23,6 +23,7 @@ import org.apache.cxf.endpoint.Server; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.ProviderFactory; import org.apache.cxf.jaxrs.provider.StreamingResponseProvider; import org.apache.cxf.systest.jaxrs.Book; import org.apache.cxf.systest.jaxrs.BookStorePerRequest; @@ -48,6 +49,9 @@ public BookServerWebSocket(String port) { @Override protected Server createServer(Bus bus) throws Exception { + // Make sure default JSON-P/JSON-B providers are not loaded + bus.setProperty(ProviderFactory.SKIP_JAKARTA_JSON_PROVIDERS_REGISTRATION, true); + JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); sf.setResourceClasses(BookStoreWebSocket.class, BookStorePerRequest.class); sf.setProvider(new StreamingResponseProvider()); diff --git a/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml b/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml index c39ac771753..259fa7ce2c4 100644 --- a/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml +++ b/systests/jaxrs/src/test/resources/jaxrs/WEB-INF/beans.xml @@ -140,6 +140,7 @@ + @@ -226,6 +227,11 @@ + + + + + diff --git a/systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/beans.xml b/systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/beans.xml index 52214292fe4..04e1489cef6 100644 --- a/systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/beans.xml +++ b/systests/jaxrs/src/test/resources/jaxrs_jackson_provider/WEB-INF/beans.xml @@ -51,11 +51,13 @@ http://cxf.apache.org/schemas/jaxrs.xsd"> + + diff --git a/systests/jaxrs/src/test/resources/jaxrs_proxy/WEB-INF/beans.xml b/systests/jaxrs/src/test/resources/jaxrs_proxy/WEB-INF/beans.xml index 68424f9a020..22f237fcaf8 100644 --- a/systests/jaxrs/src/test/resources/jaxrs_proxy/WEB-INF/beans.xml +++ b/systests/jaxrs/src/test/resources/jaxrs_proxy/WEB-INF/beans.xml @@ -28,9 +28,15 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:aop="http://www.springframework.org/schema/aop" - xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd"> + xmlns:cxf="http://cxf.apache.org/core" + xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd"> + + + + + diff --git a/systests/jaxrs/src/test/resources/jaxrs_websocket/WEB-INF/beans.xml b/systests/jaxrs/src/test/resources/jaxrs_websocket/WEB-INF/beans.xml index 63a9ca49dd8..7f00f8f3025 100644 --- a/systests/jaxrs/src/test/resources/jaxrs_websocket/WEB-INF/beans.xml +++ b/systests/jaxrs/src/test/resources/jaxrs_websocket/WEB-INF/beans.xml @@ -36,6 +36,12 @@ + + + + + + diff --git a/systests/jaxrs/src/test/resources/jaxrs_websocket/beans-embedded.xml b/systests/jaxrs/src/test/resources/jaxrs_websocket/beans-embedded.xml index 3a8d02b0fce..efbb60f162a 100644 --- a/systests/jaxrs/src/test/resources/jaxrs_websocket/beans-embedded.xml +++ b/systests/jaxrs/src/test/resources/jaxrs_websocket/beans-embedded.xml @@ -35,6 +35,12 @@ + + + + + + diff --git a/systests/jaxrs/src/test/resources/jaxrs_websocket/beans-embedded2.xml b/systests/jaxrs/src/test/resources/jaxrs_websocket/beans-embedded2.xml index aa427d5c80a..d91dc785f50 100644 --- a/systests/jaxrs/src/test/resources/jaxrs_websocket/beans-embedded2.xml +++ b/systests/jaxrs/src/test/resources/jaxrs_websocket/beans-embedded2.xml @@ -36,12 +36,19 @@ + + + + + + + diff --git a/systests/microprofile/client/tracing/pom.xml b/systests/microprofile/client/tracing/pom.xml index a2152cf1f18..0e2f0feca64 100644 --- a/systests/microprofile/client/tracing/pom.xml +++ b/systests/microprofile/client/tracing/pom.xml @@ -115,8 +115,8 @@ test - com.fasterxml.jackson.jakarta.rs - jackson-jakarta-rs-json-provider + org.eclipse + yasson test diff --git a/systests/microprofile/client/tracing/src/test/java/org/apache/cxf/systest/microprofile/rest/client/tracing/brave/BraveTracingTest.java b/systests/microprofile/client/tracing/src/test/java/org/apache/cxf/systest/microprofile/rest/client/tracing/brave/BraveTracingTest.java index 408f07543a3..aa3026dd5a7 100644 --- a/systests/microprofile/client/tracing/src/test/java/org/apache/cxf/systest/microprofile/rest/client/tracing/brave/BraveTracingTest.java +++ b/systests/microprofile/client/tracing/src/test/java/org/apache/cxf/systest/microprofile/rest/client/tracing/brave/BraveTracingTest.java @@ -20,8 +20,6 @@ import java.net.URI; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import brave.ScopedSpan; import brave.Tracing; import brave.sampler.Sampler; @@ -67,7 +65,6 @@ protected org.apache.cxf.endpoint.Server createServer(Bus bus) throws Exception sf.setResourceClasses(BookStore.class); sf.setResourceProvider(BookStore.class, new SingletonResourceProvider(new BookStore())); sf.setAddress("http://localhost:" + PORT); - sf.setProvider(new JacksonJsonProvider()); sf.setProvider(new BraveFeature(brave)); return sf.create(); } @@ -183,7 +180,6 @@ private BookRestClient createRestClient() { private RestClientBuilder createRestClientBuilder() { return RestClientBuilder.newBuilder() .baseUri(URI.create("http://localhost:" + PORT)) - .register(JacksonJsonProvider.class) .register(braveClientProvider); } } diff --git a/tck/cxf-tck/pom.xml b/tck/cxf-tck/pom.xml index 3d5d76e2598..2aa373a740a 100644 --- a/tck/cxf-tck/pom.xml +++ b/tck/cxf-tck/pom.xml @@ -173,6 +173,19 @@ test + + org.apache.cxf + cxf-rt-rs-extension-providers + test + + + + org.eclipse + yasson + 3.0.4 + test + + org.netbeans.tools sigtest-maven-plugin @@ -274,6 +287,14 @@ true ${glassfish.home}/glassfish/lib + + org.apache.cxf + cxf-rt-rs-extension-providers + ${cxf.version} + jar + true + ${glassfish.home}/glassfish/lib + jakarta.ws.rs jakarta.ws.rs-api From 873ac7bc652a9ed42b14ac624d4dbcaa1758423a Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 9 Nov 2024 12:26:47 -0500 Subject: [PATCH 219/430] Fix Jakarta REST TCK configuration related to SSE initialization (Jersey instead of Apache CXF) --- tck/cxf-tck/pom.xml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tck/cxf-tck/pom.xml b/tck/cxf-tck/pom.xml index 2aa373a740a..80abc201c8b 100644 --- a/tck/cxf-tck/pom.xml +++ b/tck/cxf-tck/pom.xml @@ -372,6 +372,21 @@ + + UpdateJerseySseManifests + pre-integration-test + + exec + + + zip + + -d + ${project.build.directory}/glassfish7/glassfish/modules/jersey-media-sse.jar + META-INF/services/jakarta.ws.rs.sse.SseEventSource$Builder + + + StartDomain1 pre-integration-test From 74ff2953eadd2eca74f9139038277a0b55385168 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 9 Nov 2024 14:56:40 -0500 Subject: [PATCH 220/430] Fix Jakarta REST TCK build (skip tests for rest-tck and use JDK-17) --- tck/Jenkinsfile | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/tck/Jenkinsfile b/tck/Jenkinsfile index 32a8659008f..9d1e63ffd51 100644 --- a/tck/Jenkinsfile +++ b/tck/Jenkinsfile @@ -4,8 +4,8 @@ pipeline { } tools { - maven 'maven_3.6.3' - jdk 'jdk_11_latest' + maven 'maven_latest' + jdk 'jdk_17_latest' } stages { @@ -47,7 +47,7 @@ pipeline { stage('Build JAX-RS TCK') { steps { echo "Using Apache CXF version: " + params.Version - sh "mvn clean install -f rest" + sh "mvn clean install -f rest -DskipTests=true" } } @@ -62,10 +62,6 @@ pipeline { } stage('Run JAX-RS TCK') { - tools { - jdk 'jdk_17_latest' - } - steps { dir("${WORKSPACE}/cxf/tck/cxf-tck") { sh "mvn clean verify -Dcxf.version=${params.Version}" From 705978657e2dcf7aef61c1aab0a7f1108dee2980 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 10 Nov 2024 11:59:44 -0500 Subject: [PATCH 221/430] CXF-9076: Exception message is not unmarshalled with JDK17+ (#2137) --- .../cxf/interceptor/ClientFaultConverter.java | 25 +++++++-- .../jaxws/ClientServerExceptionServer.java | 55 +++++++++++++++++++ .../jaxws/ClientServerExceptionTest.java | 54 ++++++++++++++++++ .../cxf/systest/jaxws/ExceptionService.java | 27 +++++++++ 4 files changed, 157 insertions(+), 4 deletions(-) create mode 100644 systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionServer.java create mode 100644 systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionTest.java create mode 100644 systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ExceptionService.java diff --git a/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java b/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java index e6b9f977054..c2c1f9c3655 100644 --- a/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java +++ b/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java @@ -191,17 +191,34 @@ protected void processFaultDetail(Fault fault, Message msg) { LogUtils.log(LOG, Level.INFO, "EXCEPTION_WHILE_CREATING_EXCEPTION", e1, e1.getMessage()); } } else { - if (fault.getMessage() != null) { + Exception ex = (Exception)e; + final String message = fault.getMessage(); + if (message != null) { Field f; try { f = Throwable.class.getDeclaredField("detailMessage"); ReflectionUtil.setAccessible(f); - f.set(e, fault.getMessage()); + f.set(ex, fault.getMessage()); } catch (Exception e1) { - //ignore + try { + // Fallback, try to clone the exception instead of accessing the detailMessage over reflection + final Constructor constructor = ReflectionUtil.getConstructor(ex.getClass(), + String.class, Throwable.class); /* String message, Throwable cause */ + + if (constructor != null) { + final Exception clone = (Exception) constructor.newInstance(message, ex.getCause()); + clone.setStackTrace(ex.getStackTrace()); + if (ex.getSuppressed().length > 0) { + Arrays.stream(ex.getSuppressed()).forEach(clone::addSuppressed); + } + ex = clone; + } + } catch (Exception e2) { + /* nothing to do */ + } } } - msg.setContent(Exception.class, e); + msg.setContent(Exception.class, ex); } } diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionServer.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionServer.java new file mode 100644 index 00000000000..06ad7e98f07 --- /dev/null +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionServer.java @@ -0,0 +1,55 @@ +/** + * 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.cxf.systest.jaxws; + +import jakarta.jws.WebService; +import jakarta.xml.ws.Endpoint; +import org.apache.cxf.testutil.common.AbstractBusTestServerBase; + +public class ClientServerExceptionServer extends AbstractBusTestServerBase { + static final String PORT = allocatePort(ClientServerExceptionServer.class); + + @WebService(endpointInterface = "org.apache.cxf.systest.jaxws.ExceptionService", + serviceName = "ExceptionService", targetNamespace = "http://cxf.apache.org/") + static class ExceptionServiceImpl implements ExceptionService { + @Override + public String saySomething(String text) throws IllegalArgumentException { + throw new IllegalArgumentException("Simulated!"); + } + } + + protected void run() { + Object implementor = new ExceptionServiceImpl(); + String address = "http://localhost:" + PORT + "/ExceptionService"; + Endpoint.publish(address, implementor); + } + + public static void main(String[] args) { + try { + ClientServerExceptionServer s = new ClientServerExceptionServer(); + s.start(); + } catch (Exception ex) { + ex.printStackTrace(); + System.exit(-1); + } finally { + System.out.println("done!"); + } + } +} diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionTest.java new file mode 100644 index 00000000000..2e744890260 --- /dev/null +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionTest.java @@ -0,0 +1,54 @@ +/** + * 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.cxf.systest.jaxws; + +import java.net.MalformedURLException; +import java.net.URL; + +import javax.xml.namespace.QName; + +import jakarta.xml.ws.Service; +import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; + +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +public class ClientServerExceptionTest extends AbstractBusClientServerTestBase { + @BeforeClass + public static void startServers() throws Exception { + assertTrue("server did not launch correctly", launchServer(ClientServerExceptionServer.class, true)); + } + + @Test + public void exceptionMessageIsPreserved() throws MalformedURLException { + URL wsdlURL = new URL("http://localhost:" + ClientServerExceptionServer.PORT + "/ExceptionService?wsdl"); + QName qname = new QName("http://cxf.apache.org/", "ExceptionService"); + Service service = Service.create(wsdlURL, qname); + ExceptionService port = service.getPort(ExceptionService.class); + + final IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, + () -> port.saySomething("Hello World!")); + assertEquals("Simulated!", ex.getMessage()); + } +} diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ExceptionService.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ExceptionService.java new file mode 100644 index 00000000000..ac2d87083fc --- /dev/null +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ExceptionService.java @@ -0,0 +1,27 @@ +/** + * 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.cxf.systest.jaxws; + +import jakarta.jws.WebService; + +@WebService +interface ExceptionService { + String saySomething(String text) throws IllegalArgumentException; +} From daeb13787ec40a215c12f84036d55a0f963c5f64 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 15:58:19 -0500 Subject: [PATCH 222/430] Bump org.codehaus.mojo:exec-maven-plugin from 3.4.1 to 3.5.0 (#2143) Bumps [org.codehaus.mojo:exec-maven-plugin](https://github.com/mojohaus/exec-maven-plugin) from 3.4.1 to 3.5.0. - [Release notes](https://github.com/mojohaus/exec-maven-plugin/releases) - [Commits](https://github.com/mojohaus/exec-maven-plugin/compare/3.4.1...3.5.0) --- updated-dependencies: - dependency-name: org.codehaus.mojo:exec-maven-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 85a6d354c78..e6589f2262f 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -208,7 +208,7 @@ org.codehaus.mojo exec-maven-plugin - 3.4.1 + 3.5.0 org.apache.felix From 768d1f97700eb3f217deaf326f0ae1b4acfb32f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Nov 2024 15:58:34 -0500 Subject: [PATCH 223/430] Bump github/codeql-action from 3.27.0 to 3.27.1 (#2142) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.0 to 3.27.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/662472033e021d55d94146f66f6058822b0b39fd...4f3212b61783c3c68e8309a0f18a699764811cda) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 65c324dca1f..2b58101126d 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@662472033e021d55d94146f66f6058822b0b39fd # v3.27.0 + uses: github/codeql-action/init@4f3212b61783c3c68e8309a0f18a699764811cda # v3.27.1 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@662472033e021d55d94146f66f6058822b0b39fd # v3.27.0 + uses: github/codeql-action/analyze@4f3212b61783c3c68e8309a0f18a699764811cda # v3.27.1 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index a619d2837ac..33c0fb5a6fc 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@662472033e021d55d94146f66f6058822b0b39fd #tag=v2 + uses: github/codeql-action/upload-sarif@4f3212b61783c3c68e8309a0f18a699764811cda #tag=v2 with: sarif_file: results.sarif From f3b86013ba82abeb6d9079134280a306a500fcea Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 11 Nov 2024 15:59:08 -0500 Subject: [PATCH 224/430] Update OpenTelemetry to 1.44.1 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index e7233ad2480..b669730375c 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -191,7 +191,7 @@ 2.0.46.Final 2.0.12 3.2.2 - 1.43.0 + 1.44.1 1.28.0-alpha 0.33.0 2.0.27 From ff315d8ebf1facf449a9fdeb7d9d5605f0e1a940 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 11 Nov 2024 16:29:37 -0500 Subject: [PATCH 225/430] Update Micrometer to 1.13.7 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index b669730375c..7cd9d403d53 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -177,7 +177,7 @@ 1.5.12 9.12.0 3.9.8 - 1.13.6 + 1.13.7 1.3.5 3.1 3.0.1 From 54c3ce63ef139f99c12f2290b2107c2f428fba51 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Nov 2024 07:48:58 -0500 Subject: [PATCH 226/430] Bump org.webjars:swagger-ui from 5.18.1 to 5.18.2 (#2146) Bumps [org.webjars:swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.18.1 to 5.18.2. - [Release notes](https://github.com/swagger-api/swagger-ui/releases) - [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc) - [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.18.1...v5.18.2) --- updated-dependencies: - dependency-name: org.webjars:swagger-ui dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index e6589f2262f..9e7832b9f16 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -36,7 +36,7 @@ 12.0.15 4.1.114.Final 4.5.14 - 5.18.1 + 5.18.2 3.0.0 10.1.31 4.0.3.Final diff --git a/parent/pom.xml b/parent/pom.xml index 7cd9d403d53..e07b65df28e 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -218,7 +218,7 @@ 6.3.4 6.1.14 1.8.3 - 5.18.1 + 5.18.2 2.2.25 3.0.0 10.1.31 From 7a54bd969f6ceedd4d0933e51df3eb68b44a1a16 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 12 Nov 2024 07:49:36 -0500 Subject: [PATCH 227/430] Update Micrometer Tracing to 1.3.6 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index e07b65df28e..874c0036c3a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -178,7 +178,7 @@ 9.12.0 3.9.8 1.13.7 - 1.3.5 + 1.3.6 3.1 3.0.1 3.1.2 From 6ee94de98889e52d447f9ab3b2d236d39cdcaecf Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 12 Nov 2024 21:30:42 -0500 Subject: [PATCH 228/430] Update Groovy to 4.0.24 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 874c0036c3a..4591b122f41 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -587,7 +587,7 @@ org.apache.groovy groovy - 4.0.23 + 4.0.24 From 5251e3b7aab69bc106e7b822557d4e2f36ba212a Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 13 Nov 2024 19:37:55 -0500 Subject: [PATCH 229/430] Update Project Reactor to 3.7.0 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 4591b122f41..8861d75f42b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -200,7 +200,7 @@ 4.10.0 3.5.1 1.0.4 - 3.6.11 + 3.7.0 1.7.15 1.3.8 2.2.21 From ce13e155bcdf28611177a35f4d29e4967cc07828 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 14 Nov 2024 13:26:13 -0500 Subject: [PATCH 230/430] Update Netty to 4.1.115.Final and Netty Tcnative to 2.0.69.Final --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 9e7832b9f16..28f673bf2d6 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -34,7 +34,7 @@ 3.3.5 4.1.3 12.0.15 - 4.1.114.Final + 4.1.115.Final 4.5.14 5.18.2 3.0.0 diff --git a/parent/pom.xml b/parent/pom.xml index 8861d75f42b..937cea7fe46 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -187,8 +187,8 @@ 2022.7 3.2.1 [4,5) - 4.1.114.Final - 2.0.46.Final + 4.1.115.Final + 2.0.69.Final 2.0.12 3.2.2 1.44.1 From 49a6ed5aa831629396cca3c90db4fb5974e63195 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Thu, 14 Nov 2024 15:40:45 -0500 Subject: [PATCH 231/430] [CXF-9052]LoadDistributorFeature not comaptible with JAX-RS subresources --- .../LoadDistributorTargetSelector.java | 40 ++++++++++ .../systest/jaxrs/failover/CXF9052Test.java | 79 +++++++++++++++++++ 2 files changed, 119 insertions(+) create mode 100644 systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/CXF9052Test.java diff --git a/rt/features/clustering/src/main/java/org/apache/cxf/clustering/LoadDistributorTargetSelector.java b/rt/features/clustering/src/main/java/org/apache/cxf/clustering/LoadDistributorTargetSelector.java index 467e3e735c1..2ae2b04cdf8 100644 --- a/rt/features/clustering/src/main/java/org/apache/cxf/clustering/LoadDistributorTargetSelector.java +++ b/rt/features/clustering/src/main/java/org/apache/cxf/clustering/LoadDistributorTargetSelector.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.logging.Logger; +import org.apache.cxf.clustering.FailoverTargetSelector.InvocationContext; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.endpoint.Endpoint; import org.apache.cxf.message.Exchange; @@ -169,6 +170,45 @@ protected Endpoint getFailoverTarget(Exchange exchange, } return failoverTarget; } + + // Some conduits may replace the endpoint address after it has already been prepared + // but before the invocation has been done (ex, org.apache.cxf.clustering.LoadDistributorTargetSelector) + // which may affect JAX-RS clients where actual endpoint address property may include additional path + // segments. + protected boolean replaceEndpointAddressPropertyIfNeeded(Message message, + String endpointAddress, + Conduit cond) { + String requestURI = (String)message.get(Message.REQUEST_URI); + if (requestURI != null && endpointAddress != null && !requestURI.equals(endpointAddress)) { + String basePath = (String)message.get(Message.BASE_PATH); + if (basePath.startsWith(endpointAddress)) { + endpointAddress = basePath; + } + if (basePath != null && requestURI.startsWith(basePath)) { + String pathInfo = requestURI.substring(basePath.length()); + message.put(Message.BASE_PATH, endpointAddress); + final String slash = "/"; + boolean startsWithSlash = pathInfo.startsWith(slash); + if (endpointAddress.endsWith(slash)) { + endpointAddress = endpointAddress + (startsWithSlash ? pathInfo.substring(1) : pathInfo); + } else { + endpointAddress = endpointAddress + (startsWithSlash ? pathInfo : (slash + pathInfo)); + } + message.put(Message.ENDPOINT_ADDRESS, endpointAddress); + message.put(Message.REQUEST_URI, endpointAddress); + + Exchange exchange = message.getExchange(); + String key = String.valueOf(System.identityHashCode(exchange)); + InvocationContext invocation = getInvocationContext(key); + if (invocation != null) { + overrideAddressProperty(invocation.getContext(), + cond.getTarget().getAddress().getValue()); + } + return true; + } + } + return false; + } /** * Get the distribution target endpoint, if a suitable one is available. diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/CXF9052Test.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/CXF9052Test.java new file mode 100644 index 00000000000..fd4891bc4f6 --- /dev/null +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/failover/CXF9052Test.java @@ -0,0 +1,79 @@ +/** + * 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.cxf.systest.jaxrs.failover; + +import java.util.List; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import org.apache.cxf.clustering.FailoverFeature; +import org.apache.cxf.clustering.LoadDistributorFeature; +import org.apache.cxf.clustering.SequentialStrategy; +import org.apache.cxf.feature.Feature; +import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; + +import org.junit.Assert; +import org.junit.Test; +public class CXF9052Test { + @Test + public void noClustering() { + makeRequest(List.of()); + } + + @Test + public void failover() { + var failover = new FailoverFeature(); + failover.setStrategy(makeStrategy()); + makeRequest(List.of(failover)); + } + + @Test + public void loadDistributor() { + var distro = new LoadDistributorFeature(); + distro.setStrategy(makeStrategy()); + makeRequest(List.of(distro)); + } + + private static SequentialStrategy makeStrategy() { + var s = new SequentialStrategy(); + s.setAlternateAddresses(List.of("http://localhost:1234/test")); + return s; + } + + private static void makeRequest(List features) { + var fct = new JAXRSClientFactoryBean(); + fct.setFeatures(features); + fct.setServiceClass(Root.class); + fct.setAddress("http://localhost:1234/test"); + try { + fct.create(Root.class).sub().name(); + } catch (Exception e) { + Assert.assertTrue(e.getMessage(), e.getMessage().contains("/sub/name")); + } + } + + interface Root { + @Path("/sub") Sub sub(); + } + + interface Sub { + @GET @Path("/name") String name(); + } +} From 4490c7cfd23b4afebc65ecf3e423bbae9abc2ed3 Mon Sep 17 00:00:00 2001 From: Colm O hEigeartaigh Date: Fri, 15 Nov 2024 06:53:28 +0000 Subject: [PATCH 232/430] Updating WSS4J to 3.0.4 (#2151) --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 937cea7fe46..5e5c6e9c026 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -236,7 +236,7 @@ 7.1.0 4.2.1 1.6.3 - 3.0.3 + 3.0.4 2.3.1 3.8.16.Final 2.1 From 46cb1c1315b9f2fa0a609a110518716669a33821 Mon Sep 17 00:00:00 2001 From: jrihtarsic Date: Fri, 15 Nov 2024 08:00:48 +0100 Subject: [PATCH 233/430] [CXF-9048] Update the WSS4J tests (#2024) Co-authored-by: RIHTARSIC Joze --- .../cxf/ws/security/wss4j/WSS4JInOutTest.java | 1 + .../wss4j/WSS4JInOutWithAttachmentsTest.java | 36 +++++++++++++++---- 2 files changed, 31 insertions(+), 6 deletions(-) diff --git a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JInOutTest.java b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JInOutTest.java index 9404bfd78fb..afdef21757f 100644 --- a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JInOutTest.java +++ b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JInOutTest.java @@ -230,6 +230,7 @@ public void testEncryptionWithAgreementMethod(String alias, String keyElement) t outProperties.put(ConfigurationConstants.USER, alias); outProperties.put(ConfigurationConstants.ENC_KEY_TRANSPORT, WSS4JConstants.KEYWRAP_AES128); outProperties.put(ConfigurationConstants.ENC_KEY_AGREEMENT_METHOD, WSS4JConstants.AGREEMENT_METHOD_ECDH_ES); + outProperties.put(ConfigurationConstants.ENC_KEY_DERIVATION_FUNCTION, WSS4JConstants.KEYDERIVATION_CONCATKDF); Map inProperties = new HashMap<>(); inProperties.put(ConfigurationConstants.ACTION, ConfigurationConstants.ENCRYPTION); diff --git a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JInOutWithAttachmentsTest.java b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JInOutWithAttachmentsTest.java index 5511dfc2950..7db888644ac 100644 --- a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JInOutWithAttachmentsTest.java +++ b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/wss4j/WSS4JInOutWithAttachmentsTest.java @@ -86,14 +86,29 @@ public WSS4JInOutWithAttachmentsTest() { * @throws Exception if something goes wrong */ @Test - public void testEncryptWithAgreementMethodWithXECAndEDKeys() throws Exception { + public void testEncryptWithAgreementConcatKDFWithXECAndEDKeys() throws Exception { Assume.assumeTrue(getJDKVersion() >= 16); - testEncryptWithAgreementMethod("ed25519", "x25519"); + testEncryptWithAgreementMethod("ed25519", "x25519", + WSS4JConstants.AGREEMENT_METHOD_X25519, WSS4JConstants.KEYDERIVATION_CONCATKDF); } @Test - public void testEncryptWithAgreementMethodWithECKeys() throws Exception { - testEncryptWithAgreementMethod("secp256r1", "secp256r1"); + public void testEncryptWithAgreementConcatKDFWithECKeys() throws Exception { + testEncryptWithAgreementMethod("secp256r1", "secp256r1", + WSS4JConstants.AGREEMENT_METHOD_ECDH_ES, WSS4JConstants.KEYDERIVATION_CONCATKDF); + } + + @Test + public void testEncryptWithAgreementHKDFWithXECAndEDKeys() throws Exception { + Assume.assumeTrue(getJDKVersion() >= 16); + testEncryptWithAgreementMethod("ed25519", "x25519", + WSS4JConstants.AGREEMENT_METHOD_X25519, WSS4JConstants.KEYDERIVATION_HKDF); + } + + @Test + public void testEncryptWithAgreementHKDFWithECKeys() throws Exception { + testEncryptWithAgreementMethod("secp256r1", "secp256r1", + WSS4JConstants.AGREEMENT_METHOD_ECDH_ES, WSS4JConstants.KEYDERIVATION_HKDF); } /** @@ -102,9 +117,12 @@ public void testEncryptWithAgreementMethodWithECKeys() throws Exception { * * @param signAlias the alias of the signature key * @param encAlias the alias of the encryption key + * @param keyAgreementMethod the key agreement method, e.g., ECDH_ES, X25519, X448 + * @param keyDerivationFunction the key derivation function, e.g., ConcatKDF, HKDF * @throws Exception if something goes wrong. */ - public void testEncryptWithAgreementMethod(String signAlias, String encAlias) throws Exception { + public void testEncryptWithAgreementMethod(String signAlias, String encAlias, String keyAgreementMethod, + String keyDerivationFunction) throws Exception { Map outProperties = new HashMap<>(); // Signature configuration (sign before encrypt) @@ -127,6 +145,7 @@ public void testEncryptWithAgreementMethod(String signAlias, String encAlias) th outProperties.put(ConfigurationConstants.ENC_SYM_ALGO, WSS4JConstants.AES_256_GCM); outProperties.put(ConfigurationConstants.ENC_KEY_TRANSPORT, WSS4JConstants.KEYWRAP_AES128); outProperties.put(ConfigurationConstants.ENC_KEY_AGREEMENT_METHOD, WSS4JConstants.AGREEMENT_METHOD_ECDH_ES); + outProperties.put(ConfigurationConstants.ENC_KEY_DERIVATION_FUNCTION, keyDerivationFunction); outProperties.put(ConfigurationConstants.ENC_KEY_ID, "DirectReference"); outProperties.put(ConfigurationConstants.ENCRYPTION_PARTS, "{}cid:Attachments;"); @@ -146,7 +165,12 @@ public void testEncryptWithAgreementMethod(String signAlias, String encAlias) th xpaths.add("//wsse:Security/xenc:EncryptedData"); xpaths.add("//xenc:AgreementMethod"); xpaths.add("//xenc11:KeyDerivationMethod"); - xpaths.add("//xenc11:ConcatKDFParams"); + if (WSS4JConstants.KEYDERIVATION_HKDF.equals(keyDerivationFunction)) { + xpaths.add("//rfc9231:HKDFParams"); + this.testUtilities.addNamespace("rfc9231", "http://www.w3.org/2021/04/xmldsig-more#"); + } else { + xpaths.add("//xenc11:ConcatKDFParams"); + } xpaths.add("//wsse:Security/ds:Signature"); SoapMessage inSoapMessage = makeInvocationWithAttachment(outProperties, xpaths, inProperties); From 7bf082db5cc1334f6873c7578a921b822ecaaafe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 15 Nov 2024 14:41:29 -0500 Subject: [PATCH 234/430] Bump cxf.micrometer.version from 1.13.7 to 1.14.0 (#2149) Bumps `cxf.micrometer.version` from 1.13.7 to 1.14.0. Updates `io.micrometer:micrometer-core` from 1.13.7 to 1.14.0 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.13.7...v1.14.0) Updates `io.micrometer:micrometer-observation` from 1.13.7 to 1.14.0 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.13.7...v1.14.0) Updates `io.micrometer:micrometer-test` from 1.13.7 to 1.14.0 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.13.7...v1.14.0) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-core dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.micrometer:micrometer-observation dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.micrometer:micrometer-test dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 4 ++-- .../micrometer/MicrometerClientMetricsContextTest.java | 2 ++ .../micrometer/MicrometerServerMetricsContextTest.java | 5 +++-- systests/spring-boot/pom.xml | 6 ++++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index 5e5c6e9c026..a6cccb0a861 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -177,8 +177,8 @@ 1.5.12 9.12.0 3.9.8 - 1.13.7 - 1.3.6 + 1.14.1 + 1.4.0 3.1 3.0.1 3.1.2 diff --git a/rt/features/metrics/src/test/java/org/apache/cxf/metrics/micrometer/MicrometerClientMetricsContextTest.java b/rt/features/metrics/src/test/java/org/apache/cxf/metrics/micrometer/MicrometerClientMetricsContextTest.java index b53097e211d..ed23cd2b140 100644 --- a/rt/features/metrics/src/test/java/org/apache/cxf/metrics/micrometer/MicrometerClientMetricsContextTest.java +++ b/rt/features/metrics/src/test/java/org/apache/cxf/metrics/micrometer/MicrometerClientMetricsContextTest.java @@ -169,11 +169,13 @@ public void testStopShouldCallStopOnAllTimedAnnotations() { doReturn(FIRST_TIMED_ANNOTATION_DUMMY_VALUE).when(firstTimedAnnotation).value(); doReturn("").when(firstTimedAnnotation).description(); doReturn(new double[]{}).when(firstTimedAnnotation).percentiles(); + doReturn(new double[]{}).when(firstTimedAnnotation).serviceLevelObjectives(); doReturn(SECOND_TIMED_ANNOTATION_DUMMY_VALUE).when(secondTimedAnnotation).value(); doReturn("").when(secondTimedAnnotation).description(); doReturn(new double[]{}).when(secondTimedAnnotation).percentiles(); + doReturn(new double[]{}).when(secondTimedAnnotation).serviceLevelObjectives(); TimingContext timingContext = new TimingContext(sample); diff --git a/rt/features/metrics/src/test/java/org/apache/cxf/metrics/micrometer/MicrometerServerMetricsContextTest.java b/rt/features/metrics/src/test/java/org/apache/cxf/metrics/micrometer/MicrometerServerMetricsContextTest.java index 11fb9754d30..4f90b2e07b7 100644 --- a/rt/features/metrics/src/test/java/org/apache/cxf/metrics/micrometer/MicrometerServerMetricsContextTest.java +++ b/rt/features/metrics/src/test/java/org/apache/cxf/metrics/micrometer/MicrometerServerMetricsContextTest.java @@ -171,12 +171,13 @@ public void testStopShouldCallStopOnAllTimedAnnotations() { doReturn(FIRST_TIMED_ANNOTATION_DUMMY_VALUE).when(firstTimedAnnotation).value(); doReturn("").when(firstTimedAnnotation).description(); doReturn(new double[]{}).when(firstTimedAnnotation).percentiles(); - + doReturn(new double[]{}).when(firstTimedAnnotation).serviceLevelObjectives(); doReturn(SECOND_TIMED_ANNOTATION_DUMMY_VALUE).when(secondTimedAnnotation).value(); doReturn("").when(secondTimedAnnotation).description(); doReturn(new double[]{}).when(secondTimedAnnotation).percentiles(); - + doReturn(new double[]{}).when(secondTimedAnnotation).serviceLevelObjectives(); + TimingContext timingContext = new TimingContext(sample); doReturn(timingContext).when(request).getContent(TimingContext.class); diff --git a/systests/spring-boot/pom.xml b/systests/spring-boot/pom.xml index f650b345505..8e87b83ad38 100644 --- a/systests/spring-boot/pom.xml +++ b/systests/spring-boot/pom.xml @@ -153,5 +153,11 @@ micrometer-tracing-test test + + org.junit.jupiter + junit-jupiter-engine + ${cxf.junit5.version} + test + From 3bbdbb7614fd5e196ffba42f68b8122ba3c24e25 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 15 Nov 2024 18:04:47 -0500 Subject: [PATCH 235/430] Update Spring LDAP to 3.2.8 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index a6cccb0a861..e867c2dca20 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -213,7 +213,7 @@ 2.3 2.3_2 3.3.5 - 3.2.7 + 3.2.8 spring-test 6.3.4 6.1.14 From 1a194eab65dad8347bb2856fdf62fa3e16d4e251 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 15 Nov 2024 21:04:26 -0500 Subject: [PATCH 236/430] Update Spring Framework to 6.2.0 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index e867c2dca20..fb7575ab3a3 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -216,7 +216,7 @@ 3.2.8 spring-test 6.3.4 - 6.1.14 + 6.2.0 1.8.3 5.18.2 2.2.25 From 3ff5a8f32a51f1de48bb3c5e724db68dae66a68a Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 16 Nov 2024 12:22:57 -0500 Subject: [PATCH 237/430] Fix flakiness in org.apache.cxf.io.DelayedCachedOutputStreamCleanerTest.testCleanOnShutdown test case --- .../cxf/io/DelayedCachedOutputStreamCleanerTest.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java b/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java index 8fcb12cf461..1cd557c1c64 100644 --- a/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java +++ b/core/src/test/java/org/apache/cxf/io/DelayedCachedOutputStreamCleanerTest.java @@ -147,14 +147,13 @@ public void testForceCleanException() throws InterruptedException { @Test public void testCleanOnShutdown() throws InterruptedException { - /* Delay of 2.5 seconds */ - final Map properties = Collections.singletonMap(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); + /* Delay of 5 seconds */ + final Map properties = Collections.singletonMap(CachedConstants.CLEANER_DELAY_BUS_PROP, 5000); bus = new ExtensionManagerBus(new HashMap<>(), properties); final AtomicBoolean latch = new AtomicBoolean(); final Closeable closeable = () -> latch.compareAndSet(false, true); - bus.setProperty(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); /* 2.5 seconds */ final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); cleaner.register(closeable); @@ -169,14 +168,13 @@ public void testCleanOnShutdown() throws InterruptedException { public void testCleanOnShutdownDisabled() throws InterruptedException { /* Delay of 2.5 seconds */ final Map properties = new HashMap<>(); - properties.put(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); + properties.put(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); /* 2.5 seconds */ properties.put(CachedConstants.CLEANER_CLEAN_ON_SHUTDOWN_BUS_PROP, false); bus = new ExtensionManagerBus(new HashMap<>(), properties); final AtomicBoolean latch = new AtomicBoolean(); final Closeable closeable = () -> latch.compareAndSet(false, true); - bus.setProperty(CachedConstants.CLEANER_DELAY_BUS_PROP, 2500); /* 2.5 seconds */ final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); cleaner.register(closeable); From e6229afc8c15fe46b2c64116e76fea794af03f98 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 17 Nov 2024 11:39:54 -0500 Subject: [PATCH 238/430] CXF-9076: Exception message is not unmarshalled with JDK17+ (limit the fix to JDK standard library exceptions) (#2148) --- .../cxf/interceptor/ClientFaultConverter.java | 54 +++++++++++++------ .../jaxws/ClientServerExceptionServer.java | 5 ++ .../jaxws/ClientServerExceptionTest.java | 20 +++++-- .../cxf/systest/jaxws/ExceptionService.java | 1 + .../cxf/systest/jaxws/SayException.java | 38 +++++++++++++ 5 files changed, 99 insertions(+), 19 deletions(-) create mode 100644 systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SayException.java diff --git a/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java b/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java index c2c1f9c3655..c270f4d920a 100644 --- a/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java +++ b/core/src/main/java/org/apache/cxf/interceptor/ClientFaultConverter.java @@ -200,21 +200,8 @@ protected void processFaultDetail(Fault fault, Message msg) { ReflectionUtil.setAccessible(f); f.set(ex, fault.getMessage()); } catch (Exception e1) { - try { - // Fallback, try to clone the exception instead of accessing the detailMessage over reflection - final Constructor constructor = ReflectionUtil.getConstructor(ex.getClass(), - String.class, Throwable.class); /* String message, Throwable cause */ - - if (constructor != null) { - final Exception clone = (Exception) constructor.newInstance(message, ex.getCause()); - clone.setStackTrace(ex.getStackTrace()); - if (ex.getSuppressed().length > 0) { - Arrays.stream(ex.getSuppressed()).forEach(clone::addSuppressed); - } - ex = clone; - } - } catch (Exception e2) { - /* nothing to do */ + if (isJdkException(ex.getClass().getPackageName())) { + ex = cloneJdkException(ex, message); } } } @@ -222,6 +209,37 @@ protected void processFaultDetail(Fault fault, Message msg) { } } + private static Exception cloneJdkException(Exception ex, final String message) { + try { + // Fallback, try to clone the exception instead of accessing the detailMessage + // over reflection + Constructor constructor = ReflectionUtil.getConstructor( + ex.getClass(), String.class, Throwable.class); /* String message, Throwable cause */ + + Exception clone = null; + if (constructor != null) { + clone = (Exception) constructor.newInstance(message, ex.getCause()); + } else { + constructor = ReflectionUtil.getConstructor(ex.getClass(), String.class); /* String message */ + if (constructor != null) { + clone = (Exception) constructor.newInstance(message); + clone.initCause(ex.getCause()); + } + } + + if (clone != null) { + clone.setStackTrace(ex.getStackTrace()); + if (ex.getSuppressed().length > 0) { + Arrays.stream(ex.getSuppressed()).forEach(clone::addSuppressed); + } + return clone; + } + } catch (Exception e2) { + /* nothing to do */ + } + return ex; + } + private Constructor getConstructor(Class faultClass, Object e) throws NoSuchMethodException { Class beanClass = e.getClass(); Constructor[] cons = faultClass.getConstructors(); @@ -300,7 +318,7 @@ private Throwable getCause(Iterator linesIterator, String firstLine) { Throwable res = null; if (firstLine.indexOf(':') != -1) { String cn = firstLine.substring(0, firstLine.indexOf(':')).trim(); - if (cn.startsWith("java.lang")) { + if (isJdkException(cn)) { try { res = (Throwable)Class.forName(cn).getConstructor(String.class) .newInstance(firstLine.substring(firstLine.indexOf(':') + 2)); @@ -327,6 +345,10 @@ private Throwable getCause(Iterator linesIterator, String firstLine) { return res; } + private static boolean isJdkException(String pkg) { + return pkg.startsWith("java.lang"); + } + private static StackTraceElement parseStackTrackLine(String oneLine) { StringTokenizer stInner = new StringTokenizer(oneLine, "!"); return new StackTraceElement(stInner.nextToken(), stInner.nextToken(), diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionServer.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionServer.java index 06ad7e98f07..2cb2d371a61 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionServer.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionServer.java @@ -33,6 +33,11 @@ static class ExceptionServiceImpl implements ExceptionService { public String saySomething(String text) throws IllegalArgumentException { throw new IllegalArgumentException("Simulated!"); } + + @Override + public String sayNothing(String text) throws SayException { + throw new SayException("Simulated!", 100); + } } protected void run() { diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionTest.java index 2e744890260..73db4fcc540 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionTest.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerExceptionTest.java @@ -27,6 +27,7 @@ import jakarta.xml.ws.Service; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; +import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; @@ -35,20 +36,33 @@ import static org.junit.Assert.assertTrue; public class ClientServerExceptionTest extends AbstractBusClientServerTestBase { + private ExceptionService port; + @BeforeClass public static void startServers() throws Exception { assertTrue("server did not launch correctly", launchServer(ClientServerExceptionServer.class, true)); } - @Test - public void exceptionMessageIsPreserved() throws MalformedURLException { + @Before + public void setUp() throws Exception { URL wsdlURL = new URL("http://localhost:" + ClientServerExceptionServer.PORT + "/ExceptionService?wsdl"); QName qname = new QName("http://cxf.apache.org/", "ExceptionService"); Service service = Service.create(wsdlURL, qname); - ExceptionService port = service.getPort(ExceptionService.class); + port = service.getPort(ExceptionService.class); + } + @Test + public void exceptionMessageIsPreserved() throws MalformedURLException { final IllegalArgumentException ex = assertThrows(IllegalArgumentException.class, () -> port.saySomething("Hello World!")); assertEquals("Simulated!", ex.getMessage()); } + + @Test + public void exceptionCustomExceptionMessageIsPreserved() throws MalformedURLException { + final SayException ex = assertThrows(SayException.class, + () -> port.sayNothing("Hello World!")); + assertEquals("Simulated!", ex.getMessage()); + assertEquals(100, ex.getCode()); + } } diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ExceptionService.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ExceptionService.java index ac2d87083fc..6473b80972a 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ExceptionService.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ExceptionService.java @@ -24,4 +24,5 @@ @WebService interface ExceptionService { String saySomething(String text) throws IllegalArgumentException; + String sayNothing(String text) throws SayException; } diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SayException.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SayException.java new file mode 100644 index 00000000000..0201400b0e2 --- /dev/null +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SayException.java @@ -0,0 +1,38 @@ +/** + * 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.cxf.systest.jaxws; + +public class SayException extends Exception { + private static final long serialVersionUID = 1L; + private final int code; + + public SayException() { + this(null, 0); + } + + public SayException(final String message, final int code) { + super(message); + this.code = code; + } + + public int getCode() { + return code; + } +} From 3e37fcfeb031cfeaed46b239084ebe27afed4cef Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 09:08:19 -0500 Subject: [PATCH 239/430] Bump github/codeql-action from 3.27.1 to 3.27.4 (#2154) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.1 to 3.27.4. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/4f3212b61783c3c68e8309a0f18a699764811cda...ea9e4e37992a54ee68a9622e985e60c8e8f12d9f) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 2b58101126d..46225ca3318 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@4f3212b61783c3c68e8309a0f18a699764811cda # v3.27.1 + uses: github/codeql-action/init@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@4f3212b61783c3c68e8309a0f18a699764811cda # v3.27.1 + uses: github/codeql-action/analyze@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f # v3.27.4 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 33c0fb5a6fc..2b148470f76 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@4f3212b61783c3c68e8309a0f18a699764811cda #tag=v2 + uses: github/codeql-action/upload-sarif@ea9e4e37992a54ee68a9622e985e60c8e8f12d9f #tag=v2 with: sarif_file: results.sarif From 69ebe466c17f687658fd9f094a783203d5cc3be8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 18 Nov 2024 09:08:33 -0500 Subject: [PATCH 240/430] Bump org.owasp:dependency-check-maven from 10.0.4 to 11.1.0 (#2153) Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 10.0.4 to 11.1.0. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v10.0.4...v11.1.0) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 90b97244f4d..19f5775c0db 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 17 UTF-8 scp://people.apache.org/www/cxf.apache.org/maven-site - 10.0.4 + 11.1.0 clean install From 8e8222e5cfbac0f4516140eb00612cda09138bef Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 18 Nov 2024 12:52:06 -0500 Subject: [PATCH 241/430] Update Spring Security to 6.4.0 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index fb7575ab3a3..755d13f2e1f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -215,7 +215,7 @@ 3.3.5 3.2.8 spring-test - 6.3.4 + 6.4.0 6.2.0 1.8.3 5.18.2 From c0a889298a6588dd198610b5dcf57c1ad70367ae Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 18 Nov 2024 13:06:47 -0500 Subject: [PATCH 242/430] Update Swagger Core to 2.2.26 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 755d13f2e1f..615a99efeb6 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -219,7 +219,7 @@ 6.2.0 1.8.3 5.18.2 - 2.2.25 + 2.2.26 3.0.0 10.1.31 1.8 From b48e26f444426bf9ef4a56905d8b5b52d9dd7cce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Nov 2024 08:12:36 -0500 Subject: [PATCH 243/430] Bump org.apache.maven.plugins:maven-dependency-plugin (#2155) Bumps [org.apache.maven.plugins:maven-dependency-plugin](https://github.com/apache/maven-dependency-plugin) from 3.8.0 to 3.8.1. - [Release notes](https://github.com/apache/maven-dependency-plugin/releases) - [Commits](https://github.com/apache/maven-dependency-plugin/compare/maven-dependency-plugin-3.8.0...maven-dependency-plugin-3.8.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-dependency-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 19f5775c0db..f5f814282aa 100644 --- a/pom.xml +++ b/pom.xml @@ -549,7 +549,7 @@ org.apache.maven.plugins maven-dependency-plugin - 3.8.0 + 3.8.1 org.apache.maven.plugins From 087af6c9856a816a88948303527d56380b89bbd9 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 19 Nov 2024 17:21:29 -0500 Subject: [PATCH 244/430] CXF-9078: AsyncHTTPConduit.java causing NullPointerException when closing (#2145) --- .../http/asyncclient/AsyncHTTPConduit.java | 6 +- .../URLConnectionAsyncHTTPConduit.java | 6 +- .../asyncclient/hc5/AsyncHTTPConduit.java | 6 +- .../hc5/URLConnectionAsyncHTTPConduit.java | 6 +- .../apache/cxf/systest/jaxrs/BookStore.java | 8 + .../systest/jaxrs/JAXRSAsyncClientTest.java | 10 + .../cxf/systest/hc5/jaxrs/BookStore.java | 8 + .../hc5/jaxrs/JAXRSAsyncClientTest.java | 10 + systests/transports/pom.xml | 5 + .../org/apache/cxf/systest/hc/jaxrs/Book.java | 116 ++++ .../hc/jaxrs/BookServerAsyncClient.java | 106 +++ .../cxf/systest/hc/jaxrs/BookStore.java | 237 +++++++ .../apache/cxf/systest/hc/jaxrs/Chapter.java | 106 +++ .../hc/jaxrs/JAXRSAsyncClientTest.java | 647 ++++++++++++++++++ .../apache/cxf/systest/hc/jaxrs/RETRIEVE.java | 33 + 15 files changed, 1306 insertions(+), 4 deletions(-) create mode 100644 systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/Book.java create mode 100644 systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/BookServerAsyncClient.java create mode 100644 systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/BookStore.java create mode 100644 systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/Chapter.java create mode 100644 systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/JAXRSAsyncClientTest.java create mode 100644 systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/RETRIEVE.java diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java index 3cb93af1021..edf8b8cfb93 100755 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncHTTPConduit.java @@ -420,7 +420,11 @@ public void close() throws IOException { this.basicEntity.setContentLength(out.size()); wrappedStream = null; handleHeadersTrustCaching(); - out.writeCacheTo(wrappedStream); + // The wrappedStrem could be null for KNOWN_HTTP_VERBS_WITH_NO_CONTENT or empty + // requests (org.apache.cxf.empty.request) + if (wrappedStream != null) { + out.writeCacheTo(wrappedStream); + } } } super.close(); diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java index e7b280811f5..9ced688c5e6 100755 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/URLConnectionAsyncHTTPConduit.java @@ -420,7 +420,11 @@ public void close() throws IOException { this.basicEntity.setContentLength(out.size()); wrappedStream = null; handleHeadersTrustCaching(); - out.writeCacheTo(wrappedStream); + // The wrappedStrem could be null for KNOWN_HTTP_VERBS_WITH_NO_CONTENT or empty + // requests (org.apache.cxf.empty.request) + if (wrappedStream != null) { + out.writeCacheTo(wrappedStream); + } } } super.close(); diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java index 689341c4a54..8b27ffeea10 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java @@ -434,7 +434,11 @@ public void close() throws IOException { this.basicEntity.setContentLength(out.size()); wrappedStream = null; handleHeadersTrustCaching(); - out.writeCacheTo(wrappedStream); + // The wrappedStrem could be null for KNOWN_HTTP_VERBS_WITH_NO_CONTENT or empty + // requests (org.apache.cxf.empty.request) + if (wrappedStream != null) { + out.writeCacheTo(wrappedStream); + } } } super.close(); diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java index 81010856e53..6732f1e1247 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java @@ -436,7 +436,11 @@ public void close() throws IOException { this.basicEntity.setContentLength(out.size()); wrappedStream = null; handleHeadersTrustCaching(); - out.writeCacheTo(wrappedStream); + // The wrappedStrem could be null for KNOWN_HTTP_VERBS_WITH_NO_CONTENT or empty + // requests (org.apache.cxf.empty.request) + if (wrappedStream != null) { + out.writeCacheTo(wrappedStream); + } } } super.close(); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java index f2319e7d8df..a28f720742c 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java @@ -337,6 +337,14 @@ public Book deleteBodyBook(Book book) { return book; } + @GET + @Path("/getbody") + @Produces("application/xml") + @Consumes("application/xml") + public Book getBodyBook(Book book) { + return book; + } + @POST @Path("/echoxmlbookquery") @Produces("application/xml") diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java index 3d6c2bed29b..f56a9ee2b3c 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientTest.java @@ -165,6 +165,16 @@ public void testDeleteWithBody() throws Exception { wc.close(); } + @Test + public void testGetWithBody() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/getbody"; + WebClient wc = createWebClient(address).type("application/xml").accept("application/xml"); + try (Response response = wc.invoke("GET", new Book("Get", 123L))) { + assertEquals(400, response.getStatus()); + } + wc.close(); + } + @Test public void testRetrieveBookCustomMethodAsync() throws Exception { String address = "http://localhost:" + PORT + "/bookstore/retrieve"; diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/BookStore.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/BookStore.java index 393fa723b2c..abbd42acacc 100644 --- a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/BookStore.java +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/BookStore.java @@ -120,6 +120,14 @@ public Book deleteBodyBook(Book book) { return book; } + @GET + @Path("/getbody") + @Produces("application/xml") + @Consumes("application/xml") + public Book getBodyBook(Book book) { + return book; + } + @GET @Path("setcookies") public Response setComplexCookies() { diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientTest.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientTest.java index 51230100c2f..73e68082cac 100644 --- a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientTest.java +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientTest.java @@ -143,6 +143,16 @@ public void testDeleteWithBody() throws Exception { wc.close(); } + @Test + public void testGetWithBody() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/getbody"; + WebClient wc = createWebClient(address).type("application/xml").accept("application/xml"); + try (Response response = wc.invoke("GET", new Book("Get", 123L))) { + assertEquals(400, response.getStatus()); + } + wc.close(); + } + @Test public void testRetrieveBookCustomMethodAsync() throws Exception { String address = "http://localhost:" + PORT + "/bookstore/retrieve"; diff --git a/systests/transports/pom.xml b/systests/transports/pom.xml index 7a911f3d17f..f3bc7397ff6 100644 --- a/systests/transports/pom.xml +++ b/systests/transports/pom.xml @@ -397,6 +397,11 @@ ${cxf.jetty.version} test + + com.fasterxml.jackson.jakarta.rs + jackson-jakarta-rs-json-provider + test + org.eclipse.jetty jetty-security diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/Book.java b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/Book.java new file mode 100644 index 00000000000..d2f17f8161b --- /dev/null +++ b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/Book.java @@ -0,0 +1,116 @@ +/** + * 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.cxf.systest.hc.jaxrs; + +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeInfo.As; +import com.fasterxml.jackson.annotation.JsonTypeInfo.Id; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.xml.bind.annotation.XmlRootElement; + +@JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY, property = "class") +@XmlRootElement(name = "Book") +public class Book { + private String name; + private long id; + private Map chapters = new HashMap<>(); + + public Book() { + Chapter c1 = new Chapter(); + c1.setId(1L); + c1.setTitle("chapter 1"); + chapters.put(c1.getId(), c1); + Chapter c2 = new Chapter(); + c2.setId(2L); + c2.setTitle("chapter 2"); + chapters.put(c2.getId(), c2); + } + + public Book(String name, long id) { + this.name = name; + this.id = id; + } + + public void setName(String n) { + name = n; + } + + public String getName() { + return name; + } + + public void setId(long i) { + id = i; + } + public long getId() { + return id; + } + + @PUT + public void cloneState(Book book) { + id = book.getId(); + name = book.getName(); + } + + @GET + public Book retrieveState() { + return this; + } + + @GET + @Path("chapters/{chapterid}/") + @Produces("application/xml;charset=ISO-8859-1") + public Chapter getChapter(@PathParam("chapterid") long chapterid) { + return chapters.get(chapterid); + } + + @GET + @Path("chapters/acceptencoding/{chapterid}/") + @Produces("application/xml") + public Chapter getChapterAcceptEncoding(@PathParam("chapterid") long chapterid) { + return chapters.get(chapterid); + } + + @GET + @Path("chapters/badencoding/{chapterid}/") + @Produces("application/xml;charset=UTF-48") + public Chapter getChapterBadEncoding(@PathParam("chapterid") long chapterid) { + return chapters.get(chapterid); + } + + @Path("chapters/sub/{chapterid}/") + public Chapter getSubChapter(@PathParam("chapterid") long chapterid) { + return chapters.get(chapterid); + } + + @Path("chaptersobject/sub/{chapterid}/") + public Object getSubChapterObject(@PathParam("chapterid") long chapterid) { + return getSubChapter(chapterid); + } + +} diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/BookServerAsyncClient.java b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/BookServerAsyncClient.java new file mode 100644 index 00000000000..2e7610166d8 --- /dev/null +++ b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/BookServerAsyncClient.java @@ -0,0 +1,106 @@ +/** + * 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.cxf.systest.hc.jaxrs; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; + +import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; + +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.MessageBodyWriter; +import org.apache.cxf.Bus; +import org.apache.cxf.endpoint.Server; +import org.apache.cxf.helpers.IOUtils; +import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; +import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.provider.StreamingResponseProvider; +import org.apache.cxf.testutil.common.AbstractServerTestServerBase; + +public class BookServerAsyncClient extends AbstractServerTestServerBase { + public static final String PORT = allocatePort(BookServerAsyncClient.class); + + @Override + protected Server createServer(Bus bus) throws Exception { + JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); + sf.setResourceClasses(BookStore.class); + sf.setResourceProvider(BookStore.class, + new SingletonResourceProvider(new BookStore(), true)); + sf.setAddress("http://localhost:" + PORT + "/"); + sf.setProvider(new BooleanReaderWriter()); + sf.setProvider(new JacksonJsonProvider()); + sf.setProvider(new StreamingResponseProvider()); + sf.getProperties(true).put("default.content.type", "*/*"); + return sf.create(); + } + + public static void main(String[] args) throws Exception { + new BookServerAsyncClient().start(); + } + + @Consumes("text/boolean") + @Produces("text/boolean") + public static class BooleanReaderWriter implements + MessageBodyReader, MessageBodyWriter { + + @Override + public boolean isReadable(Class arg0, Type arg1, Annotation[] arg2, MediaType arg3) { + return true; + } + + @Override + public Object readFrom(Class arg0, Type arg1, Annotation[] arg2, MediaType arg3, + MultivaluedMap arg4, InputStream is) throws IOException, + WebApplicationException { + return Boolean.valueOf(IOUtils.readStringFromStream(is)); + } + + @Override + public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, + MediaType mediaType) { + return true; + } + + @Override + public long getSize(Boolean t, Class type, Type genericType, Annotation[] annotations, + MediaType mediaType) { + return -1; + } + + @Override + public void writeTo(Boolean t, Class type, Type genericType, Annotation[] annotations, + MediaType mediaType, MultivaluedMap httpHeaders, + OutputStream os) throws IOException, WebApplicationException { + byte[] bytes = t.toString().getBytes("UTF-8"); + os.write(bytes); + + } + + + } +} diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/BookStore.java b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/BookStore.java new file mode 100644 index 00000000000..632c91e7709 --- /dev/null +++ b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/BookStore.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.cxf.systest.hc.jaxrs; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.Map; + +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.DELETE; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.MatrixParam; +import jakarta.ws.rs.NotFoundException; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.Status; +import jakarta.ws.rs.core.StreamingOutput; +import jakarta.ws.rs.core.UriInfo; +import org.apache.cxf.annotations.GZIP; +import org.apache.cxf.jaxrs.ext.MessageContext; +import org.apache.cxf.jaxrs.ext.Oneway; +import org.apache.cxf.jaxrs.ext.PATCH; +import org.apache.cxf.jaxrs.ext.StreamingResponse; +import org.apache.cxf.jaxrs.impl.MetadataMap; +import org.apache.cxf.message.Message; +import org.apache.cxf.phase.PhaseInterceptorChain; + +@Path("/bookstore") +@GZIP(threshold = 1) +public class BookStore { + + private Map books = new HashMap<>(); + private long bookId = 123; + + @Context + private UriInfo ui; + @Context + private MessageContext messageContext; + + public BookStore() { + init(); + } + + @GET + @Path("/") + public Book getBookRoot() { + return new Book("root", 124L); + } + @PUT + @Path("/updatebook/{id}") + @Consumes("application/xml") + @Produces("application/xml") + public Book updateEchoBook(Book book) { + if (book.getId() != Long.parseLong(ui.getPathParameters().getFirst("id"))) { + throw new WebApplicationException(404); + } + return new Book("Updated " + book.getName(), book.getId()); + } + + @GET + @Path("/books/wildcard") + @Produces("text/*") + public String getBookTextWildcard() { + return "book"; + } + + @RETRIEVE + @Path("/retrieve") + @Produces("application/xml") + @Consumes("application/xml") + public Book retrieveBook(Book book) { + return book; + } + + @PATCH + @Path("/patch") + @Produces("application/xml") + @Consumes("application/xml") + public Response patchBook(Book book) { + if ("Timeout".equals(book.getName())) { + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + } + return Response.ok(book).build(); + } + return Response.ok(book).build(); + } + + @DELETE + @Path("/deletebody") + @Produces("application/xml") + @Consumes("application/xml") + public Book deleteBodyBook(Book book) { + return book; + } + + @GET + @Path("/getbody") + @Produces("application/xml") + @Consumes("application/xml") + public Book getBodyBook(Book book) { + return book; + } + + @GET + @Path("setcookies") + public Response setComplexCookies() { + return Response.ok().header("Set-Cookie", + "bar.com.anoncart=107894933471602436; Domain=.bar.com;" + + " Expires=Thu, 01-Oct-2020 23:44:22 GMT; Path=/") + .build(); + } + + @GET + @Path("books/check/{id}") + @Produces("text/plain,text/boolean") + public boolean checkBook(@PathParam("id") Long id) { + return books.containsKey(id); + } + + @GET + @Path("/books/statusFromStream") + @Produces("text/xml") + public Response statusFromStream() { + return Response.ok(new ResponseStreamingOutputImpl()).type("text/plain").build(); + } + + @SuppressWarnings("rawtypes") + @GET + @Path("/books/streamingresponse") + @Produces("text/xml") + public Response getBookStreamingResponse() { + return Response.ok(new StreamingResponse() { + + @SuppressWarnings("unchecked") + @Override + public void writeTo(Writer writer) throws IOException { + writer.write(new Book("stream", 124L)); + } + + }).build(); + } + + @POST + @Path("/oneway") + @Oneway + public void onewayRequest() { + if (!PhaseInterceptorChain.getCurrentMessage().getExchange().isOneWay()) { + throw new WebApplicationException(); + } + } + + @POST + @Path("/no-content") + public void noContent() { + } + + @GET + @Path("/books/{bookId}/") + @Produces("application/xml") + public Book getBook(@PathParam("bookId") String id) { + return doGetBook(id); + } + + @GET + @Path("/segment/matrix") + public Book getBookByMatrixParams(@MatrixParam("first") String s1, + @MatrixParam("second") String s2) throws Exception { + + return doGetBook(s1 + s2); + } + + public final String init() { + books.clear(); + bookId = 123; + + Book book = new Book(); + book.setId(bookId); + book.setName("CXF in Action"); + books.put(book.getId(), book); + + return "OK"; + } + + private final class ResponseStreamingOutputImpl implements StreamingOutput { + public void write(OutputStream output) throws IOException, WebApplicationException { + if (!"text/plain".equals(BookStore.this.messageContext.get("Content-Type"))) { + throw new RuntimeException(); + } + BookStore.this.messageContext.put(Message.RESPONSE_CODE, 503); + MultivaluedMap headers = new MetadataMap<>(); + headers.putSingle("Content-Type", "text/custom+plain"); + headers.putSingle("CustomHeader", "CustomValue"); + BookStore.this.messageContext.put(Message.PROTOCOL_HEADERS, headers); + + output.write("Response is not available".getBytes()); + } + } + + private Book doGetBook(String id) { + Book book = books.get(Long.parseLong(id)); + if (book != null) { + return book; + } + + throw new NotFoundException(Response + .status(Status.NOT_FOUND) + .entity("The book with ID '" + id + "' was not found") + .build()); + } +} diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/Chapter.java b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/Chapter.java new file mode 100644 index 00000000000..9b9dcf2a269 --- /dev/null +++ b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/Chapter.java @@ -0,0 +1,106 @@ +/** + * 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.cxf.systest.hc.jaxrs; + +import java.util.ArrayList; +import java.util.List; + +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.PathParam; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.UriInfo; +import jakarta.xml.bind.annotation.XmlRootElement; + + +@XmlRootElement(name = "Chapter") +public class Chapter { + private String title; + private long id; + + public Chapter() { + } + + public void setTitle(String n) { + title = n; + } + + public String getTitle() { + return title; + } + + public void setId(long i) { + id = i; + } + public long getId() { + return id; + } + + @GET + @Path("/recurse") + @Produces("application/xml") + public Chapter getItself() { + return this; + } + + @Path("/recurse2") + public Chapter getItself2() { + return this; + } + + @GET + @Produces("application/xml;charset=ISO-8859-1") + public Chapter get() { + return this; + } + + @GET + @Path("/ids") + @Produces("application/xml;charset=ISO-8859-1") + public Chapter getWithBookId(@PathParam("bookId") int bookId, + @PathParam("chapterid") int chapterId) { + if (bookId != 123 || chapterId != 1) { + throw new RuntimeException(); + } + return this; + } + + + @GET + @Path("/matched-resources") + @Produces("text/plain") + public String getMatchedResources(@Context UriInfo ui) { + List list = new ArrayList<>(); + for (Object obj : ui.getMatchedResources()) { + list.add(obj.toString()); + } + return list.toString(); + } + + @GET + @Path("/matched!uris") + @Produces("text/plain") + public String getMatchedUris(@Context UriInfo ui, + @QueryParam("decode") String decode) { + return ui.getMatchedURIs(Boolean.parseBoolean(decode)).toString(); + } +} diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/JAXRSAsyncClientTest.java b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/JAXRSAsyncClientTest.java new file mode 100644 index 00000000000..b6318cf9c60 --- /dev/null +++ b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/JAXRSAsyncClientTest.java @@ -0,0 +1,647 @@ +/** + * 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.cxf.systest.hc.jaxrs; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.lang.annotation.Annotation; +import java.lang.reflect.Type; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.concurrent.TimeUnit; + +import jakarta.annotation.Priority; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.NotFoundException; +import jakarta.ws.rs.ProcessingException; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.ClientRequestContext; +import jakarta.ws.rs.client.ClientResponseContext; +import jakarta.ws.rs.client.ClientResponseFilter; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.client.Invocation; +import jakarta.ws.rs.client.InvocationCallback; +import jakarta.ws.rs.client.ResponseProcessingException; +import jakarta.ws.rs.client.WebTarget; +import jakarta.ws.rs.core.GenericType; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.ext.MessageBodyReader; +import jakarta.ws.rs.ext.MessageBodyWriter; +import jakarta.xml.ws.Holder; +import org.apache.cxf.jaxrs.client.ClientConfiguration; +import org.apache.cxf.jaxrs.client.JAXRSClientFactory; +import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; +import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit; +import org.apache.cxf.transports.http.configuration.HTTPClientPolicy; + +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; +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.junit.Assert.fail; + +public class JAXRSAsyncClientTest extends AbstractBusClientServerTestBase { + public static final String PORT = BookServerAsyncClient.PORT; + + @BeforeClass + public static void startServers() throws Exception { + AbstractResourceInfo.clearAllMaps(); + assertTrue("server did not launch correctly", launchServer(BookServerAsyncClient.class, true)); + createStaticBus(); + } + + @Test + public void testRetrieveBookCustomMethodAsyncSync() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/retrieve"; + WebClient wc = createWebClient(address).type("application/xml").accept("application/xml"); + Book book = wc.invoke("RETRIEVE", new Book("Retrieve", 123L), Book.class); + assertEquals("Retrieve", book.getName()); + wc.close(); + } + + @Test + public void testPatchBook() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/patch"; + WebClient wc = createWebClient(address).type("application/xml"); + Book book = wc.invoke("PATCH", new Book("Patch", 123L), Book.class); + assertEquals("Patch", book.getName()); + wc.close(); + } + + @Test + public void testPatchBookTimeout() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/patch"; + WebClient wc = WebClient.create(address).type("application/xml"); + ClientConfiguration clientConfig = WebClient.getConfig(wc); + clientConfig.getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, true); + HTTPClientPolicy clientPolicy = clientConfig.getHttpConduit().getClient(); + clientPolicy.setReceiveTimeout(500); + clientPolicy.setConnectionTimeout(500); + try { + Book book = wc.invoke("PATCH", new Book("Timeout", 123L), Book.class); + fail("should throw an exception due to timeout, instead got " + book); + } catch (jakarta.ws.rs.ProcessingException e) { + //expected!!! + } + } + + @Test + public void testPatchBookInputStream() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/patch"; + WebClient wc = createWebClient(address).type("application/xml"); + Book book = wc.invoke("PATCH", + new ByteArrayInputStream( + "Patch123".getBytes()), + Book.class); + assertEquals("Patch", book.getName()); + wc.close(); + } + + @Test + public void testDeleteWithBody() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/deletebody"; + WebClient wc = createWebClient(address).type("application/xml").accept("application/xml"); + Book book = wc.invoke("DELETE", new Book("Delete", 123L), Book.class); + assertEquals("Delete", book.getName()); + wc.close(); + } + + @Test + public void testGetWithBody() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/getbody"; + WebClient wc = createWebClient(address).type("application/xml").accept("application/xml"); + try (Response response = wc.invoke("GET", new Book("Get", 123L))) { + assertEquals(400, response.getStatus()); + } + wc.close(); + } + + @Test + public void testRetrieveBookCustomMethodAsync() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/retrieve"; + WebClient wc = createWebClient(address).accept("application/xml"); + Future book = wc.async().method("RETRIEVE", Entity.xml(new Book("Retrieve", 123L)), + Book.class); + assertEquals("Retrieve", book.get().getName()); + wc.close(); + } + + @Test + public void testGetBookAsyncResponseNotFound() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/bookheaders/404"; + WebClient wc = createWebClient(address); + Future future = wc.async().get(Response.class); + assertEquals(404, future.get().getStatus()); + wc.close(); + } + + @Test + public void testGetBookAsyncUpdate() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/updatebook/124"; + WebClient wc = createWebClient(address); + Future future = wc.async().put(Entity.xml(new Book("My CXF Book", 124))); + final Response response = future.get(); + assertEquals(200, response.getStatus()); + final Book book = response.readEntity(Book.class); + assertThat(book.getId(), equalTo(124L)); + assertThat(book.getName(), equalTo("Updated My CXF Book")); + wc.close(); + } + + @Test + public void testGetBookAsync404() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/bookheaders/404"; + WebClient wc = createWebClient(address); + Future future = wc.async().get(Book.class); + try { + future.get(); + fail("Exception expected"); + } catch (ExecutionException ex) { + assertTrue(ex.getCause() instanceof NotFoundException); + } + wc.close(); + } + + @Test + public void testNonExistentHostnameAsync() throws Exception { + String address = "http://168.168.168.168/bookstore"; + List providers = new ArrayList<>(); + providers.add(new TestResponseFilter()); + WebClient wc = createWebClient(address, providers); + Future future = wc.async().get(Book.class); + try { + future.get(); + fail("Exception expected"); + } catch (ExecutionException ex) { + Throwable cause = ex.getCause(); + assertTrue(cause instanceof ProcessingException); + assertTrue(ex.getCause().getCause() instanceof IOException); + } finally { + wc.close(); + } + } + + @Test + public void testNonExistentHostnameGet() throws Exception { + String address = "http://168.168.168.168/bookstore"; + Client c = ClientBuilder.newClient(); + c.register(new TestResponseFilter()); + WebTarget t1 = c.target(address); + Future future = t1.request().async().get(); + try { + future.get(); + fail("Exception expected"); + } catch (ExecutionException ex) { + Throwable cause = ex.getCause(); + assertTrue(cause instanceof ProcessingException); + assertTrue(ex.getCause().getCause() instanceof IOException); + } finally { + c.close(); + } + } + + @Test + public void testNonExistentHostnamePost() throws Exception { + Client client = ClientBuilder.newClient(); + WebTarget target = client.target("http://168.168.168.168/"); + Invocation.Builder builder = target.request(); + Entity entity = Entity.entity("entity", MediaType.WILDCARD_TYPE); + Invocation invocation = builder.buildPost(entity); + Future future = invocation.submit( + new GenericType() { + } + ); + + try { + future.get(); + } catch (Exception ex) { + Throwable cause = ex.getCause(); + assertTrue(cause instanceof ProcessingException); + } + } + + @Test + public void testPostBookProcessingException() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/"; + List providers = new ArrayList<>(); + providers.add(new FaultyBookWriter()); + WebClient wc = createWebClient(address, providers); + + Future future = wc.async().post(Entity.xml(new Book()), Book.class); + try { + future.get(); + fail("Exception expected"); + } catch (ExecutionException ex) { + assertTrue(ex.getCause() instanceof ProcessingException); + } + wc.close(); + } + + @Test + public void testGetBookResponseProcessingException() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/books/123"; + List providers = new ArrayList<>(); + providers.add(new FaultyBookReader()); + WebClient wc = createWebClient(address, providers); + + Future future = wc.async().get(Book.class); + try { + future.get(); + fail("Exception expected"); + } catch (ExecutionException ex) { + assertTrue(ex.getCause() instanceof ResponseProcessingException); + } + wc.close(); + } + + @SuppressWarnings("rawtypes") + @Test + public void testGenericInvocationCallback() throws Exception { + InvocationCallback callback = createGenericInvocationCallback(); + String address = "http://localhost:" + PORT + "/bookstore/books/check/123"; + Client client = ClientBuilder + .newBuilder() + .register(new BookServerAsyncClient.BooleanReaderWriter()) + .build(); + + client + .target(address) + .request() + .accept("text/boolean") + .async() + .get(callback) + .get(); + + assertTrue(((GenericInvocationCallback)callback).getResult().readEntity(Boolean.class)); + } + + @Test + public void testAsyncProxyPrimitiveResponse() throws Exception { + String address = "http://localhost:" + PORT; + final Holder holder = new Holder<>(); + final InvocationCallback callback = new InvocationCallback() { + public void completed(Boolean response) { + holder.value = response; + } + public void failed(Throwable error) { + } + }; + + BookStore store = JAXRSClientFactory.create(address, BookStore.class); + WebClient.getConfig(store).getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, true); + WebClient.getConfig(store).getRequestContext().put(InvocationCallback.class.getName(), callback); + + store.checkBook(123L); + Thread.sleep(3000); + assertTrue(holder.value); + } + + @Test + public void testAsyncProxyBookResponse() throws Exception { + String address = "http://localhost:" + PORT; + final Holder holder = new Holder<>(); + final InvocationCallback callback = new InvocationCallback() { + public void completed(Book response) { + holder.value = response; + } + public void failed(Throwable error) { + } + }; + + BookStore store = JAXRSClientFactory.create(address, BookStore.class); + WebClient.getConfig(store).getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, true); + WebClient.getConfig(store).getRequestContext().put(InvocationCallback.class.getName(), callback); + + Book book = store.getBookByMatrixParams("12", "3"); + assertNull(book); + Thread.sleep(3000); + assertNotNull(holder.value); + assertEquals(123L, holder.value.getId()); + } + + @Test + public void testAsyncProxyMultipleCallbacks() throws Exception { + String address = "http://localhost:" + PORT; + final Holder bookHolder = new Holder<>(); + final InvocationCallback bookCallback = new InvocationCallback() { + public void completed(Book response) { + bookHolder.value = response; + } + public void failed(Throwable error) { + } + }; + final Holder booleanHolder = new Holder<>(); + final InvocationCallback booleanCallback = new InvocationCallback() { + public void completed(Boolean response) { + booleanHolder.value = response; + } + public void failed(Throwable error) { + } + }; + List> callbacks = new ArrayList<>(); + callbacks.add(bookCallback); + callbacks.add(booleanCallback); + + BookStore store = JAXRSClientFactory.create(address, BookStore.class); + WebClient.getConfig(store).getRequestContext().put(InvocationCallback.class.getName(), callbacks); + WebClient.getConfig(store).getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, true); + + Book book = store.getBookByMatrixParams("12", "3"); + assertNull(book); + Thread.sleep(3000); + assertNotNull(bookHolder.value); + assertEquals(123L, bookHolder.value.getId()); + + store.checkBook(123L); + Thread.sleep(3000); + assertTrue(booleanHolder.value); + } + + @Test + public void testGetBookAsyncNotFoundCallback() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/bookheaders/404"; + WebClient wc = createWebClient(address); + final Holder holder = new Holder<>(); + InvocationCallback callback = createCallback(holder); + try { + wc.async().get(callback).get(); + fail("Exception expected"); + } catch (ExecutionException ex) { + assertTrue(ex.getCause() instanceof NotFoundException); + assertTrue(ex.getCause() == holder.value); + } + wc.close(); + } + + @Test + public void testClientResponseFilter() throws Exception { + final String address = "http://localhost:" + PORT + "/bookstore/books/wildcard"; + try (Response response = ClientBuilder.newClient() + .register(AddHeaderClientResponseFilter.class) + .target(address) + .request("text/plain") + .async() + .get() + .get()) { + assertEquals(200, response.getStatus()); + assertEquals("true", response.getHeaderString("X-Done")); + } + } + + @Test + public void testExceptionWhenMultipleClientResponseFilters() { + final String address = "http://localhost:" + PORT + "/bookstore/books/wildcard"; + try (Response response = ClientBuilder.newClient() + .register(AddHeaderClientResponseFilter.class) + .register(FaultyClientResponseFilter.class) + .target(address) + .request() + .async() + .put(null) + .get(10, TimeUnit.SECONDS)) { + fail("Should not be invoked"); + } catch (ExecutionException ex) { + assertThat(ex.getCause(), is(instanceOf(ResponseProcessingException.class))); + } catch (Throwable ex) { + fail("Should be handled by ResponseProcessingException block"); + } + } + + @Test + public void testExceptionInClientResponseFilter() throws Exception { + final String address = "http://localhost:" + PORT + "/bookstore/books/wildcard"; + try (Response response = ClientBuilder.newClient() + .register(FaultyClientResponseFilter.class) + .target(address) + .request("text/plain") + .async() + .get() + .get(10, TimeUnit.SECONDS)) { + fail("Should raise ResponseProcessingException"); + } catch (ExecutionException ex) { + assertThat(ex.getCause(), is(instanceOf(ResponseProcessingException.class))); + } catch (Throwable ex) { + fail("Should be handled by ResponseProcessingException block"); + } + } + + @Test + public void testExceptionInClientResponseFilterWhenNotFound() throws Exception { + final String address = "http://localhost:" + PORT + "/bookstore/notFound"; + try (Response response = ClientBuilder.newClient() + .register(FaultyClientResponseFilter.class) + .target(address) + .request("text/plain") + .async() + .put(null) + .get(10, TimeUnit.SECONDS)) { + fail("Should not be invoked"); + } catch (ExecutionException ex) { + assertThat(ex.getCause(), is(instanceOf(ResponseProcessingException.class))); + } catch (Throwable ex) { + fail("Should be handled by ResponseProcessingException block"); + } + } + + @Test + public void testNotFound() throws Exception { + final String address = "http://localhost:" + PORT + "/bookstore/notFound"; + try (Response response = ClientBuilder.newClient() + .target(address) + .request("text/plain") + .async() + .put(null) + .get(10, TimeUnit.SECONDS)) { + assertThat(response.getStatus(), equalTo(404)); + } + } + + @Test + public void testStatusAngHeadersFromStream() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/books/statusFromStream"; + WebClient wc = createWebClient(address).accept("text/xml"); + Response r = wc.async().get().get(); + assertEquals(503, r.getStatus()); + assertEquals("text/custom+plain", r.getMediaType().toString()); + assertEquals("CustomValue", r.getHeaderString("CustomHeader")); + assertEquals("Response is not available", r.readEntity(String.class)); + } + + @Test + public void testBookAsStream() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/books/streamingresponse"; + WebClient wc = createWebClient(address).accept("text/xml"); + Response r = wc.async().get().get(); + assertEquals(200, r.getStatus()); + final Book book = r.readEntity(Book.class); + assertThat(book.getId(), equalTo(124L)); + assertThat(book.getName(), equalTo("stream")); + } + + @Test + public void testSetCookieWebClient() throws Exception { + final String address = "http://localhost:" + PORT + "/bookstore/setcookies"; + WebClient client = createWebClient(address); + Response r = client.type("*/*").async().get().get(); + assertEquals(200, r.getStatus()); + List cookies = r.getMetadata().get("Set-Cookie"); + assertNotNull(cookies); + assertEquals(1, cookies.size()); + } + + + @Test + public void testBookNoContent() throws Exception { + final String address = "http://localhost:" + PORT + "/bookstore/no-content"; + WebClient client = createWebClient(address); + Response r = client.type("*/*").async().post(null).get(); + assertEquals(204, r.getStatus()); + assertThat(r.readEntity(String.class), equalTo("")); + } + + @Test + public void testBookOneway() throws Exception { + final String address = "http://localhost:" + PORT + "/bookstore/oneway"; + WebClient client = createWebClient(address, new TestResponseFilter()); + Response r = client.type("*/*").async().post(null).get(); + assertEquals(202, r.getStatus()); + assertThat(r.getEntity(), is(nullValue())); + assertThat(r.getHeaderString("X-Filter"), equalTo("true")); + } + + private WebClient createWebClient(String address, Object ... providers) { + final WebClient wc = WebClient.create(address, Arrays.asList(providers)); + WebClient.getConfig(wc).getRequestContext().put(AsyncHTTPConduit.USE_ASYNC, true); + return wc; + } + + private InvocationCallback createCallback(final Holder holder) { + return new InvocationCallback() { + public void completed(Object response) { + holder.value = response; + } + public void failed(Throwable error) { + holder.value = error; + } + }; + } + + @Produces("application/xml") + private static final class FaultyBookWriter implements MessageBodyWriter { + @Override + public long getSize(Book arg0, Class arg1, Type arg2, Annotation[] arg3, MediaType arg4) { + return 0; + } + + @Override + public boolean isWriteable(Class arg0, Type arg1, Annotation[] arg2, MediaType arg3) { + return true; + } + + @Override + public void writeTo(Book arg0, Class arg1, Type arg2, Annotation[] arg3, MediaType arg4, + MultivaluedMap arg5, OutputStream arg6) throws IOException, WebApplicationException { + throw new RuntimeException(); + } + } + + @Consumes("application/xml") + private static final class FaultyBookReader implements MessageBodyReader { + @Override + public boolean isReadable(Class arg0, Type arg1, Annotation[] arg2, MediaType arg3) { + return true; + } + + @Override + public Book readFrom(Class arg0, Type arg1, Annotation[] arg2, MediaType arg3, + MultivaluedMap arg4, InputStream arg5) throws IOException, WebApplicationException { + throw new RuntimeException(); + } + } + + public static class TestResponseFilter implements ClientResponseFilter { + @Override + public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) + throws IOException { + responseContext.getHeaders().add("X-Filter", "true"); + } + } + + private static final class GenericInvocationCallback implements InvocationCallback { + private Object result; + + @Override + public void completed(final Object o) { + result = o; + } + + @Override + public void failed(final Throwable throwable) { + // complete + } + + public Response getResult() { + return (Response)result; + } + } + + @Priority(2) + public static class AddHeaderClientResponseFilter implements ClientResponseFilter { + @Override + public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) + throws IOException { + responseContext.getHeaders().add("X-Done", "true"); + } + } + + @Priority(1) + public static class FaultyClientResponseFilter implements ClientResponseFilter { + @Override + public void filter(ClientRequestContext requestContext, ClientResponseContext responseContext) + throws IOException { + throw new IOException("Exception from client response filter"); + } + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + private static InvocationCallback createGenericInvocationCallback() { + return new GenericInvocationCallback(); + } +} diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/RETRIEVE.java b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/RETRIEVE.java new file mode 100644 index 00000000000..e9346cdc3f0 --- /dev/null +++ b/systests/transports/src/test/java/org/apache/cxf/systest/hc/jaxrs/RETRIEVE.java @@ -0,0 +1,33 @@ +/** + * 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.cxf.systest.hc.jaxrs; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +import jakarta.ws.rs.HttpMethod; + +@Target({ElementType.METHOD }) +@Retention(RetentionPolicy.RUNTIME) +@HttpMethod("RETRIEVE") +public @interface RETRIEVE { + +} From d123bca291a073ba85acab5b7511c3baf5b70c7d Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Wed, 20 Nov 2024 12:03:27 -0500 Subject: [PATCH 245/430] [CXF-9021]Warning "Could not resolve Schema for datatypes.dtd" when file was found --- .../org/apache/cxf/ws/addressing/EndpointReferenceUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/org/apache/cxf/ws/addressing/EndpointReferenceUtils.java b/core/src/main/java/org/apache/cxf/ws/addressing/EndpointReferenceUtils.java index 6ca13447314..7912092d62e 100644 --- a/core/src/main/java/org/apache/cxf/ws/addressing/EndpointReferenceUtils.java +++ b/core/src/main/java/org/apache/cxf/ws/addressing/EndpointReferenceUtils.java @@ -203,6 +203,7 @@ public LSInput resolveResource(String type, String namespaceURI, String publicId impl.setByteStream(source.getByteStream()); impl.setSystemId(source.getSystemId()); impl.setPublicId(source.getPublicId()); + return impl; } } LOG.warning("Could not resolve Schema for " + systemId); From 4d8a34318074bc5b2e79ddd8be8c1981176dc980 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 20 Nov 2024 17:23:42 -0500 Subject: [PATCH 246/430] Update Spring Security to 6.4.1 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 615a99efeb6..9dd4ed48c03 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -215,7 +215,7 @@ 3.3.5 3.2.8 spring-test - 6.4.0 + 6.4.1 6.2.0 1.8.3 5.18.2 From a9bc7250882ca4efa70f166e88c317c350d20a19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 20 Nov 2024 17:32:03 -0500 Subject: [PATCH 247/430] Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.1 to 3.5.2 (#2158) Bumps [org.apache.maven.plugins:maven-surefire-plugin](https://github.com/apache/maven-surefire) from 3.5.1 to 3.5.2. - [Release notes](https://github.com/apache/maven-surefire/releases) - [Commits](https://github.com/apache/maven-surefire/compare/surefire-3.5.1...surefire-3.5.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-surefire-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 28f673bf2d6..52718d676f8 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -228,7 +228,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.1 + 3.5.2 org.apache.maven.plugins diff --git a/pom.xml b/pom.xml index f5f814282aa..aa078f89d38 100644 --- a/pom.xml +++ b/pom.xml @@ -490,7 +490,7 @@ org.apache.maven.plugins maven-surefire-plugin - 3.5.1 + 3.5.2 org.apache.maven.plugins From 5bda94dcfcb6034e096b67e71d768964d5856d80 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Thu, 21 Nov 2024 13:37:46 -0500 Subject: [PATCH 248/430] [CXF-8979]introduce context property not-use-msv-schema-validator so that we can skip msv validator when needed --- .../apache/cxf/databinding/source/SourceDataBinding.java | 1 + .../cxf/databinding/source/XMLStreamDataReader.java | 8 ++++++-- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/cxf/databinding/source/SourceDataBinding.java b/core/src/main/java/org/apache/cxf/databinding/source/SourceDataBinding.java index 5321779f805..e25e38df1dc 100644 --- a/core/src/main/java/org/apache/cxf/databinding/source/SourceDataBinding.java +++ b/core/src/main/java/org/apache/cxf/databinding/source/SourceDataBinding.java @@ -40,6 +40,7 @@ public class SourceDataBinding extends org.apache.cxf.databinding.AbstractDataBinding { public static final String PREFERRED_FORMAT = "source-preferred-format"; + public static final String NOT_USE_MSV_SCHEMA_VALIDATOR = "not-use-msv-schema-validator"; final Class preferred; diff --git a/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java b/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java index 77e832366e1..d5a40571a6c 100644 --- a/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java +++ b/core/src/main/java/org/apache/cxf/databinding/source/XMLStreamDataReader.java @@ -52,6 +52,7 @@ import org.apache.cxf.io.CachedOutputStream; import org.apache.cxf.message.Attachment; import org.apache.cxf.message.Message; +import org.apache.cxf.message.MessageUtils; import org.apache.cxf.phase.Phase; import org.apache.cxf.service.model.MessagePartInfo; import org.apache.cxf.staxutils.DepthXMLStreamReader; @@ -226,13 +227,16 @@ private Element validate(XMLStreamReader input) throws XMLStreamException, IOExc WoodstoxValidationImpl impl = new WoodstoxValidationImpl(); XMLStreamWriter nullWriter = null; - if (impl.canValidate()) { + boolean notUseMsvSchemaValidator = + MessageUtils.getContextualBoolean(message, SourceDataBinding.NOT_USE_MSV_SCHEMA_VALIDATOR, false); + if (impl.canValidate() + && !notUseMsvSchemaValidator) { nullWriter = StaxUtils.createXMLStreamWriter(new NUllOutputStream()); impl.setupValidation(nullWriter, message.getExchange().getEndpoint(), message.getExchange().getService().getServiceInfos().get(0)); } //check if the impl can still validate after the setup, possible issue loading schemas or similar - if (impl.canValidate()) { + if (impl.canValidate() && !notUseMsvSchemaValidator) { //Can use the MSV libs and woodstox to handle the schema validation during //parsing and processing. Much faster and single traversal //filter xop node From 40fdadbdd3dfb3d4d8a1ea179b47faf45f8be6d6 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 21 Nov 2024 14:35:50 -0500 Subject: [PATCH 249/430] Update Spring Boot to 3.4.0 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 52718d676f8..8f97642b2c7 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -31,7 +31,7 @@ true UTF-8 - 3.3.5 + 3.4.0 4.1.3 12.0.15 4.1.115.Final diff --git a/parent/pom.xml b/parent/pom.xml index 9dd4ed48c03..ed48cc09a7f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -212,7 +212,7 @@ 2.0.16 2.3 2.3_2 - 3.3.5 + 3.4.0 3.2.8 spring-test 6.4.1 From d0d09d5d3d630c94969fe66c229b6fe201490652 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Thu, 21 Nov 2024 17:14:20 -0500 Subject: [PATCH 250/430] [CXF-8979]add testcase --- .../SchemaValidationClientServerTest.java | 55 +++++++++++++++- .../wsdl_systest_jaxws/cxf8979-request.xml | 26 ++++++++ .../resources/wsdl_systest_jaxws/cxf8979.wsdl | 66 +++++++++++++++++++ .../resources/wsdl_systest_jaxws/cxf8979.xsd | 49 ++++++++++++++ 4 files changed, 195 insertions(+), 1 deletion(-) create mode 100644 systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979-request.xml create mode 100644 systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979.wsdl create mode 100644 systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979.xsd diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationClientServerTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationClientServerTest.java index 3c8228d6736..1f92ca6f3b7 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationClientServerTest.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/SchemaValidationClientServerTest.java @@ -19,12 +19,21 @@ package org.apache.cxf.systest.jaxws; +import java.net.URL; import java.util.HashMap; import java.util.Map; import javax.xml.namespace.QName; +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import jakarta.xml.ws.BindingProvider; +import jakarta.xml.ws.Dispatch; import jakarta.xml.ws.Endpoint; +import jakarta.xml.ws.Provider; +import jakarta.xml.ws.ServiceMode; +import jakarta.xml.ws.WebServiceProvider; +import org.apache.cxf.annotations.SchemaValidation; import org.apache.cxf.ext.logging.LoggingInInterceptor; import org.apache.cxf.ext.logging.LoggingOutInterceptor; import org.apache.cxf.jaxws.EndpointImpl; @@ -46,10 +55,12 @@ import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; + public class SchemaValidationClientServerTest extends AbstractBusClientServerTestBase { static final String PORT = allocatePort(Server.class); - + private static URL wsdlUrl; private final QName portName = new QName("http://cxf.apache.org/jaxws/schemavalidation", "servicePort"); + public static class Server extends AbstractBusTestServerBase { @@ -67,6 +78,10 @@ protected void run() { ((EndpointImpl)ep).getInInterceptors().add(new LoggingInInterceptor()); ((EndpointImpl)ep).getOutInterceptors().add(new LoggingOutInterceptor()); ep.publish(address); + EndpointImpl endpoint = (EndpointImpl)Endpoint.publish( + "http://localhost:" + PORT + "/server", new TestEndpoint()); + endpoint.getProperties().put("not-use-msv-schema-validator", "true"); + wsdlUrl = this.getClass().getClassLoader().getResource("wsdl_systest_jaxws/cxf8979.wsdl"); } public static void main(String[] args) { @@ -81,6 +96,26 @@ public static void main(String[] args) { } } } + + public static class TestClient extends Service { + + protected TestClient(URL wsdlDocumentLocation, QName serviceName) { + super(wsdlDocumentLocation, serviceName); + } + } + + @ServiceMode(value = Service.Mode.PAYLOAD) + @WebServiceProvider(wsdlLocation = "wsdl_systest_jaxws/cxf8979.wsdl", + serviceName = "TestService", portName = "TestService", targetNamespace = "http://test.namespace/") + @SchemaValidation(type = SchemaValidation.SchemaValidationType.REQUEST) + public static class TestEndpoint implements Provider { + + + @Override + public Source invoke(Source request) { + return request; + } + } @BeforeClass public static void startServers() throws Exception { @@ -157,5 +192,23 @@ public void testSchemaValidationWithMultipleXsds() throws Exception { } } + + @Test + public void testWithValidation() { + QName serviceName = new QName("http://test.namespace/", "TestService"); + QName port = new QName("http://test.namespace/", "TestService"); + TestClient service = new TestClient(wsdlUrl, serviceName); + Source request = readResource("wsdl_systest_jaxws/cxf8979-request.xml"); + Dispatch dispatcher = service.createDispatch(port, Source.class, Service.Mode.MESSAGE); + dispatcher.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, + "http://localhost:" + PORT + "/server"); + + dispatcher.invoke(request); + } + + private Source readResource(String resName) { + return new StreamSource(this.getClass().getClassLoader().getResourceAsStream(resName)); + } + } diff --git a/systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979-request.xml b/systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979-request.xml new file mode 100644 index 00000000000..d074f1cfa31 --- /dev/null +++ b/systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979-request.xml @@ -0,0 +1,26 @@ + + + + + Valid1 + Valid2 + + + diff --git a/systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979.wsdl b/systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979.wsdl new file mode 100644 index 00000000000..22dcfd6efe3 --- /dev/null +++ b/systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979.wsdl @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979.xsd b/systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979.xsd new file mode 100644 index 00000000000..e4c12e655ce --- /dev/null +++ b/systests/jaxws/src/test/resources/wsdl_systest_jaxws/cxf8979.xsd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a156bbae372f325fd5eff17d900d398e95c46ac2 Mon Sep 17 00:00:00 2001 From: Thomas Traude Date: Fri, 22 Nov 2024 16:40:32 +0100 Subject: [PATCH 251/430] [CXF-9085] Replace use of Google Guava with JDK API (#2160) Replace `com.google.common.io.Files.createTempDir` with `java.nio.file.Files.createTempDirectory`. See https://sonarsource.github.io/rspec/#/rspec/S4738 "Java features should be preferred to Guava" --- parent/pom.xml | 1 - .../org/apache/cxf/systest/jaxws/ClientServerTest.java | 9 ++++----- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index ed48cc09a7f..cfa58a6c851 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -118,7 +118,6 @@ 1.0.15 4.0.2 2.0.1 - 32.1.3-jre 3.0 5.5.0 6.5.2.Final diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java index 89e551e21a7..5d7767b1c6d 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/ClientServerTest.java @@ -30,6 +30,7 @@ import java.net.URL; import java.net.http.HttpConnectTimeoutException; import java.net.http.HttpTimeoutException; +import java.nio.file.Files; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -47,8 +48,6 @@ import org.w3c.dom.Document; -import com.google.common.io.Files; - import jakarta.xml.ws.AsyncHandler; import jakarta.xml.ws.BindingProvider; import jakarta.xml.ws.Dispatch; @@ -1017,7 +1016,7 @@ public void testEchoProviderAsync() throws Exception { @Test public void testEchoProviderThresholdAsync() throws Exception { - final File f = Files.createTempDir(); + final File f = Files.createTempDirectory(null).toFile(); LOG.info("Using temp folder: " + f.getAbsolutePath()); System.setProperty("org.apache.cxf.io.CachedOutputStream.OutputDirectory", f.getAbsolutePath()); @@ -1048,7 +1047,7 @@ public void testEchoProviderThresholdAsync() throws Exception { @Test public void testEchoProviderThresholdAsyncThrows() throws Exception { - final File f = Files.createTempDir(); + final File f = Files.createTempDirectory(null).toFile(); LOG.info("Using temp folder: " + f.getAbsolutePath()); System.setProperty("org.apache.cxf.io.CachedOutputStream.OutputDirectory", f.getAbsolutePath()); @@ -1081,7 +1080,7 @@ public void testEchoProviderThresholdAsyncThrows() throws Exception { @Test public void testEchoProviderThresholdTimeout() throws Exception { - final File f = Files.createTempDir(); + final File f = Files.createTempDirectory(null).toFile(); LOG.info("Using temp folder: " + f.getAbsolutePath()); System.setProperty("org.apache.cxf.io.CachedOutputStream.OutputDirectory", f.getAbsolutePath()); From 288008e56a113865f9b0cdaccebd045838473662 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 22 Nov 2024 12:50:54 -0500 Subject: [PATCH 252/430] Bump com.puppycrawl.tools:checkstyle from 10.18.2 to 10.20.1 (#2159) Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.18.2 to 10.20.1. - [Release notes](https://github.com/checkstyle/checkstyle/releases) - [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.18.2...checkstyle-10.20.1) --- updated-dependencies: - dependency-name: com.puppycrawl.tools:checkstyle dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index cfa58a6c851..54147913a9e 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -393,7 +393,7 @@ com.puppycrawl.tools checkstyle - 10.18.2 + 10.20.1 From 3352d1fa6dbfb89e166787628b480d1a73c00cf6 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 22 Nov 2024 13:47:19 -0500 Subject: [PATCH 253/430] Update Apache HttpClient5 to 5.4.1 and Apache HttpCore5 to 5.3.1 (#2161) --- distribution/src/main/release/samples/pom.xml | 18 ++------ parent/pom.xml | 4 +- .../asyncclient/hc5/AsyncHTTPConduit.java | 45 +++++++------------ .../hc5/AsyncHTTPConduitFactory.java | 2 +- .../hc5/URLConnectionAsyncHTTPConduit.java | 45 +++++++------------ 5 files changed, 40 insertions(+), 74 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 8f97642b2c7..36f8a4c77fd 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -32,7 +32,7 @@ true UTF-8 3.4.0 - 4.1.3 + 4.2.0-RC1 12.0.15 4.1.115.Final 4.5.14 @@ -276,28 +276,16 @@ - jdk11 + jdk17 - [11,16) + [17,) - - 2.7.6 - 5.3.24 - 2.7.6 - spring.milestone https://repo.spring.io/milestone/ Spring Milestone Repo - - netflix.candidates - https://artifactory-oss.prod.netflix.net/artifactory/maven-oss-candidates - - false - - diff --git a/parent/pom.xml b/parent/pom.xml index 54147913a9e..f18d904f5d7 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -128,8 +128,8 @@ 4.5.14 [4.3,4.5.0) 4.4.16 - 5.3.1 - 5.2.5 + 5.4.1 + 5.3.1 2.17.2 2.17.2 3.9 diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java index 8b27ffeea10..52739f60991 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java @@ -44,7 +44,6 @@ import javax.net.ssl.KeyManager; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; -import javax.net.ssl.SSLException; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; @@ -78,19 +77,16 @@ import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient; import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; import org.apache.hc.client5.http.protocol.HttpClientContext; +import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy; import org.apache.hc.core5.concurrent.BasicFuture; import org.apache.hc.core5.concurrent.FutureCallback; import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.HttpHost; import org.apache.hc.core5.http.HttpResponse; import org.apache.hc.core5.http.config.Registry; -import org.apache.hc.core5.http.nio.ssl.BasicClientTlsStrategy; import org.apache.hc.core5.http.nio.ssl.TlsStrategy; import org.apache.hc.core5.http.protocol.HttpContext; -import org.apache.hc.core5.net.NamedEndpoint; -import org.apache.hc.core5.reactor.ssl.SSLSessionInitializer; -import org.apache.hc.core5.reactor.ssl.SSLSessionVerifier; -import org.apache.hc.core5.reactor.ssl.TlsDetails; +import org.apache.hc.core5.reactor.ssl.SSLBufferMode; import org.apache.hc.core5.util.Timeout; /** @@ -571,28 +567,21 @@ public Credentials getCredentials(final AuthScope authscope, HttpContext context final HostnameVerifier verifier = org.apache.cxf.transport.https.SSLUtils .getHostnameVerifier(tlsClientParameters); - tlsStrategy = new BasicClientTlsStrategy(sslcontext, - new SSLSessionInitializer() { - @Override - public void initialize(NamedEndpoint endpoint, SSLEngine engine) { - initializeSSLEngine(sslcontext, engine); - } - }, - new SSLSessionVerifier() { - @Override - public TlsDetails verify(NamedEndpoint endpoint, SSLEngine engine) - throws SSLException { - final SSLSession sslsession = engine.getSession(); - - if (!verifier.verify(endpoint.getHostName(), sslsession)) { - throw new SSLException("Could not verify host " + endpoint.getHostName()); - } - - setSSLSession(sslsession); - return new TlsDetails(sslsession, engine.getApplicationProtocol()); - } - } - ); + String[] cipherSuites = + SSLUtils.getCiphersuitesToInclude(tlsClientParameters.getCipherSuites(), + tlsClientParameters.getCipherSuitesFilter(), + sslcontext.getSocketFactory().getDefaultCipherSuites(), + SSLUtils.getSupportedCipherSuites(sslcontext), + LOG); + + final String protocol = tlsClientParameters.getSecureSocketProtocol() != null ? tlsClientParameters + .getSecureSocketProtocol() : sslcontext.getProtocol(); + + final String[] protocols = findProtocols(protocol, + sslContext.getSupportedSSLParameters().getProtocols()); + + tlsStrategy = new DefaultClientTlsStrategy(sslcontext, protocols, + cipherSuites, SSLBufferMode.STATIC, verifier); } catch (final GeneralSecurityException e) { LOG.warning(e.getMessage()); } diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java index 634843dc195..5b98bf14344 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduitFactory.java @@ -346,7 +346,7 @@ private AsyncClient createNIOClient(HTTPClientPolicy clientPolicy, final TlsStra final Lookup tlsLookupStrategy = RegistryBuilder.create() - .register("https", (tlsStrategy != null) ? tlsStrategy : DefaultClientTlsStrategy.getSystemDefault()) + .register("https", (tlsStrategy != null) ? tlsStrategy : DefaultClientTlsStrategy.createSystemDefault()) .build(); final PoolingAsyncClientConnectionManager connectionManager = new PoolingAsyncClientConnectionManager( diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java index 6732f1e1247..09c8dd2a459 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java @@ -44,7 +44,6 @@ import javax.net.ssl.KeyManager; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; -import javax.net.ssl.SSLException; import javax.net.ssl.SSLSession; import javax.net.ssl.TrustManager; @@ -78,19 +77,16 @@ import org.apache.hc.client5.http.impl.async.CloseableHttpAsyncClient; import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider; import org.apache.hc.client5.http.protocol.HttpClientContext; +import org.apache.hc.client5.http.ssl.DefaultClientTlsStrategy; import org.apache.hc.core5.concurrent.BasicFuture; import org.apache.hc.core5.concurrent.FutureCallback; import org.apache.hc.core5.http.Header; import org.apache.hc.core5.http.HttpHost; import org.apache.hc.core5.http.HttpResponse; import org.apache.hc.core5.http.config.Registry; -import org.apache.hc.core5.http.nio.ssl.BasicClientTlsStrategy; import org.apache.hc.core5.http.nio.ssl.TlsStrategy; import org.apache.hc.core5.http.protocol.HttpContext; -import org.apache.hc.core5.net.NamedEndpoint; -import org.apache.hc.core5.reactor.ssl.SSLSessionInitializer; -import org.apache.hc.core5.reactor.ssl.SSLSessionVerifier; -import org.apache.hc.core5.reactor.ssl.TlsDetails; +import org.apache.hc.core5.reactor.ssl.SSLBufferMode; import org.apache.hc.core5.util.Timeout; /** @@ -574,28 +570,21 @@ public Credentials getCredentials(final AuthScope authscope, HttpContext context final HostnameVerifier verifier = org.apache.cxf.transport.https.SSLUtils .getHostnameVerifier(tlsClientParameters); - tlsStrategy = new BasicClientTlsStrategy(sslcontext, - new SSLSessionInitializer() { - @Override - public void initialize(NamedEndpoint endpoint, SSLEngine engine) { - initializeSSLEngine(sslcontext, engine); - } - }, - new SSLSessionVerifier() { - @Override - public TlsDetails verify(NamedEndpoint endpoint, SSLEngine engine) - throws SSLException { - final SSLSession sslsession = engine.getSession(); - - if (!verifier.verify(endpoint.getHostName(), sslsession)) { - throw new SSLException("Could not verify host " + endpoint.getHostName()); - } - - setSSLSession(sslsession); - return new TlsDetails(sslsession, engine.getApplicationProtocol()); - } - } - ); + String[] cipherSuites = + SSLUtils.getCiphersuitesToInclude(tlsClientParameters.getCipherSuites(), + tlsClientParameters.getCipherSuitesFilter(), + sslcontext.getSocketFactory().getDefaultCipherSuites(), + SSLUtils.getSupportedCipherSuites(sslcontext), + LOG); + + final String protocol = tlsClientParameters.getSecureSocketProtocol() != null ? tlsClientParameters + .getSecureSocketProtocol() : sslcontext.getProtocol(); + + final String[] protocols = findProtocols(protocol, + sslContext.getSupportedSSLParameters().getProtocols()); + + tlsStrategy = new DefaultClientTlsStrategy(sslcontext, protocols, + cipherSuites, SSLBufferMode.STATIC, verifier); } catch (final GeneralSecurityException e) { LOG.warning(e.getMessage()); } From 86155a1f8c83b49aa7085b71ff8400966e2f3dd9 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 23 Nov 2024 07:38:21 -0500 Subject: [PATCH 254/430] Update Hibernate to 6.6.2.Final (#2162) --- parent/pom.xml | 2 +- .../hibernate/SearchTypeContributor.java | 45 +++++++++++++++++++ .../org.hibernate.boot.model.TypeContributor | 1 + 3 files changed, 47 insertions(+), 1 deletion(-) create mode 100644 rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/hibernate/SearchTypeContributor.java create mode 100644 rt/rs/extensions/search/src/test/resources/META-INF/services/org.hibernate.boot.model.TypeContributor diff --git a/parent/pom.xml b/parent/pom.xml index f18d904f5d7..bffb6ea1666 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -120,7 +120,7 @@ 2.0.1 3.0 5.5.0 - 6.5.2.Final + 6.6.2.Final 8.0.1.Final 2.7.3 [4.0,4.2) diff --git a/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/hibernate/SearchTypeContributor.java b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/hibernate/SearchTypeContributor.java new file mode 100644 index 00000000000..903b8eeb1b3 --- /dev/null +++ b/rt/rs/extensions/search/src/test/java/org/apache/cxf/jaxrs/ext/search/hibernate/SearchTypeContributor.java @@ -0,0 +1,45 @@ +/** + * 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.cxf.jaxrs.ext.search.hibernate; + +import org.apache.cxf.jaxrs.ext.search.jpa.BookReview.Review; +import org.hibernate.boot.model.TypeContributions; +import org.hibernate.boot.model.TypeContributor; +import org.hibernate.service.ServiceRegistry; +import org.hibernate.type.SqlTypes; +import org.hibernate.type.descriptor.java.EnumJavaType; +import org.hibernate.type.descriptor.jdbc.EnumJdbcType; +import org.hibernate.usertype.StaticUserTypeSupport; + +public class SearchTypeContributor implements TypeContributor { + @Override + public void contribute(TypeContributions typeContributions, ServiceRegistry serviceRegistry) { + typeContributions.contributeType(new StaticUserTypeSupport<>(new EnumJavaType<>(Review.class), + new EnumJdbcType() { + private static final long serialVersionUID = 1L; + + @Override + public int getDefaultSqlTypeCode() { + return SqlTypes.VARCHAR; + } + }) + ); + } +} diff --git a/rt/rs/extensions/search/src/test/resources/META-INF/services/org.hibernate.boot.model.TypeContributor b/rt/rs/extensions/search/src/test/resources/META-INF/services/org.hibernate.boot.model.TypeContributor new file mode 100644 index 00000000000..9cd8e8e5528 --- /dev/null +++ b/rt/rs/extensions/search/src/test/resources/META-INF/services/org.hibernate.boot.model.TypeContributor @@ -0,0 +1 @@ +org.apache.cxf.jaxrs.ext.search.hibernate.SearchTypeContributor From 6ee68e3e842682fb840f78a5226f8711ff3e544d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 23 Nov 2024 10:50:48 -0500 Subject: [PATCH 255/430] Bump cxf.hibernate.em.version from 6.6.2.Final to 6.6.3.Final (#2163) Bumps `cxf.hibernate.em.version` from 6.6.2.Final to 6.6.3.Final. Updates `org.hibernate.orm:hibernate-core` from 6.6.2.Final to 6.6.3.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.3/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.2...6.6.3) Updates `org.hibernate.orm:hibernate-jcache` from 6.6.2.Final to 6.6.3.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.3/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.2...6.6.3) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.hibernate.orm:hibernate-jcache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index bffb6ea1666..52f67bd0abd 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -120,7 +120,7 @@ 2.0.1 3.0 5.5.0 - 6.6.2.Final + 6.6.3.Final 8.0.1.Final 2.7.3 [4.0,4.2) From 287a09ab934ef5d0de2790302d6107c432067f84 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 23 Nov 2024 17:24:31 -0500 Subject: [PATCH 256/430] Fix Spring Milestone repository configuration for distribution samples --- distribution/src/main/release/samples/pom.xml | 20 +++++++------------ 1 file changed, 7 insertions(+), 13 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 36f8a4c77fd..790d3406575 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -275,19 +275,6 @@ - - jdk17 - - [17,) - - - - spring.milestone - https://repo.spring.io/milestone/ - Spring Milestone Repo - - - 2.35.0 - 3.0.0 + 3.0.1 1.8.0.Final 3.0.2.Final 1.9.22.1 From 311390c4451d947c3ef8f773c6325ba13c699552 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 3 Dec 2024 09:03:54 -0500 Subject: [PATCH 277/430] Update Spring Cloud Eureka to 4.2.0 --- distribution/src/main/release/samples/pom.xml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index bb04426e579..9f6f0bfea83 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -32,7 +32,7 @@ true UTF-8 3.4.0 - 4.2.0-RC1 + 4.2.0 12.0.15 4.1.115.Final 4.5.14 @@ -293,11 +293,4 @@ false - - - spring.milestone - https://repo.spring.io/milestone/ - Spring Milestone Repo - - From e8e8681b1046923f88351c018cfec191c0f12e26 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Dec 2024 22:36:40 -0500 Subject: [PATCH 278/430] Bump org.apache.camel.springboot:camel-spring-boot-dependencies (#2180) Bumps org.apache.camel.springboot:camel-spring-boot-dependencies from 4.8.1 to 4.9.0. --- updated-dependencies: - dependency-name: org.apache.camel.springboot:camel-spring-boot-dependencies dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 9f6f0bfea83..e852075ff8c 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -51,7 +51,7 @@ 2.3.232 5.13.1.Final 2.6.7 - 4.8.1 + 4.9.0 13.5 From 2ea0a45c0c5a5df6185180e729d779a9e7d9f170 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 4 Dec 2024 22:37:04 -0500 Subject: [PATCH 279/430] Bump org.graalvm.buildtools:native-maven-plugin from 0.10.3 to 0.10.4 (#2179) Bumps [org.graalvm.buildtools:native-maven-plugin](https://github.com/graalvm/native-build-tools) from 0.10.3 to 0.10.4. - [Release notes](https://github.com/graalvm/native-build-tools/releases) - [Commits](https://github.com/graalvm/native-build-tools/commits) --- updated-dependencies: - dependency-name: org.graalvm.buildtools:native-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../src/main/release/samples/jax_rs/graalvm_basic/pom.xml | 4 ++-- distribution/src/main/release/samples/jaxws_graalvm/pom.xml | 4 ++-- .../main/release/samples/jaxws_graalvm_dynamic/client/pom.xml | 2 +- .../main/release/samples/jaxws_graalvm_dynamic/server/pom.xml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml index 6c1d1715d8e..b37952d4de8 100644 --- a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml @@ -67,7 +67,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.3 + 0.10.4 @@ -125,7 +125,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.3 + 0.10.4 diff --git a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml index 383f69a6a66..06696b1d7a7 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml @@ -92,7 +92,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.3 + 0.10.4 @@ -146,7 +146,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.3 + 0.10.4 diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml index 6936a3a8e91..dea2c83c2cf 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml @@ -41,7 +41,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.3 + 0.10.4 diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml index 4401a9851f1..e30e3110436 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml @@ -68,7 +68,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.3 + 0.10.4 From 950636cf6284b83f3736ecc2ca8ac24fd20583d5 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 5 Dec 2024 22:36:53 -0500 Subject: [PATCH 280/430] Update JAXB to 4.0.2 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 0327bb5b662..ba076d68454 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -151,7 +151,7 @@ 2.1.1 3.1.0 4.0.5 - 4.0.1 + 4.0.2 ${cxf.jaxb.runtime.version} 2.0.0 3.6.1.Final From dfe46604f08d402abe750812ae81a4704639ba95 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 08:26:46 -0500 Subject: [PATCH 281/430] Bump org.owasp:dependency-check-maven from 11.1.0 to 11.1.1 (#2182) Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 11.1.0 to 11.1.1. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v11.1.0...v11.1.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 1f0b29ffeb1..16bff1b7550 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 17 UTF-8 scp://people.apache.org/www/cxf.apache.org/maven-site - 11.1.0 + 11.1.1 clean install From c7066a5754689765cf265f3c6cea0abd3b0376fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 6 Dec 2024 08:27:05 -0500 Subject: [PATCH 282/430] Bump com.unboundid:unboundid-ldapsdk from 7.0.1 to 7.0.2 (#2183) Bumps [com.unboundid:unboundid-ldapsdk](https://github.com/pingidentity/ldapsdk) from 7.0.1 to 7.0.2. - [Release notes](https://github.com/pingidentity/ldapsdk/releases) - [Changelog](https://github.com/pingidentity/ldapsdk/blob/master/docs/release-notes.html) - [Commits](https://github.com/pingidentity/ldapsdk/compare/7.0.1...7.0.2) --- updated-dependencies: - dependency-name: com.unboundid:unboundid-ldapsdk dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index ba076d68454..6ea2b91fd72 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -171,7 +171,7 @@ 4.13.2 5.11.3 2.0.3 - 7.0.1 + 7.0.2 1.1.2 1.5.12 9.12.0 From fbf471f19f607a556b64a804542f67c276e2e0e2 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 6 Dec 2024 09:42:56 -0500 Subject: [PATCH 283/430] Update cxf-xjc-utils to 4.1.0 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 16bff1b7550..fa7c7312f66 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,7 @@ false 4.0.1 - 4.1.0-SNAPSHOT + 4.1.0 17 UTF-8 scp://people.apache.org/www/cxf.apache.org/maven-site From 48b66ddb28fbb31075c7dd6e4dd1a46aa88dba69 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 6 Dec 2024 09:52:45 -0500 Subject: [PATCH 284/430] Update cxf-build-utils to 4.0.2 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index fa7c7312f66..c3d1ee14680 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ false - 4.0.1 + 4.0.2 4.1.0 17 UTF-8 From b4c84facc9ccaad04eecce6bb489e899ab6fb050 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 8 Dec 2024 11:49:11 -0500 Subject: [PATCH 285/430] Update Jackson to 2.18.2 (#2184) --- parent/pom.xml | 4 +-- .../security/jose/jwejws/JAXRSJweJwsTest.java | 12 ++------ .../jose/jwejws/JAXRSJwsJsonTest.java | 7 ++--- .../jose/jwejws/JweJwsAlgorithmTest.java | 29 ++----------------- .../jose/jwejws/JweJwsReferenceTest.java | 11 ------- .../jose/jwejws/JwsHTTPHeaderTest.java | 7 ----- .../security/jose/jwt/JWTAlgorithmTest.java | 20 ------------- .../security/jose/jwt/JWTAuthnAuthzTest.java | 18 ------------ .../security/jose/jwt/JWTPropertiesTest.java | 12 -------- .../jaxrs/security/jose/jwejws/server.xml | 5 ---- .../security/jose/jwejws/serverJwsJson.xml | 3 -- 11 files changed, 9 insertions(+), 119 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index 6ea2b91fd72..492438b2806 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -130,8 +130,8 @@ 4.4.16 5.4.1 5.3.1 - 2.17.2 - 2.17.2 + 2.18.2 + 2.18.2 3.9 1.8.1 2.1.3 diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJweJwsTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJweJwsTest.java index 9b3cf2891d0..206d5cb44c0 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJweJwsTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJweJwsTest.java @@ -20,13 +20,10 @@ package org.apache.cxf.systest.jaxrs.security.jose.jwejws; import java.net.URL; -import java.util.Collections; import java.util.LinkedList; import java.util.List; import java.util.Properties; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import jakarta.annotation.Priority; import jakarta.ws.rs.BadRequestException; import org.apache.cxf.Bus; @@ -85,8 +82,7 @@ public void testJweJwkPlainTextRSA() throws Exception { @Test public void testJweJwkBookBeanRSA() throws Exception { String address = "https://localhost:" + PORT + "/jwejwkrsa"; - BookStore bs = createJweBookStore(address, - Collections.singletonList(new JacksonJsonProvider())); + BookStore bs = createJweBookStore(address, List.of()); Book book = bs.echoBook(new Book("book", 123L)); assertEquals("book", book.getName()); assertEquals(123L, book.getId()); @@ -265,8 +261,7 @@ public void testJweRsaJwsBookHMac() throws Exception { String address = "https://localhost:" + PORT + "/jwejwshmac"; HmacJwsSignatureProvider hmacProvider = new HmacJwsSignatureProvider(ENCODED_MAC_KEY, SignatureAlgorithm.HS256); - BookStore bs = createJweJwsBookStore(address, hmacProvider, - Collections.singletonList(new JacksonJsonProvider())); + BookStore bs = createJweJwsBookStore(address, hmacProvider, List.of()); Book book = bs.echoBook(new Book("book", 123L)); assertEquals("book", book.getName()); assertEquals(123L, book.getId()); @@ -303,8 +298,7 @@ public void testJwsJwkPlainTextHMacUnencoded() throws Exception { @Test public void testJwsJwkBookHMac() throws Exception { String address = "https://localhost:" + PORT + "/jwsjwkhmac"; - BookStore bs = createJwsBookStore(address, - Collections.singletonList(new JacksonJsonProvider())); + BookStore bs = createJwsBookStore(address, List.of()); Book book = bs.echoBook(new Book("book", 123L)); assertEquals("book", book.getName()); assertEquals(123L, book.getId()); diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsJsonTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsJsonTest.java index 215f2c27b90..7e8cda95da3 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsJsonTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JAXRSJwsJsonTest.java @@ -28,8 +28,6 @@ import java.util.List; import java.util.Map; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import jakarta.ws.rs.BadRequestException; import org.apache.cxf.Bus; import org.apache.cxf.bus.spring.SpringBusFactory; @@ -86,7 +84,7 @@ public void testJwsJsonBookBeanHmac() throws Exception { String address = "https://localhost:" + PORT + "/jwsjsonhmac"; BookStore bs = createBookStore(address, "org/apache/cxf/systest/jaxrs/security/secret.jwk.properties", - Collections.singletonList(new JacksonJsonProvider())); + List.of()); Book book = bs.echoBook(new Book("book", 123L)); assertEquals("book", book.getName()); assertEquals(123L, book.getId()); @@ -98,8 +96,7 @@ public void testJweCompactJwsJsonBookBeanHmac() throws Exception { return; } String address = "https://localhost:" + PORT + "/jwejwsjsonhmac"; - List extraProviders = Arrays.asList(new JacksonJsonProvider(), - new JweWriterInterceptor(), + List extraProviders = Arrays.asList(new JweWriterInterceptor(), new JweClientResponseFilter()); String jwkStoreProperty = "org/apache/cxf/systest/jaxrs/security/secret.jwk.properties"; Map props = new HashMap<>(); diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JweJwsAlgorithmTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JweJwsAlgorithmTest.java index fd5255d7138..639e661c3ce 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JweJwsAlgorithmTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JweJwsAlgorithmTest.java @@ -25,8 +25,6 @@ import java.util.List; import java.util.Map; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import jakarta.ws.rs.core.Response; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.rs.security.jose.jaxrs.JweWriterInterceptor; @@ -65,7 +63,6 @@ public void testEncryptionProperties() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweoaepgcm/bookstore/books"; @@ -92,7 +89,6 @@ public void testEncryptionDynamic() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweoaepgcm/bookstore/books"; @@ -122,7 +118,6 @@ public void testWrongKeyEncryptionAlgorithm() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweoaepgcm/bookstore/books"; @@ -148,7 +143,6 @@ public void testWrongKeyEncryptionAlgorithmKeyIncluded() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweoaepgcm/bookstore/books"; @@ -178,7 +172,6 @@ public void testWrongContentEncryptionAlgorithm() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweoaepgcm/bookstore/books"; @@ -204,7 +197,6 @@ public void testBadEncryptingKey() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweoaepgcm/bookstore/books"; @@ -230,7 +222,6 @@ public void testSmallEncryptionKeySize() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jwesmallkey/bookstore/books"; @@ -257,12 +248,9 @@ public void testManualEncryption() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); - List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); - String address = "http://localhost:" + PORT + "/jweoaepgcm/bookstore/books"; WebClient client = - WebClient.create(address, providers, busFile.toString()); + WebClient.create(address, List.of(), busFile.toString()); client.type("application/json").accept("application/json"); Map properties = new HashMap<>(); @@ -310,7 +298,6 @@ public void testEncryptionPBES() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jwepbes/bookstore/books"; @@ -339,7 +326,6 @@ public void testEncryptionPBESDifferentCount() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jwepbes/bookstore/books"; @@ -374,7 +360,6 @@ public void testSignatureProperties() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jws/bookstore/books"; @@ -401,7 +386,6 @@ public void testSignatureDynamic() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jws/bookstore/books"; @@ -431,7 +415,6 @@ public void testWrongSignatureAlgorithm() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jws/bookstore/books"; @@ -457,7 +440,6 @@ public void testWrongSignatureAlgorithmKeyIncluded() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jws/bookstore/books"; @@ -484,7 +466,6 @@ public void testBadSigningKey() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jws/bookstore/books"; @@ -511,7 +492,6 @@ public void testSignatureEllipticCurve() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jwsec/bookstore/books"; @@ -540,12 +520,9 @@ public void testManualSignature() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); - List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); - String address = "http://localhost:" + PORT + "/jws/bookstore/books"; WebClient client = - WebClient.create(address, providers, busFile.toString()); + WebClient.create(address, List.of(), busFile.toString()); client.type("application/json").accept("application/json"); Map properties = new HashMap<>(); @@ -588,7 +565,6 @@ public void testSmallSignatureKeySize() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jwssmallkey/bookstore/books"; @@ -616,7 +592,6 @@ public void testUnsignedTokenFailure() throws Exception { URL busFile = JweJwsAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwsWriterInterceptor writerInterceptor = new JwsWriterInterceptor(); writerInterceptor.setSignatureProvider(new NoneJwsSignatureProvider()); providers.add(writerInterceptor); diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JweJwsReferenceTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JweJwsReferenceTest.java index 405742d8ae9..64b855665a2 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JweJwsReferenceTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JweJwsReferenceTest.java @@ -25,8 +25,6 @@ import java.util.List; import java.util.Map; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import jakarta.ws.rs.core.Response; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.rs.security.jose.jaxrs.JweWriterInterceptor; @@ -64,7 +62,6 @@ public void testEncryptionIncludePublicKey() throws Exception { URL busFile = JweJwsReferenceTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweincludekey/bookstore/books"; @@ -91,7 +88,6 @@ public void testEncryptionIncludeCert() throws Exception { URL busFile = JweJwsReferenceTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweincludecert/bookstore/books"; @@ -128,7 +124,6 @@ public void testEncryptionIncludeCertNegativeTest() throws Exception { URL busFile = JweJwsReferenceTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweincludecert/bookstore/books"; @@ -158,7 +153,6 @@ public void testEncryptionIncludeCertSha1() throws Exception { URL busFile = JweJwsReferenceTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweincludecert/bookstore/books"; @@ -195,7 +189,6 @@ public void testEncryptionIncludeCertSha1NegativeTest() throws Exception { URL busFile = JweJwsReferenceTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JweWriterInterceptor()); String address = "http://localhost:" + PORT + "/jweincludecert/bookstore/books"; @@ -229,7 +222,6 @@ public void testSignatureIncludeCert() throws Exception { URL busFile = JweJwsReferenceTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jwsincludecert/bookstore/books"; @@ -264,7 +256,6 @@ public void testSignatureIncludeCertNegativeTest() throws Exception { URL busFile = JweJwsReferenceTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jwsincludecert/bookstore/books"; @@ -292,7 +283,6 @@ public void testSignatureIncludeCertSha1() throws Exception { URL busFile = JweJwsReferenceTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jwsincludecertsha1/bookstore/books"; @@ -328,7 +318,6 @@ public void testSignatureIncludeCertSha1NegativeTest() throws Exception { URL busFile = JweJwsReferenceTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwsWriterInterceptor()); String address = "http://localhost:" + PORT + "/jwsincludecertsha1/bookstore/books"; diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JwsHTTPHeaderTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JwsHTTPHeaderTest.java index 9c4d536b76a..8ba4b1f5316 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JwsHTTPHeaderTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwejws/JwsHTTPHeaderTest.java @@ -28,8 +28,6 @@ import java.util.Map; import java.util.Set; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.Response; import org.apache.cxf.interceptor.Fault; @@ -65,7 +63,6 @@ public void testSignHTTPHeaders() throws Exception { URL busFile = JwsHTTPHeaderTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwsWriterInterceptor jwsWriterInterceptor = new JwsWriterInterceptor(); providers.add(jwsWriterInterceptor); @@ -97,7 +94,6 @@ public void testSpecifyHeadersToSign() throws Exception { URL busFile = JwsHTTPHeaderTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwsWriterInterceptor jwsWriterInterceptor = new JwsWriterInterceptor(); jwsWriterInterceptor.setProtectHttpHeaders(true); Set headersToSign = new HashSet<>(); @@ -133,7 +129,6 @@ public void testSignAdditionalCustomHeader() throws Exception { URL busFile = JwsHTTPHeaderTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwsWriterInterceptor jwsWriterInterceptor = new JwsWriterInterceptor(); jwsWriterInterceptor.setProtectHttpHeaders(true); Set headersToSign = new HashSet<>(); @@ -168,7 +163,6 @@ public void testSignCustomHeaderRequired() throws Exception { URL busFile = JwsHTTPHeaderTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwsWriterInterceptor jwsWriterInterceptor = new JwsWriterInterceptor(); jwsWriterInterceptor.setProtectHttpHeaders(true); providers.add(jwsWriterInterceptor); @@ -208,7 +202,6 @@ public void testSignEmptyCustomHeader() throws Exception { URL busFile = JwsHTTPHeaderTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwsWriterInterceptor jwsWriterInterceptor = new JwsWriterInterceptor(); jwsWriterInterceptor.setProtectHttpHeaders(true); Set headersToSign = new HashSet<>(); diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTAlgorithmTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTAlgorithmTest.java index 168cfabe2ce..696ca5b6138 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTAlgorithmTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTAlgorithmTest.java @@ -27,8 +27,6 @@ import java.util.List; import java.util.Map; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import jakarta.ws.rs.core.Response; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.rs.security.jose.jaxrs.JwtAuthenticationClientFilter; @@ -66,7 +64,6 @@ public void testEncryptionProperties() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwtAuthenticationClientFilter clientFilter = new JwtAuthenticationClientFilter(); clientFilter.setJwsRequired(false); clientFilter.setJweRequired(true); @@ -106,7 +103,6 @@ public void testEncryptionDynamic() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwtAuthenticationClientFilter clientFilter = new JwtAuthenticationClientFilter(); clientFilter.setJwsRequired(false); clientFilter.setJweRequired(true); @@ -149,7 +145,6 @@ public void testWrongKeyEncryptionAlgorithm() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwtAuthenticationClientFilter clientFilter = new JwtAuthenticationClientFilter(); clientFilter.setJwsRequired(false); clientFilter.setJweRequired(true); @@ -191,7 +186,6 @@ public void testWrongContentEncryptionAlgorithm() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwtAuthenticationClientFilter clientFilter = new JwtAuthenticationClientFilter(); clientFilter.setJwsRequired(false); clientFilter.setJweRequired(true); @@ -234,7 +228,6 @@ public void testBadEncryptingKey() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwtAuthenticationClientFilter clientFilter = new JwtAuthenticationClientFilter(); clientFilter.setJwsRequired(false); clientFilter.setJweRequired(true); @@ -277,7 +270,6 @@ public void testSignatureProperties() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwt/bookstore/books"; @@ -314,7 +306,6 @@ public void testSignatureDynamic() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwt/bookstore/books"; @@ -354,7 +345,6 @@ public void testWrongSignatureAlgorithm() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwt/bookstore/books"; @@ -390,7 +380,6 @@ public void testBadSigningKey() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwt/bookstore/books"; @@ -427,7 +416,6 @@ public void testSignatureEllipticCurve() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtec/bookstore/books"; @@ -468,7 +456,6 @@ public void testSmallSignatureKeySize() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwt/bookstore/books"; @@ -506,7 +493,6 @@ public void testUnsignedTokenSuccess() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwt/bookstore/books"; @@ -542,7 +528,6 @@ public void testUnsignedTokenFailure() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwt/bookstore/books"; @@ -574,7 +559,6 @@ public void testSignatureEncryptionProperties() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); JwtAuthenticationClientFilter clientFilter = new JwtAuthenticationClientFilter(); clientFilter.setJwsRequired(true); clientFilter.setJweRequired(true); @@ -617,7 +601,6 @@ public void testSignatureCertificateTest() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtincludecert/bookstore/books"; @@ -660,7 +643,6 @@ public void testBadSignatureCertificateTest() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtincludecert/bookstore/books"; @@ -698,7 +680,6 @@ public void testHMACSignature() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/hmacsignedjwt/bookstore/books"; @@ -737,7 +718,6 @@ public void testBadHMACSignature() throws Exception { URL busFile = JWTAlgorithmTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/hmacsignedjwt/bookstore/books"; diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTAuthnAuthzTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTAuthnAuthzTest.java index 523060c705b..5493f3a579c 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTAuthnAuthzTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTAuthnAuthzTest.java @@ -28,8 +28,6 @@ import java.util.List; import java.util.Map; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import jakarta.ws.rs.core.Response; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.rs.security.jose.jaxrs.JwtAuthenticationClientFilter; @@ -63,7 +61,6 @@ public void testAuthentication() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwt/bookstore/books"; @@ -103,7 +100,6 @@ public void testAuthenticationFailure() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwt/bookstore/books"; @@ -140,7 +136,6 @@ public void testAuthorization() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthz/bookstore/books"; @@ -182,7 +177,6 @@ public void testAuthorizationWithTwoRolesAsList() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthz/bookstore/books"; @@ -224,7 +218,6 @@ public void testAuthorizationWithTwoRolesAsString() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthz/bookstore/books"; @@ -266,7 +259,6 @@ public void testAuthorizationNoRole() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthz/bookstore/books"; @@ -302,7 +294,6 @@ public void testAuthorizationWrongRole() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthz/bookstore/books"; @@ -339,7 +330,6 @@ public void testAuthorizationRolesAllowedAnnotation() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthzannotations/bookstore/booksrolesallowed"; @@ -381,7 +371,6 @@ public void testAuthorizationRolesAllowedAnnotationGET() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthzannotations/bookstore/booksrolesallowed"; @@ -423,7 +412,6 @@ public void testAuthorizationRolesAllowedAnnotationHEAD() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthzannotations/bookstore/booksrolesallowed"; @@ -461,7 +449,6 @@ public void testAuthorizationWrongRolesAllowedAnnotation() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthzannotations/bookstore/booksrolesallowed"; @@ -499,7 +486,6 @@ public void testAuthorizationWrongRolesAllowedAnnotationGET() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthzannotations/bookstore/booksrolesallowed"; @@ -537,7 +523,6 @@ public void testAuthorizationWrongRolesAllowedAnnotationHEAD() throws Exception URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthzannotations/bookstore/booksrolesallowed"; @@ -575,7 +560,6 @@ public void testClaimsAuthorization() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthz/bookstore/booksclaims"; @@ -619,7 +603,6 @@ public void testClaimsAuthorizationWeakClaims() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthz/bookstore/booksclaims"; @@ -658,7 +641,6 @@ public void testClaimsAuthorizationNoClaims() throws Exception { URL busFile = JWTAuthnAuthzTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/signedjwtauthz/bookstore/booksclaims"; diff --git a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTPropertiesTest.java b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTPropertiesTest.java index 670c0554605..c62d8d5c141 100644 --- a/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTPropertiesTest.java +++ b/systests/rs-security/src/test/java/org/apache/cxf/systest/jaxrs/security/jose/jwt/JWTPropertiesTest.java @@ -28,8 +28,6 @@ import java.util.List; import java.util.Map; -import com.fasterxml.jackson.jakarta.rs.json.JacksonJsonProvider; - import jakarta.ws.rs.core.Response; import org.apache.cxf.jaxrs.client.WebClient; import org.apache.cxf.rs.security.jose.jaxrs.JwtAuthenticationClientFilter; @@ -63,7 +61,6 @@ public void testExpiredToken() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwt/bookstore/books"; @@ -99,7 +96,6 @@ public void testFutureToken() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwt/bookstore/books"; @@ -134,7 +130,6 @@ public void testNearFutureTokenFailure() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwt/bookstore/books"; @@ -169,7 +164,6 @@ public void testNearFutureTokenSuccess() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwtnearfuture/bookstore/books"; @@ -204,7 +198,6 @@ public void testNotBeforeFailure() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwt/bookstore/books"; @@ -240,7 +233,6 @@ public void testNotBeforeSuccess() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwtnearfuture/bookstore/books"; @@ -276,7 +268,6 @@ public void testSetClaimsDirectly() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwt/bookstore/books"; @@ -307,7 +298,6 @@ public void testBadAudience() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwt/bookstore/books"; @@ -339,7 +329,6 @@ public void testNoAudience() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwt/bookstore/books"; @@ -369,7 +358,6 @@ public void testMultipleAudiences() throws Exception { URL busFile = JWTPropertiesTest.class.getResource("client.xml"); List providers = new ArrayList<>(); - providers.add(new JacksonJsonProvider()); providers.add(new JwtAuthenticationClientFilter()); String address = "https://localhost:" + PORT + "/unsignedjwt/bookstore/books"; diff --git a/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/server.xml b/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/server.xml index b948abe04aa..425e817776b 100644 --- a/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/server.xml +++ b/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/server.xml @@ -163,7 +163,6 @@ under the License. - @@ -171,7 +170,6 @@ under the License. - @@ -212,7 +210,6 @@ under the License. - @@ -229,7 +226,6 @@ under the License. - @@ -243,7 +239,6 @@ under the License. - diff --git a/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverJwsJson.xml b/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverJwsJson.xml index bdcd01fc5b1..1313eb84cea 100644 --- a/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverJwsJson.xml +++ b/systests/rs-security/src/test/resources/org/apache/cxf/systest/jaxrs/security/jose/jwejws/serverJwsJson.xml @@ -48,7 +48,6 @@ under the License. - @@ -56,7 +55,6 @@ under the License. - @@ -73,7 +71,6 @@ under the License. - From e92a08bc19bd7db1b1a306315c4b08a292cf2909 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 8 Dec 2024 21:04:25 -0500 Subject: [PATCH 286/430] Fix JAXB version and XML namespace for jms-spec-wsdl.xsd --- .../src/main/resources/schemas/wsdl/spec/jms-spec-wsdl.xsd | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rt/transports/jms/src/main/resources/schemas/wsdl/spec/jms-spec-wsdl.xsd b/rt/transports/jms/src/main/resources/schemas/wsdl/spec/jms-spec-wsdl.xsd index 12e5a293ae5..e241e6d3e8b 100644 --- a/rt/transports/jms/src/main/resources/schemas/wsdl/spec/jms-spec-wsdl.xsd +++ b/rt/transports/jms/src/main/resources/schemas/wsdl/spec/jms-spec-wsdl.xsd @@ -16,9 +16,9 @@ --> + elementFormDefault="qualified" jaxb:version="3.0"> From eb10a6721661a106c6e3bfbd303ea6061b88e323 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 8 Dec 2024 22:40:58 -0500 Subject: [PATCH 287/430] Bump actions/cache from 4.1.2 to 4.2.0 (#2190) Bumps [actions/cache](https://github.com/actions/cache) from 4.1.2 to 4.2.0. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/6849a6489940f00c2f30c0fb92c6274307ccb58a...1bd1e32a3bdc45362d1e726936510720a7c30a57) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 5d4a8fedb89..76e753e85dd 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -36,7 +36,7 @@ jobs: distribution: 'temurin' java-version: '17' - name: Cache local Maven repository - uses: actions/cache@6849a6489940f00c2f30c0fb92c6274307ccb58a # v4.1.2 + uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} From 80e803bc50256fd0f1b5a371658fa09e6265a6fa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 08:56:01 -0500 Subject: [PATCH 288/430] Bump cxf.opentelemetry.version from 1.44.1 to 1.45.0 (#2187) Bumps `cxf.opentelemetry.version` from 1.44.1 to 1.45.0. Updates `io.opentelemetry:opentelemetry-bom` from 1.44.1 to 1.45.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-java/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-java/compare/v1.44.1...v1.45.0) Updates `io.opentelemetry:opentelemetry-opentracing-shim` from 1.44.1 to 1.45.0 - [Release notes](https://github.com/open-telemetry/opentelemetry-java/releases) - [Changelog](https://github.com/open-telemetry/opentelemetry-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/opentelemetry-java/compare/v1.44.1...v1.45.0) --- updated-dependencies: - dependency-name: io.opentelemetry:opentelemetry-bom dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.opentelemetry:opentelemetry-opentracing-shim dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 492438b2806..fd6e7eafb2e 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -190,7 +190,7 @@ 2.0.69.Final 2.0.12 3.2.2 - 1.44.1 + 1.45.0 1.28.0-alpha 0.33.0 2.0.27 From df3b6880152358d4357867cc091ce72b88e8d752 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Dec 2024 08:56:17 -0500 Subject: [PATCH 289/430] Bump github/codeql-action from 3.27.5 to 3.27.6 (#2189) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.5 to 3.27.6. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/f09c1c0a94de965c15400f5634aa42fac8fb8f88...aa578102511db1f4524ed59b8cc2bae4f6e88195) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 76e753e85dd..3b94be8645e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f09c1c0a94de965c15400f5634aa42fac8fb8f88 # v3.27.5 + uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 23723340fac..37ab61b27b6 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@f09c1c0a94de965c15400f5634aa42fac8fb8f88 #tag=v2 + uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 #tag=v2 with: sarif_file: results.sarif From 964c4cf65fff7901d0d51f8637e1e64cfabfd971 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Mon, 9 Dec 2024 10:58:52 -0500 Subject: [PATCH 290/430] update CXF 4.1.0 release notes --- .../src/main/release/release_notes.txt | 87 ++++++++++++++----- 1 file changed, 65 insertions(+), 22 deletions(-) diff --git a/distribution/src/main/release/release_notes.txt b/distribution/src/main/release/release_notes.txt index 10f49daae51..85a57b4964d 100644 --- a/distribution/src/main/release/release_notes.txt +++ b/distribution/src/main/release/release_notes.txt @@ -1,27 +1,33 @@ -Apache CXF 4.0.5 Release Notes +Apache CXF 4.1.0 Release Notes 1. Overview -The 4.0.x versions of Apache CXF is a significant new version of CXF +The 4.1.x versions of Apache CXF is a significant new version of CXF that provides several new features and enhancements. New features include: -* The release is based on JakartaEE 9.1: the javax.* packages are migrated to jakarta.* -* Support of Spring Framework 6 / Spring Boot 3 -* HTTP/2 support + * The release is based on JakartaEE 10 + * Support of Spring Framework 6.1 / Spring Boot 3.3 / Spring Security 6.3 + * Support of OpenZipkin Brave 6.0 + * Jetty 12 + * Weld 5 + * Spring LDAP 3.2 + * Hazelcast 5.4.0 + * Woodstox 7.0.0 + * Hibernate 6.5 + * Hibernate Validator 8 + * AsyncHttpClient (AHC) 3.0.0 Important notes: -* Many features of CXF 4.x now require Java 17. While CXF is compiled for Java 11, -many of the dependencies require Java 17 and thus various features may only -work with Java 17. +* CXF 4.1 now requires Java 17 as minimum Users are encouraged to review the migration guide at: -https://cxf.apache.org/docs/40-migration-guide.html +https://cxf.apache.org/docs/41-migration-guide.html for further information and requirements for upgrading from earlier versions of CXF. -4.0.5 fixes over 19 JIRA issues reported by users and the community. +4.1.0 fixes over 54 JIRA issues reported by users and the community. 2. Installation Prerequisites @@ -58,39 +64,76 @@ http://issues.apache.org/jira/browse/CXF 6. Migration notes: See the migration guide at: -http://cxf.apache.org/docs/40-migration-guide.html +http://cxf.apache.org/docs/41-migration-guide.html for caveats when upgrading. 7. Specific issues, features, and improvements fixed in this version ** Bug + * [CXF-8629] - AsyncHTTPConduit (hc5) should support chunked request / response + * [CXF-8903] - Too many open files error in HttpClientHTTPConduit + * [CXF-8931] - HttpClientHTTPConduit can't disable the http chunk mode * [CXF-8951] - Concurrent WebClient usage causes massive thread overhead + * [CXF-8979] - XML (Woodstox/MSV) based schema validation is broken * [CXF-8980] - JaxRS client - receive timeout not working since CXF 4.0.1 * [CXF-8987] - Java 21 - HttpClientHTTPConduit thread locked during shutdown + * [CXF-9004] - Jetty12 : always use pre-saved HTTP_REQUEST from InMessage to populate SecurityContext * [CXF-9007] - NullPointerException in XMLStreamDataWriter.writeNode * [CXF-9009] - Async operations fail in concurrent calls * [CXF-9011] - WSDLTo JAXWS Frontend service.vm Velocity template uses deprecated URL constructor * [CXF-9015] - Typo in JsonMapObjectReaderWriter treats \h as a special character instead of \n + * [CXF-9021] - Warning "Could not resolve Schema for datatypes.dtd" when file was found * [CXF-9030] - "-suppress-generated-date" does not omit timestamps from @Generated - - - + * [CXF-9034] - IllegalAccessError: class org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine + * [CXF-9041] - Regression: CXF will only accept org.glassfish.jaxb.runtime.v2.ContextFactory + * [CXF-9042] - Several unit tests are non-idempotent + * [CXF-9052] - LoadDistributorFeature not comaptible with JAX-RS subresources + * [CXF-9057] - Chunked Stream is closed regularly when Exception is thrown + * [CXF-9058] - jaxws binding example in documentation no more work in v4.x because of jarkarta + * [CXF-9060] - WSDL2Java Service generation results in 'unused import' warnings + * [CXF-9064] - AsyncHTTPConduit doesn't close copied wrappedStream on close + * [CXF-9066] - MaskSensitiveHelper does not mask multi-line content + * [CXF-9067] - MaskSensitiveHelper incorrectly masks wrapper element + * [CXF-9074] - HttpClientHTTPConduit ignores SSLContext in TLSClientParameters (Java HttpClient) + * [CXF-9076] - Exception message is not unmarshalled with JDK17 + * [CXF-9077] - JAX-RS 3.1+: Add support for JSON-P and JSON-B providers by default + * [CXF-9078] - AsyncHTTPConduit.java causing NullPointerException when closing + * [CXF-9079] - java.lang.IllegalStateException: Encoding process already completed from LengthDelimitedEncoder + + + +** New Feature + * [CXF-8970] - ensure we can build and run without bouncycastle dependencies ** Improvement - * [CXF-8971] - Introduce a customerizedAlgorithmSuite and make all parameters of it configurable - * [CXF-8982] - LoggingFeature does not hide sensitive xml elements with namespace prefix - * [CXF-8988] - Update to Spring Security 6.1.x release line - * [CXF-8996] - JAXRS Bean introspection utility Beanspector relies on Class.getMethods natural order + * [CXF-8671] - Support Jakarta EE 10 + * [CXF-8969] - Update to Brave 6 + * [CXF-8976] - Update to OpenTelemetry v1.39.0 + * [CXF-8993] - Migrate from net.sf.cglib (cglib) to org.springframework.cglib (spring) + * [CXF-9013] - Move performance benchmark to distribution samples folder * [CXF-9016] - Upgrade Spring-Framework to 5.3.34 in Apache-cxf + * [CXF-9026] - Integrate Jacoco into Apache CXF builds to collect code coverage stats + * [CXF-9045] - Enhance samples/performance/jax-rs to accept host values + * [CXF-9046] - JAX-RS performance client should close response objects after calls. + * [CXF-9047] - http-undertow transport: enable to specify CipherSuites + * [CXF-9055] - Follow OpenTelemetry semantic conventions for trace span and its attributes + * [CXF-9059] - HttpConduit should flush output stream ahead of closing connections when HttpClient is autocloseable + * [CXF-9062] - Be able to create AsyncHTTPConduit based on URLConnectionHTTPConduit + * [CXF-9082] - SENSITIVE_HEADERS list is hardcoded + * [CXF-9085] - Replace use of Google Guava with JDK API ** Test - * [CXF-8994] - CorbaConduitTest no longer requires IBM JDK destination activation routine. - * [CXF-8997] - AbstractSTSTokenTest and TransportBindingTests no longer need to set https protocol to TLSv1 on IBM Java - * [CXF-8999] - KerberosTokenTest testKerberosViaCustomTokenAction should not run on IBM Java * [CXF-9006] - TrustedAuthorityValidatorCRLTest#testIsCertChainValid fails when using Red Hat OpenJDK on PPC64LE + * [CXF-9010] - Update benchmark soap http doc lit suite for CXF 4.1.x + * [CXF-9014] - org.apache.cxf.systest.ws.action.SignatureWhitespaceTest test fail on RH OpenJDK * [CXF-9019] - Increase unit test coverage on cxf-rt-frontend-jaxws jaxws spi package. + * [CXF-9023] - Increase unit test coverage on org.apache.cxf.bus + * [CXF-9027] - Update Performance benchmark pom values + * [CXF-9048] - Failed integration tests with upcomming santuario and wss4j library ** Task - * [CXF-9001] - CDI extension not comptible with IBM Semeru + * [CXF-8891] - Evaluate changes to org.glassfish.jaxb:jaxb-runtime:4.0.3 + * [CXF-9029] - Update to JAXB runtime 4.0.5 + From 7fb95ad266e4a5ced561a0dc56c038db43967ca4 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Mon, 9 Dec 2024 12:11:33 -0500 Subject: [PATCH 291/430] [maven-release-plugin] prepare release cxf-4.1.0 --- bom/pom.xml | 2 +- core/pom.xml | 2 +- distribution/javadoc/pom.xml | 46 +++---- distribution/manifest/pom.xml | 94 +++++++------- distribution/pom.xml | 120 +++++++++--------- .../src/main/release/samples/aegis/pom.xml | 10 +- .../release/samples/aegis_standalone/pom.xml | 4 +- .../src/main/release/samples/callback/pom.xml | 10 +- .../samples/configuration_interceptor/pom.xml | 10 +- .../main/release/samples/corba/bank/pom.xml | 4 +- .../samples/corba/bank_ws_addressing/pom.xml | 4 +- .../release/samples/corba/hello_world/pom.xml | 10 +- .../samples/groovy_spring_support/pom.xml | 8 +- .../release/samples/in_jvm_transport/pom.xml | 10 +- .../release/samples/java_first_jaxws/pom.xml | 8 +- .../java_first_jaxws_factory_bean/pom.xml | 8 +- .../release/samples/java_first_jms/pom.xml | 6 +- .../release/samples/java_first_pojo/pom.xml | 8 +- .../samples/java_first_spring_support/pom.xml | 8 +- .../main/release/samples/jax_rs/basic/pom.xml | 8 +- .../samples/jax_rs/basic_http2_jetty/pom.xml | 6 +- .../samples/jax_rs/basic_http2_netty/pom.xml | 6 +- .../jax_rs/basic_http2_undertow/pom.xml | 6 +- .../samples/jax_rs/basic_https/pom.xml | 8 +- .../release/samples/jax_rs/basic_oidc/pom.xml | 10 +- .../release/samples/jax_rs/big_query/pom.xml | 14 +- .../jax_rs/content_negotiation/pom.xml | 10 +- .../pom.xml | 2 +- .../jax_rs/description_openapi_v3/pom.xml | 2 +- .../description_openapi_v3_spring/pom.xml | 2 +- .../jax_rs/description_openapi_v3_web/pom.xml | 2 +- .../samples/jax_rs/graalvm_basic/pom.xml | 2 +- .../main/release/samples/jax_rs/odata/pom.xml | 6 +- .../release/samples/jax_rs/search/pom.xml | 14 +- .../samples/jax_rs/spring_boot/pom.xml | 8 +- .../spring_boot_scan/application/pom.xml | 6 +- .../jax_rs/spring_boot_scan/client/pom.xml | 6 +- .../spring_boot_scan/eureka-registry/pom.xml | 2 +- .../samples/jax_rs/spring_security/pom.xml | 8 +- .../release/samples/jax_rs/sse_cdi/pom.xml | 8 +- .../release/samples/jax_rs/sse_client/pom.xml | 8 +- .../release/samples/jax_rs/sse_spring/pom.xml | 6 +- .../release/samples/jax_rs/sse_tomcat/pom.xml | 6 +- .../samples/jax_rs/tracing_brave/pom.xml | 4 +- .../samples/jax_rs/tracing_micrometer/pom.xml | 14 +- .../jax_rs/tracing_opentelemetry/pom.xml | 14 +- .../tracing_opentelemetry_camel/pom.xml | 2 +- .../jax_rs/tracing_opentracing/pom.xml | 14 +- .../release/samples/jax_rs/websocket/pom.xml | 10 +- .../samples/jax_rs/websocket_web/pom.xml | 2 +- .../samples/jax_server_aegis_client/pom.xml | 10 +- .../main/release/samples/jaxws_async/pom.xml | 14 +- .../samples/jaxws_dispatch_provider/pom.xml | 10 +- .../release/samples/jaxws_graalvm/pom.xml | 4 +- .../jaxws_graalvm_dynamic/client/pom.xml | 2 +- .../jaxws_graalvm_dynamic/server/pom.xml | 4 +- .../release/samples/jaxws_handlers/pom.xml | 10 +- .../release/samples/jaxws_spring_boot/pom.xml | 6 +- .../main/release/samples/jms_pubsub/pom.xml | 4 +- .../main/release/samples/jms_queue/pom.xml | 8 +- .../release/samples/jms_spec_demo/pom.xml | 8 +- .../release/samples/jms_spring_config/pom.xml | 4 +- .../js_browser_client_java_first/pom.xml | 10 +- .../samples/js_browser_client_simple/pom.xml | 12 +- .../main/release/samples/js_client/pom.xml | 12 +- .../main/release/samples/js_provider/pom.xml | 10 +- .../src/main/release/samples/mtom/pom.xml | 10 +- .../release/samples/performance/base/pom.xml | 2 +- .../release/samples/performance/jaxrs/pom.xml | 2 +- .../performance/soap_http_doc_lit/pom.xml | 6 +- distribution/src/main/release/samples/pom.xml | 6 +- .../release/samples/restful_dispatch/pom.xml | 10 +- .../samples/ruby_spring_support/pom.xml | 8 +- .../main/release/samples/soap_header/pom.xml | 10 +- .../src/main/release/samples/sts/pom.xml | 18 +-- .../main/release/samples/throttling/pom.xml | 16 +-- .../release/samples/ws_addressing/pom.xml | 10 +- .../main/release/samples/ws_discovery/pom.xml | 14 +- .../main/release/samples/ws_eventing/pom.xml | 12 +- .../release/samples/ws_notification/pom.xml | 2 +- .../main/release/samples/ws_policy/pom.xml | 10 +- .../src/main/release/samples/ws_rm/pom.xml | 12 +- .../samples/ws_security/sign_enc/pom.xml | 18 +-- .../ws_security/sign_enc_policy/pom.xml | 14 +- .../release/samples/ws_security/ut/pom.xml | 12 +- .../samples/ws_security/ut_policy/pom.xml | 14 +- .../samples/ws_transaction/client/pom.xml | 2 +- .../release/samples/ws_transaction/pom.xml | 6 +- .../samples/ws_transaction/ws_first/pom.xml | 2 +- .../samples/ws_transaction/ws_second/pom.xml | 2 +- .../main/release/samples/wsdl_first/pom.xml | 20 +-- .../samples/wsdl_first_dynamic_client/pom.xml | 10 +- .../release/samples/wsdl_first_https/pom.xml | 10 +- .../samples/wsdl_first_pure_xml/pom.xml | 10 +- .../release/samples/wsdl_first_rpclit/pom.xml | 10 +- .../release/samples/wsdl_first_soap12/pom.xml | 10 +- .../samples/wsdl_first_xml_wrapped/pom.xml | 10 +- integration/cdi/pom.xml | 2 +- integration/jca/pom.xml | 2 +- integration/pom.xml | 2 +- integration/spring-boot/autoconfigure/pom.xml | 2 +- integration/spring-boot/pom.xml | 2 +- integration/spring-boot/starter-jaxrs/pom.xml | 2 +- integration/spring-boot/starter-jaxws/pom.xml | 2 +- integration/tracing/tracing-brave/pom.xml | 2 +- .../tracing/tracing-micrometer/pom.xml | 2 +- .../tracing/tracing-opentelemetry/pom.xml | 2 +- .../tracing/tracing-opentracing/pom.xml | 2 +- .../archetypes/cxf-jaxrs-service/pom.xml | 2 +- .../archetypes/cxf-jaxws-javafirst/pom.xml | 4 +- .../archetypes/cxf-jaxws-wsdlfirst/pom.xml | 2 +- maven-plugins/archetypes/pom.xml | 2 +- maven-plugins/codegen-plugin/pom.xml | 2 +- maven-plugins/corba/pom.xml | 2 +- maven-plugins/java2wadl-plugin/pom.xml | 4 +- maven-plugins/java2ws-plugin/pom.xml | 2 +- maven-plugins/pom.xml | 2 +- maven-plugins/wadl2java-plugin/pom.xml | 2 +- maven-plugins/wsdl-validator-plugin/pom.xml | 2 +- parent/pom.xml | 2 +- pom.xml | 4 +- rt/bindings/coloc/pom.xml | 2 +- rt/bindings/corba/pom.xml | 2 +- rt/bindings/pom.xml | 2 +- rt/bindings/soap/pom.xml | 2 +- rt/bindings/xml/pom.xml | 2 +- rt/databinding/aegis/pom.xml | 2 +- rt/databinding/jaxb/pom.xml | 2 +- rt/databinding/pom.xml | 2 +- rt/features/clustering/pom.xml | 2 +- rt/features/logging/pom.xml | 2 +- rt/features/metrics/pom.xml | 2 +- rt/features/pom.xml | 2 +- rt/features/throttling/pom.xml | 2 +- rt/frontend/jaxrs/pom.xml | 2 +- rt/frontend/jaxws/pom.xml | 2 +- rt/frontend/js/pom.xml | 2 +- rt/frontend/pom.xml | 2 +- rt/frontend/simple/pom.xml | 2 +- rt/javascript/javascript-rt/pom.xml | 2 +- rt/javascript/javascript-tests/pom.xml | 2 +- rt/javascript/pom.xml | 2 +- rt/management/pom.xml | 2 +- rt/pom.xml | 2 +- rt/rs/client/pom.xml | 2 +- rt/rs/description-common-openapi/pom.xml | 2 +- .../description-microprofile-openapi/pom.xml | 2 +- rt/rs/description-openapi-v3/pom.xml | 2 +- rt/rs/description-swagger-ui/pom.xml | 2 +- rt/rs/description/pom.xml | 2 +- rt/rs/extensions/json-basic/pom.xml | 2 +- rt/rs/extensions/providers/pom.xml | 2 +- rt/rs/extensions/reactivestreams/pom.xml | 2 +- rt/rs/extensions/reactor/pom.xml | 2 +- rt/rs/extensions/rx/pom.xml | 2 +- rt/rs/extensions/rx2/pom.xml | 2 +- rt/rs/extensions/rx3/pom.xml | 2 +- rt/rs/extensions/search/pom.xml | 2 +- rt/rs/http-sci/pom.xml | 2 +- rt/rs/microprofile-client/pom.xml | 2 +- rt/rs/pom.xml | 2 +- rt/rs/security/cors/pom.xml | 2 +- rt/rs/security/http-signature/pom.xml | 2 +- rt/rs/security/jose-parent/jose-jaxrs/pom.xml | 2 +- rt/rs/security/jose-parent/jose/pom.xml | 2 +- rt/rs/security/jose-parent/pom.xml | 2 +- .../security/oauth-parent/oauth2-saml/pom.xml | 2 +- rt/rs/security/oauth-parent/oauth2/pom.xml | 2 +- rt/rs/security/oauth-parent/pom.xml | 2 +- rt/rs/security/pom.xml | 2 +- rt/rs/security/sso/oidc/pom.xml | 2 +- rt/rs/security/sso/saml/pom.xml | 2 +- rt/rs/security/xml/pom.xml | 2 +- rt/rs/sse/pom.xml | 2 +- rt/security-saml/pom.xml | 2 +- rt/security/pom.xml | 2 +- rt/transports/http-hc/pom.xml | 2 +- rt/transports/http-hc5/pom.xml | 2 +- rt/transports/http-jetty/pom.xml | 2 +- rt/transports/http-netty/netty-client/pom.xml | 2 +- rt/transports/http-netty/netty-server/pom.xml | 2 +- rt/transports/http-undertow/pom.xml | 2 +- rt/transports/http/pom.xml | 2 +- rt/transports/jms/pom.xml | 2 +- rt/transports/local/pom.xml | 2 +- rt/transports/pom.xml | 2 +- rt/transports/udp/pom.xml | 2 +- rt/transports/websocket/pom.xml | 2 +- rt/ws/addr/pom.xml | 2 +- rt/ws/eventing/pom.xml | 2 +- rt/ws/mex/pom.xml | 2 +- rt/ws/policy/pom.xml | 2 +- rt/ws/pom.xml | 2 +- rt/ws/rm/pom.xml | 2 +- rt/ws/security/pom.xml | 2 +- rt/ws/transfer/pom.xml | 2 +- rt/wsdl/pom.xml | 2 +- services/pom.xml | 2 +- services/sts/pom.xml | 2 +- services/sts/sts-core/pom.xml | 2 +- services/sts/systests/advanced/pom.xml | 2 +- services/sts/systests/basic/pom.xml | 2 +- services/sts/systests/pom.xml | 2 +- services/sts/systests/sts-osgi/pom.xml | 2 +- services/ws-discovery/pom.xml | 2 +- .../ws-discovery/ws-discovery-api/pom.xml | 2 +- .../ws-discovery/ws-discovery-service/pom.xml | 2 +- services/wsn/pom.xml | 2 +- services/wsn/wsn-api/pom.xml | 2 +- services/wsn/wsn-core/pom.xml | 2 +- services/wsn/wsn-osgi/pom.xml | 2 +- services/xkms/pom.xml | 2 +- services/xkms/xkms-client/pom.xml | 2 +- services/xkms/xkms-common/pom.xml | 2 +- services/xkms/xkms-service/pom.xml | 2 +- services/xkms/xkms-war/pom.xml | 2 +- services/xkms/xkms-x509-handlers/pom.xml | 2 +- services/xkms/xkms-x509-repo-ldap/pom.xml | 2 +- systests/cdi/base/pom.xml | 2 +- .../cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml | 2 +- systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml | 2 +- .../cdi/cdi-owb/cdi-producers-owb/pom.xml | 2 +- systests/cdi/cdi-owb/pom.xml | 2 +- .../cdi-weld/cdi-multiple-apps-weld/pom.xml | 2 +- .../cdi/cdi-weld/cdi-no-apps-weld/pom.xml | 2 +- .../cdi/cdi-weld/cdi-producers-weld/pom.xml | 2 +- systests/cdi/cdi-weld/pom.xml | 2 +- systests/cdi/pom.xml | 2 +- .../container-integration/grizzly/pom.xml | 2 +- systests/container-integration/pom.xml | 2 +- systests/container-integration/webapp/pom.xml | 2 +- systests/databinding/pom.xml | 2 +- systests/forked/pom.xml | 2 +- systests/jaxrs/pom.xml | 2 +- systests/jaxws/pom.xml | 2 +- systests/kerberos/pom.xml | 2 +- systests/ldap/pom.xml | 2 +- systests/microprofile/client/async/pom.xml | 2 +- systests/microprofile/client/jaxrs/pom.xml | 2 +- systests/microprofile/client/nocdi/pom.xml | 2 +- systests/microprofile/client/tracing/pom.xml | 2 +- systests/microprofile/client/weld/pom.xml | 2 +- systests/microprofile/pom.xml | 2 +- systests/pom.xml | 2 +- systests/rs-http-sci/pom.xml | 2 +- systests/rs-security/pom.xml | 2 +- systests/rs-sse/pom.xml | 2 +- systests/rs-sse/rs-sse-base/pom.xml | 2 +- systests/rs-sse/rs-sse-jetty/pom.xml | 2 +- systests/rs-sse/rs-sse-tomcat/pom.xml | 2 +- systests/rs-sse/rs-sse-undertow/pom.xml | 2 +- systests/spring-boot/pom.xml | 2 +- systests/tracing/pom.xml | 2 +- systests/transport-hc5/pom.xml | 2 +- systests/transport-jms/pom.xml | 2 +- systests/transport-netty/pom.xml | 2 +- systests/transport-undertow/pom.xml | 2 +- systests/transports/pom.xml | 2 +- systests/uncategorized/pom.xml | 2 +- systests/ws-rm/pom.xml | 2 +- systests/ws-security-examples/pom.xml | 2 +- systests/ws-security/pom.xml | 2 +- systests/ws-specs/pom.xml | 2 +- systests/ws-transfer/pom.xml | 2 +- systests/wsdl_maven/codegen/pom.xml | 2 +- systests/wsdl_maven/java2ws/pom.xml | 2 +- systests/wsdl_maven/pom.xml | 2 +- testutils/pom.xml | 2 +- tools/common/pom.xml | 2 +- tools/corba/pom.xml | 2 +- tools/javato/pom.xml | 2 +- tools/javato/ws/pom.xml | 2 +- tools/pom.xml | 2 +- tools/validator/pom.xml | 2 +- tools/wadlto/jaxrs/pom.xml | 2 +- tools/wadlto/pom.xml | 2 +- tools/wsdlto/core/pom.xml | 2 +- tools/wsdlto/databinding/jaxb/pom.xml | 2 +- tools/wsdlto/frontend/javascript/pom.xml | 2 +- tools/wsdlto/frontend/jaxws/pom.xml | 2 +- tools/wsdlto/misc/pom.xml | 2 +- tools/wsdlto/pom.xml | 2 +- tools/wsdlto/test/pom.xml | 2 +- 283 files changed, 695 insertions(+), 697 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 8c2ff529d75..800ad9a1609 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -20,7 +20,7 @@ org.apache.cxf cxf - 4.1.0-SNAPSHOT + 4.1.0 4.0.0 cxf-bom diff --git a/core/pom.xml b/core/pom.xml index 210b4942b4e..b02f9560a51 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../parent/pom.xml diff --git a/distribution/javadoc/pom.xml b/distribution/javadoc/pom.xml index 5971b38380d..76ffe154cf3 100644 --- a/distribution/javadoc/pom.xml +++ b/distribution/javadoc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent @@ -38,7 +38,7 @@ org.apache.cxf cxf-bom - 4.1.0-SNAPSHOT + 4.1.0 pom import @@ -48,107 +48,107 @@ org.apache.cxf cxf-core - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-client - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-security - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-http-signature - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-jose - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-jose-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-oauth2 - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-oauth2-saml - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-security-saml - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-service-description - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-service-description-openapi-v3 - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-service-description-microprofile-openapi - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-mp-client - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-databinding-aegis - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-databinding-jaxb - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-reactor - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-search - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-features-clustering - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-transfer - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-websocket - 4.1.0-SNAPSHOT + 4.1.0 org.apache.commons diff --git a/distribution/manifest/pom.xml b/distribution/manifest/pom.xml index a9b64b48613..5b1e7f7e785 100644 --- a/distribution/manifest/pom.xml +++ b/distribution/manifest/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent @@ -39,52 +39,52 @@ ${project.groupId} cxf-tools-common - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-validator - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wsdlto-core - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-misctools - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wsdlto-databinding-jaxb - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-corba - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wsdlto-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wsdlto-frontend-javascript - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wadlto-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-java2ws - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId}.xjcplugins @@ -119,52 +119,52 @@ ${project.groupId} cxf-core - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-features-clustering - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-management - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-local - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http-hc - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http-netty-server - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http-netty-client - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-udp - 4.1.0-SNAPSHOT + 4.1.0 org.slf4j @@ -177,133 +177,133 @@ ${project.groupId} cxf-rt-transports-jms - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-bindings-soap - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-bindings-xml - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-bindings-corba - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-bindings-coloc - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-databinding-aegis - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-extension-providers - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-extension-search - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-cors - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-oauth2 - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-xml - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-addr - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-rm - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-policy - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-mex - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-security - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-frontend-js - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-frontend-simple - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-javascript - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.sts cxf-services-sts-core - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.wsn cxf-services-wsn-api - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.wsn cxf-services-wsn-core - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-api - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-service - 4.1.0-SNAPSHOT + 4.1.0 org.codehaus.jettison diff --git a/distribution/pom.xml b/distribution/pom.xml index 7d0a07ab93c..3c47d86f75e 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../parent @@ -44,52 +44,52 @@ ${project.groupId} cxf-tools-common - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-validator - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wsdlto-core - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wsdlto-frontend-javascript - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-misctools - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-corba - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wsdlto-databinding-jaxb - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wsdlto-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-wadlto-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-tools-java2ws - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId}.xjc-utils @@ -124,57 +124,57 @@ ${project.groupId} cxf-core - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-features-clustering - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-features-throttling - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-features-metrics - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-management - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-local - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-udp - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http-hc - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http-netty-server - 4.1.0-SNAPSHOT + 4.1.0 org.apache.geronimo.specs @@ -189,7 +189,7 @@ ${project.groupId} cxf-rt-transports-http-netty-client - 4.1.0-SNAPSHOT + 4.1.0 io.netty @@ -200,12 +200,12 @@ ${project.groupId} cxf-rt-transports-websocket - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-transports-http-undertow - 4.1.0-SNAPSHOT + 4.1.0 org.slf4j @@ -218,178 +218,178 @@ ${project.groupId} cxf-rt-transports-jms - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-bindings-soap - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-bindings-corba - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-bindings-xml - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-bindings-coloc - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-databinding-aegis - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-addr - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-rm - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-policy - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-mex - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-security - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-transfer - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-ws-eventing - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-frontend-js - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-frontend-simple - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-extension-providers - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-extension-search - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-cors - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-oauth2 - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-oauth2-saml - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-xml - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-sso-saml - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-sso-oidc - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-security-http-signature - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-sse - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-mp-client - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-rs-http-sci - 4.1.0-SNAPSHOT + 4.1.0 ${project.groupId} cxf-rt-javascript - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.sts cxf-services-sts-core - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.wsn cxf-services-wsn-api - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.wsn cxf-services-wsn-core - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-api - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-service - 4.1.0-SNAPSHOT + 4.1.0 org.codehaus.jettison diff --git a/distribution/src/main/release/samples/aegis/pom.xml b/distribution/src/main/release/samples/aegis/pom.xml index 4e9e41e5d26..3d7bf419ca6 100644 --- a/distribution/src/main/release/samples/aegis/pom.xml +++ b/distribution/src/main/release/samples/aegis/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -88,24 +88,24 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-databinding-aegis - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 junit diff --git a/distribution/src/main/release/samples/aegis_standalone/pom.xml b/distribution/src/main/release/samples/aegis_standalone/pom.xml index 2c7998baa18..b86a8645320 100644 --- a/distribution/src/main/release/samples/aegis_standalone/pom.xml +++ b/distribution/src/main/release/samples/aegis_standalone/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -88,7 +88,7 @@ org.apache.cxf cxf-rt-databinding-aegis - 4.1.0-SNAPSHOT + 4.1.0 net.java.dev.stax-utils diff --git a/distribution/src/main/release/samples/callback/pom.xml b/distribution/src/main/release/samples/callback/pom.xml index 0d422f7d94d..b45fba67635 100644 --- a/distribution/src/main/release/samples/callback/pom.xml +++ b/distribution/src/main/release/samples/callback/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-CallbackService @@ -117,17 +117,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/configuration_interceptor/pom.xml b/distribution/src/main/release/samples/configuration_interceptor/pom.xml index f844f156308..79a627ab649 100644 --- a/distribution/src/main/release/samples/configuration_interceptor/pom.xml +++ b/distribution/src/main/release/samples/configuration_interceptor/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -118,17 +118,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/corba/bank/pom.xml b/distribution/src/main/release/samples/corba/bank/pom.xml index 0d561813ebb..793e8a2be71 100644 --- a/distribution/src/main/release/samples/corba/bank/pom.xml +++ b/distribution/src/main/release/samples/corba/bank/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -38,7 +38,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources diff --git a/distribution/src/main/release/samples/corba/bank_ws_addressing/pom.xml b/distribution/src/main/release/samples/corba/bank_ws_addressing/pom.xml index d0fffa31a44..9cbe49ae7a4 100644 --- a/distribution/src/main/release/samples/corba/bank_ws_addressing/pom.xml +++ b/distribution/src/main/release/samples/corba/bank_ws_addressing/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -69,7 +69,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources diff --git a/distribution/src/main/release/samples/corba/hello_world/pom.xml b/distribution/src/main/release/samples/corba/hello_world/pom.xml index 72ef861ae83..364888c0104 100644 --- a/distribution/src/main/release/samples/corba/hello_world/pom.xml +++ b/distribution/src/main/release/samples/corba/hello_world/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -71,7 +71,7 @@ org.apache.cxf cxf-corbatools-maven-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -279,17 +279,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-bindings-corba - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-tools-common - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/groovy_spring_support/pom.xml b/distribution/src/main/release/samples/groovy_spring_support/pom.xml index 3aab6000784..2f2e88ea552 100644 --- a/distribution/src/main/release/samples/groovy_spring_support/pom.xml +++ b/distribution/src/main/release/samples/groovy_spring_support/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 @@ -108,18 +108,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.groovy diff --git a/distribution/src/main/release/samples/in_jvm_transport/pom.xml b/distribution/src/main/release/samples/in_jvm_transport/pom.xml index a70016e5a99..af21a717cd5 100644 --- a/distribution/src/main/release/samples/in_jvm_transport/pom.xml +++ b/distribution/src/main/release/samples/in_jvm_transport/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -87,23 +87,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-bindings-coloc - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/java_first_jaxws/pom.xml b/distribution/src/main/release/samples/java_first_jaxws/pom.xml index a36ba040187..11fb18f1772 100644 --- a/distribution/src/main/release/samples/java_first_jaxws/pom.xml +++ b/distribution/src/main/release/samples/java_first_jaxws/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 @@ -112,7 +112,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 @@ -144,12 +144,12 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/java_first_jaxws_factory_bean/pom.xml b/distribution/src/main/release/samples/java_first_jaxws_factory_bean/pom.xml index 604edb50034..b03a577a3a4 100644 --- a/distribution/src/main/release/samples/java_first_jaxws_factory_bean/pom.xml +++ b/distribution/src/main/release/samples/java_first_jaxws_factory_bean/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -82,18 +82,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/java_first_jms/pom.xml b/distribution/src/main/release/samples/java_first_jms/pom.xml index bfa3598e635..cc5c72e403a 100644 --- a/distribution/src/main/release/samples/java_first_jms/pom.xml +++ b/distribution/src/main/release/samples/java_first_jms/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -97,12 +97,12 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-jms - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/java_first_pojo/pom.xml b/distribution/src/main/release/samples/java_first_pojo/pom.xml index abda99e7be3..47493b96810 100644 --- a/distribution/src/main/release/samples/java_first_pojo/pom.xml +++ b/distribution/src/main/release/samples/java_first_pojo/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -82,18 +82,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/java_first_spring_support/pom.xml b/distribution/src/main/release/samples/java_first_spring_support/pom.xml index c853d61b24b..cb24d6e7ef4 100644 --- a/distribution/src/main/release/samples/java_first_spring_support/pom.xml +++ b/distribution/src/main/release/samples/java_first_spring_support/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 @@ -103,17 +103,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/jax_rs/basic/pom.xml b/distribution/src/main/release/samples/jax_rs/basic/pom.xml index 62826c61973..18e837c2483 100644 --- a/distribution/src/main/release/samples/jax_rs/basic/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -83,18 +83,18 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml index 6b71b6fd817..364ad3e25f8 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -94,12 +94,12 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/jax_rs/basic_http2_netty/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_http2_netty/pom.xml index 111ed941002..cace69cfa45 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_http2_netty/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_http2_netty/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -81,12 +81,12 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-netty-server - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/jax_rs/basic_http2_undertow/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_http2_undertow/pom.xml index b1a972360c3..0b757763255 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_http2_undertow/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_http2_undertow/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -81,12 +81,12 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-undertow - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/jax_rs/basic_https/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_https/pom.xml index bd6bf358829..e3dc0734d42 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_https/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_https/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -81,17 +81,17 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-client - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.httpcomponents diff --git a/distribution/src/main/release/samples/jax_rs/basic_oidc/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_oidc/pom.xml index 7f458cc7677..0356e16c23c 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_oidc/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_oidc/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -34,22 +34,22 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-jose-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-sso-oidc - 4.1.0-SNAPSHOT + 4.1.0 jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/big_query/pom.xml b/distribution/src/main/release/samples/jax_rs/big_query/pom.xml index 2e0271c11eb..cc55d29f91c 100644 --- a/distribution/src/main/release/samples/jax_rs/big_query/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/big_query/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -34,32 +34,32 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-jose-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-sso-oidc - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-features-logging - 4.1.0-SNAPSHOT + 4.1.0 jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/content_negotiation/pom.xml b/distribution/src/main/release/samples/jax_rs/content_negotiation/pom.xml index 7fbec72017a..663c6b9ed6f 100644 --- a/distribution/src/main/release/samples/jax_rs/content_negotiation/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/content_negotiation/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -83,23 +83,23 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0-SNAPSHOT + 4.1.0 org.codehaus.jettison diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/pom.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/pom.xml index fb083d8f415..fbfd0f290e9 100644 --- a/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3/pom.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_v3/pom.xml index f467d39af7d..db978963955 100644 --- a/distribution/src/main/release/samples/jax_rs/description_openapi_v3/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_spring/pom.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_spring/pom.xml index 182845104ec..4655d1f660b 100644 --- a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_spring/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_spring/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml index 5776ad40e60..03072644559 100644 --- a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml @@ -26,7 +26,7 @@ under the License. org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml index b37952d4de8..568152e0094 100644 --- a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/jax_rs/odata/pom.xml b/distribution/src/main/release/samples/jax_rs/odata/pom.xml index d91c0f51f1e..a4f09889421 100644 --- a/distribution/src/main/release/samples/jax_rs/odata/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/odata/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -57,12 +57,12 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.olingo diff --git a/distribution/src/main/release/samples/jax_rs/search/pom.xml b/distribution/src/main/release/samples/jax_rs/search/pom.xml index f868bd9a9a4..643348cb4dd 100644 --- a/distribution/src/main/release/samples/jax_rs/search/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/search/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -83,33 +83,33 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-search - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-security-cors - 4.1.0-SNAPSHOT + 4.1.0 org.apache.lucene diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_boot/pom.xml index 1d9c770615a..794a190b9e8 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_boot/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_boot/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. org.apache.cxf.samples @@ -16,7 +16,7 @@ org.apache.cxf cxf-spring-boot-starter-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.springframework.boot @@ -32,12 +32,12 @@ org.apache.cxf cxf-rt-rs-service-description-openapi-v3 - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-features-metrics - 4.1.0-SNAPSHOT + 4.1.0 io.micrometer diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/pom.xml index 91e08f6184d..6eba2c64d58 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../../.. spring-boot-sample-rs-scan-app @@ -15,7 +15,7 @@ org.apache.cxf cxf-spring-boot-starter-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.springframework.boot @@ -31,7 +31,7 @@ org.apache.cxf cxf-rt-features-metrics - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/client/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/client/pom.xml index 89cfc55182f..bfeb30070f7 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/client/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/client/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../../.. spring-boot-sample-rs-scan-client @@ -25,13 +25,13 @@ org.apache.cxf cxf-rt-rs-client - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-features-clustering - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/eureka-registry/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/eureka-registry/pom.xml index fa26f6a6a47..746a6696b28 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/eureka-registry/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/eureka-registry/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../../.. spring-boot-sample-rs-scan-eureka diff --git a/distribution/src/main/release/samples/jax_rs/spring_security/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_security/pom.xml index 0aa65aed946..236be545248 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_security/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_security/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -100,18 +100,18 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml b/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml index 374678892e3..83109db95df 100644 --- a/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml @@ -7,7 +7,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -20,19 +20,19 @@ org.apache.cxf cxf-integration-cdi - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-sse - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/jax_rs/sse_client/pom.xml b/distribution/src/main/release/samples/jax_rs/sse_client/pom.xml index 5bfdb87aa79..e0adb7ab791 100644 --- a/distribution/src/main/release/samples/jax_rs/sse_client/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/sse_client/pom.xml @@ -7,7 +7,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -15,19 +15,19 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-client - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-sse - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml b/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml index adc548d49e9..f86130c6506 100644 --- a/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml @@ -7,7 +7,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -15,13 +15,13 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-sse - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/jax_rs/sse_tomcat/pom.xml b/distribution/src/main/release/samples/jax_rs/sse_tomcat/pom.xml index 7bb3a8f6347..9f4986e990b 100644 --- a/distribution/src/main/release/samples/jax_rs/sse_tomcat/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/sse_tomcat/pom.xml @@ -7,7 +7,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -25,13 +25,13 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-sse - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/jax_rs/tracing_brave/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_brave/pom.xml index d5276f4d213..9d2d3a79e47 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_brave/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_brave/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -169,7 +169,7 @@ org.apache.cxf cxf-integration-tracing-brave - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf diff --git a/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml index a34cd2ff6aa..a1f6fd2186d 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -83,33 +83,33 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-client - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-integration-tracing-micrometer - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0-SNAPSHOT + 4.1.0 jakarta.json diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml index 85573534006..6b1f25f34d0 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -83,33 +83,33 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-client - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-integration-tracing-opentelemetry - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0-SNAPSHOT + 4.1.0 jakarta.json diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry_camel/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry_camel/pom.xml index f0a5d60eb7f..dc1c4a307d4 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry_camel/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry_camel/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml index 88d723355fb..6d54dacdb97 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -83,33 +83,33 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-client - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-integration-tracing-opentracing - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0-SNAPSHOT + 4.1.0 jakarta.json diff --git a/distribution/src/main/release/samples/jax_rs/websocket/pom.xml b/distribution/src/main/release/samples/jax_rs/websocket/pom.xml index 4faf08fc550..187579c783f 100644 --- a/distribution/src/main/release/samples/jax_rs/websocket/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/websocket/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -105,7 +105,7 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 @@ -142,17 +142,17 @@ org.apache.cxf cxf-rt-transports-websocket - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml index faf876a9295..49b65d1b758 100644 --- a/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/jax_server_aegis_client/pom.xml b/distribution/src/main/release/samples/jax_server_aegis_client/pom.xml index 587dd216ea1..8f7940cdf0d 100644 --- a/distribution/src/main/release/samples/jax_server_aegis_client/pom.xml +++ b/distribution/src/main/release/samples/jax_server_aegis_client/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -82,23 +82,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-databinding-aegis - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/jaxws_async/pom.xml b/distribution/src/main/release/samples/jaxws_async/pom.xml index 91b61be35a6..88b02b05efd 100644 --- a/distribution/src/main/release/samples/jaxws_async/pom.xml +++ b/distribution/src/main/release/samples/jaxws_async/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -37,7 +37,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -92,7 +92,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 @@ -127,17 +127,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-hc - 4.1.0-SNAPSHOT + 4.1.0 org.springframework @@ -149,7 +149,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.eclipse.jetty diff --git a/distribution/src/main/release/samples/jaxws_dispatch_provider/pom.xml b/distribution/src/main/release/samples/jaxws_dispatch_provider/pom.xml index 524ba6b504c..edcb5284026 100644 --- a/distribution/src/main/release/samples/jaxws_dispatch_provider/pom.xml +++ b/distribution/src/main/release/samples/jaxws_dispatch_provider/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-SOAPService1 @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 com.sun.xml.messaging.saaj diff --git a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml index 06696b1d7a7..cd021b3ac7c 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-SOAPService1 diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml index dea2c83c2cf..269488699b1 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml index e30e3110436..0a6ed3d5538 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -38,7 +38,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-SOAPService1 diff --git a/distribution/src/main/release/samples/jaxws_handlers/pom.xml b/distribution/src/main/release/samples/jaxws_handlers/pom.xml index 8e51a38575c..ce7613110d3 100644 --- a/distribution/src/main/release/samples/jaxws_handlers/pom.xml +++ b/distribution/src/main/release/samples/jaxws_handlers/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-SOAPService1 @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 com.sun.xml.messaging.saaj diff --git a/distribution/src/main/release/samples/jaxws_spring_boot/pom.xml b/distribution/src/main/release/samples/jaxws_spring_boot/pom.xml index d648b5d071a..4daa770e356 100644 --- a/distribution/src/main/release/samples/jaxws_spring_boot/pom.xml +++ b/distribution/src/main/release/samples/jaxws_spring_boot/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 .. spring-boot-sample-ws-cxf @@ -15,7 +15,7 @@ org.apache.cxf cxf-spring-boot-starter-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.springframework.boot @@ -31,7 +31,7 @@ org.apache.cxf cxf-rt-features-metrics - 4.1.0-SNAPSHOT + 4.1.0 io.micrometer diff --git a/distribution/src/main/release/samples/jms_pubsub/pom.xml b/distribution/src/main/release/samples/jms_pubsub/pom.xml index cd1796d8acb..c83be1e1d29 100644 --- a/distribution/src/main/release/samples/jms_pubsub/pom.xml +++ b/distribution/src/main/release/samples/jms_pubsub/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources diff --git a/distribution/src/main/release/samples/jms_queue/pom.xml b/distribution/src/main/release/samples/jms_queue/pom.xml index 7d64eb7ff4d..6ae2023203d 100644 --- a/distribution/src/main/release/samples/jms_queue/pom.xml +++ b/distribution/src/main/release/samples/jms_queue/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -137,12 +137,12 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-jms - 4.1.0-SNAPSHOT + 4.1.0 org.apache.activemq diff --git a/distribution/src/main/release/samples/jms_spec_demo/pom.xml b/distribution/src/main/release/samples/jms_spec_demo/pom.xml index bf85b8c2d33..5ea2c30fa3a 100644 --- a/distribution/src/main/release/samples/jms_spec_demo/pom.xml +++ b/distribution/src/main/release/samples/jms_spec_demo/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -137,12 +137,12 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-jms - 4.1.0-SNAPSHOT + 4.1.0 org.apache.activemq diff --git a/distribution/src/main/release/samples/jms_spring_config/pom.xml b/distribution/src/main/release/samples/jms_spring_config/pom.xml index 25e86dd7356..89c87bbf6eb 100644 --- a/distribution/src/main/release/samples/jms_spring_config/pom.xml +++ b/distribution/src/main/release/samples/jms_spring_config/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -47,7 +47,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources diff --git a/distribution/src/main/release/samples/js_browser_client_java_first/pom.xml b/distribution/src/main/release/samples/js_browser_client_java_first/pom.xml index fdae3cf4aff..abded57118c 100644 --- a/distribution/src/main/release/samples/js_browser_client_java_first/pom.xml +++ b/distribution/src/main/release/samples/js_browser_client_java_first/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -59,22 +59,22 @@ org.apache.cxf cxf-rt-javascript - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/js_browser_client_simple/pom.xml b/distribution/src/main/release/samples/js_browser_client_simple/pom.xml index 76d1d4bde34..24c3f412a98 100644 --- a/distribution/src/main/release/samples/js_browser_client_simple/pom.xml +++ b/distribution/src/main/release/samples/js_browser_client_simple/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -111,22 +111,22 @@ org.apache.cxf cxf-rt-javascript - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/js_client/pom.xml b/distribution/src/main/release/samples/js_client/pom.xml index 083cb270208..271b8240a45 100644 --- a/distribution/src/main/release/samples/js_client/pom.xml +++ b/distribution/src/main/release/samples/js_client/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -113,22 +113,22 @@ org.apache.cxf cxf-rt-javascript - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.mozilla diff --git a/distribution/src/main/release/samples/js_provider/pom.xml b/distribution/src/main/release/samples/js_provider/pom.xml index d8561c6cf75..c79048b0ee7 100644 --- a/distribution/src/main/release/samples/js_provider/pom.xml +++ b/distribution/src/main/release/samples/js_provider/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -46,7 +46,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -128,18 +128,18 @@ org.apache.cxf cxf-rt-frontend-js - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 com.sun.xml.messaging.saaj diff --git a/distribution/src/main/release/samples/mtom/pom.xml b/distribution/src/main/release/samples/mtom/pom.xml index 5a9efb7fa32..a5d6762b427 100644 --- a/distribution/src/main/release/samples/mtom/pom.xml +++ b/distribution/src/main/release/samples/mtom/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -115,18 +115,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.eclipse.angus diff --git a/distribution/src/main/release/samples/performance/base/pom.xml b/distribution/src/main/release/samples/performance/base/pom.xml index 310b9a7d1db..03bf2302498 100644 --- a/distribution/src/main/release/samples/performance/base/pom.xml +++ b/distribution/src/main/release/samples/performance/base/pom.xml @@ -23,7 +23,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/performance/jaxrs/pom.xml b/distribution/src/main/release/samples/performance/jaxrs/pom.xml index d9dbcbff839..f041030d7ad 100644 --- a/distribution/src/main/release/samples/performance/jaxrs/pom.xml +++ b/distribution/src/main/release/samples/performance/jaxrs/pom.xml @@ -23,7 +23,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/performance/soap_http_doc_lit/pom.xml b/distribution/src/main/release/samples/performance/soap_http_doc_lit/pom.xml index 6d5b5b29c5b..203681b3406 100644 --- a/distribution/src/main/release/samples/performance/soap_http_doc_lit/pom.xml +++ b/distribution/src/main/release/samples/performance/soap_http_doc_lit/pom.xml @@ -17,16 +17,14 @@ specific language governing permissions and limitations under the License. --> - + 4.0.0 org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index e852075ff8c..9745c57f2af 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.samples cxf-samples pom - 4.1.0-SNAPSHOT + 4.1.0 Apache CXF Samples Apache CXF Samples https://cxf.apache.org @@ -169,14 +169,14 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 pom import org.apache.cxf cxf - 4.1.0-SNAPSHOT + 4.1.0 pom import diff --git a/distribution/src/main/release/samples/restful_dispatch/pom.xml b/distribution/src/main/release/samples/restful_dispatch/pom.xml index 5712d6c856a..e0a70767351 100644 --- a/distribution/src/main/release/samples/restful_dispatch/pom.xml +++ b/distribution/src/main/release/samples/restful_dispatch/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -82,23 +82,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0-SNAPSHOT + 4.1.0 jakarta.ws.rs diff --git a/distribution/src/main/release/samples/ruby_spring_support/pom.xml b/distribution/src/main/release/samples/ruby_spring_support/pom.xml index 17a169ef4df..0a2d1995ab2 100644 --- a/distribution/src/main/release/samples/ruby_spring_support/pom.xml +++ b/distribution/src/main/release/samples/ruby_spring_support/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 @@ -108,18 +108,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.jruby diff --git a/distribution/src/main/release/samples/soap_header/pom.xml b/distribution/src/main/release/samples/soap_header/pom.xml index 6b98666f799..50c265cb90a 100644 --- a/distribution/src/main/release/samples/soap_header/pom.xml +++ b/distribution/src/main/release/samples/soap_header/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/sts/pom.xml b/distribution/src/main/release/samples/sts/pom.xml index afc4c5e1b05..bcdce0f9cd1 100644 --- a/distribution/src/main/release/samples/sts/pom.xml +++ b/distribution/src/main/release/samples/sts/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 .. @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -97,7 +97,7 @@ org.apache.cxf.services.sts cxf-services-sts-core - 4.1.0-SNAPSHOT + 4.1.0 @@ -130,7 +130,7 @@ org.apache.cxf.services.sts cxf-services-sts-core - 4.1.0-SNAPSHOT + 4.1.0 @@ -245,27 +245,27 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-security - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-policy - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/throttling/pom.xml b/distribution/src/main/release/samples/throttling/pom.xml index 4a24a8266f3..a452ac676d0 100644 --- a/distribution/src/main/release/samples/throttling/pom.xml +++ b/distribution/src/main/release/samples/throttling/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${basedir}/src/main/config/hello_world.wsdl @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -123,32 +123,32 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-management - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-features-metrics - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-features-throttling - 4.1.0-SNAPSHOT + 4.1.0 org.slf4j diff --git a/distribution/src/main/release/samples/ws_addressing/pom.xml b/distribution/src/main/release/samples/ws_addressing/pom.xml index 59d4d544899..cdc12689201 100644 --- a/distribution/src/main/release/samples/ws_addressing/pom.xml +++ b/distribution/src/main/release/samples/ws_addressing/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -118,17 +118,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/ws_discovery/pom.xml b/distribution/src/main/release/samples/ws_discovery/pom.xml index 872d865bd9d..5f417bc1fbe 100644 --- a/distribution/src/main/release/samples/ws_discovery/pom.xml +++ b/distribution/src/main/release/samples/ws_discovery/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -37,22 +37,22 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-api - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-service - 4.1.0-SNAPSHOT + 4.1.0 @@ -61,7 +61,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -88,7 +88,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/ws_eventing/pom.xml b/distribution/src/main/release/samples/ws_eventing/pom.xml index ba7052534ff..f87cc3fdafd 100644 --- a/distribution/src/main/release/samples/ws_eventing/pom.xml +++ b/distribution/src/main/release/samples/ws_eventing/pom.xml @@ -25,24 +25,24 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-core - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.springframework @@ -55,12 +55,12 @@ org.apache.cxf cxf-rt-ws-eventing - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-addr - 4.1.0-SNAPSHOT + 4.1.0 jakarta.servlet diff --git a/distribution/src/main/release/samples/ws_notification/pom.xml b/distribution/src/main/release/samples/ws_notification/pom.xml index 4fddf7930fc..e40c91b7c01 100644 --- a/distribution/src/main/release/samples/ws_notification/pom.xml +++ b/distribution/src/main/release/samples/ws_notification/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} diff --git a/distribution/src/main/release/samples/ws_policy/pom.xml b/distribution/src/main/release/samples/ws_policy/pom.xml index fed32744dd5..22be7f142ac 100644 --- a/distribution/src/main/release/samples/ws_policy/pom.xml +++ b/distribution/src/main/release/samples/ws_policy/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -124,17 +124,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/ws_rm/pom.xml b/distribution/src/main/release/samples/ws_rm/pom.xml index 1817e16ddc9..a8c16f845c2 100644 --- a/distribution/src/main/release/samples/ws_rm/pom.xml +++ b/distribution/src/main/release/samples/ws_rm/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -108,23 +108,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-rm - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/ws_security/sign_enc/pom.xml b/distribution/src/main/release/samples/ws_security/sign_enc/pom.xml index 7831475f932..68d565f12e1 100644 --- a/distribution/src/main/release/samples/ws_security/sign_enc/pom.xml +++ b/distribution/src/main/release/samples/ws_security/sign_enc/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -47,7 +47,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -165,38 +165,38 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-rm - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-security - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-addr - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-policy - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/ws_security/sign_enc_policy/pom.xml b/distribution/src/main/release/samples/ws_security/sign_enc_policy/pom.xml index 9be850fb453..795e685699c 100644 --- a/distribution/src/main/release/samples/ws_security/sign_enc_policy/pom.xml +++ b/distribution/src/main/release/samples/ws_security/sign_enc_policy/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -33,7 +33,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -169,27 +169,27 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-security - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-policy - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/ws_security/ut/pom.xml b/distribution/src/main/release/samples/ws_security/ut/pom.xml index 135ca5be90e..a5a1014a8b7 100644 --- a/distribution/src/main/release/samples/ws_security/ut/pom.xml +++ b/distribution/src/main/release/samples/ws_security/ut/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -154,23 +154,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-security - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/ws_security/ut_policy/pom.xml b/distribution/src/main/release/samples/ws_security/ut_policy/pom.xml index 4b10ef6918f..44836438c48 100644 --- a/distribution/src/main/release/samples/ws_security/ut_policy/pom.xml +++ b/distribution/src/main/release/samples/ws_security/ut_policy/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ../.. @@ -34,7 +34,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -198,27 +198,27 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-security - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-ws-policy - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/ws_transaction/client/pom.xml b/distribution/src/main/release/samples/ws_transaction/client/pom.xml index 33265c55b06..ada3d204318 100644 --- a/distribution/src/main/release/samples/ws_transaction/client/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/client/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.samples ws_transaction - 4.1.0-SNAPSHOT + 4.1.0 .. spring-boot-sample-ws-cxf-client diff --git a/distribution/src/main/release/samples/ws_transaction/pom.xml b/distribution/src/main/release/samples/ws_transaction/pom.xml index d8c16480229..3b425418b59 100644 --- a/distribution/src/main/release/samples/ws_transaction/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 pom @@ -45,12 +45,12 @@ org.apache.cxf cxf-rt-features-logging - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-spring-boot-starter-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.springframework.boot diff --git a/distribution/src/main/release/samples/ws_transaction/ws_first/pom.xml b/distribution/src/main/release/samples/ws_transaction/ws_first/pom.xml index af87575ffe5..8cd769d6aa8 100644 --- a/distribution/src/main/release/samples/ws_transaction/ws_first/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/ws_first/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.samples ws_transaction - 4.1.0-SNAPSHOT + 4.1.0 .. spring-boot-sample-ws-cxf-first-service diff --git a/distribution/src/main/release/samples/ws_transaction/ws_second/pom.xml b/distribution/src/main/release/samples/ws_transaction/ws_second/pom.xml index 80c9e7557ce..4366ace8b26 100644 --- a/distribution/src/main/release/samples/ws_transaction/ws_second/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/ws_second/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.samples ws_transaction - 4.1.0-SNAPSHOT + 4.1.0 .. spring-boot-sample-ws-cxf-second-service diff --git a/distribution/src/main/release/samples/wsdl_first/pom.xml b/distribution/src/main/release/samples/wsdl_first/pom.xml index 9c0fb4cfd97..5e26674999b 100644 --- a/distribution/src/main/release/samples/wsdl_first/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 @@ -64,7 +64,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -116,7 +116,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 @@ -146,7 +146,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 @@ -176,7 +176,7 @@ org.apache.cxf cxf-rt-transports-http-netty-server - 4.1.0-SNAPSHOT + 4.1.0 @@ -235,7 +235,7 @@ org.apache.cxf cxf-rt-transports-http-netty-client - 4.1.0-SNAPSHOT + 4.1.0 @@ -244,22 +244,22 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-management - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-features-metrics - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.xjc-utils diff --git a/distribution/src/main/release/samples/wsdl_first_dynamic_client/pom.xml b/distribution/src/main/release/samples/wsdl_first_dynamic_client/pom.xml index a1566f2e3df..0feb3bc4d33 100644 --- a/distribution/src/main/release/samples/wsdl_first_dynamic_client/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_dynamic_client/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -112,18 +112,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/wsdl_first_https/pom.xml b/distribution/src/main/release/samples/wsdl_first_https/pom.xml index a8f1a1562f2..e4d58aec3d5 100644 --- a/distribution/src/main/release/samples/wsdl_first_https/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_https/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${basedir}/src/main/config/hello_world.wsdl @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -198,17 +198,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 org.springframework diff --git a/distribution/src/main/release/samples/wsdl_first_pure_xml/pom.xml b/distribution/src/main/release/samples/wsdl_first_pure_xml/pom.xml index 427fd169174..daab907a1f4 100644 --- a/distribution/src/main/release/samples/wsdl_first_pure_xml/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_pure_xml/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/wsdl_first_rpclit/pom.xml b/distribution/src/main/release/samples/wsdl_first_rpclit/pom.xml index 9a83ce3af05..15dbcf0a227 100644 --- a/distribution/src/main/release/samples/wsdl_first_rpclit/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_rpclit/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/wsdl_first_soap12/pom.xml b/distribution/src/main/release/samples/wsdl_first_soap12/pom.xml index 8748133f491..5a3043bc373 100644 --- a/distribution/src/main/release/samples/wsdl_first_soap12/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_soap12/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/distribution/src/main/release/samples/wsdl_first_xml_wrapped/pom.xml b/distribution/src/main/release/samples/wsdl_first_xml_wrapped/pom.xml index 61780365076..84c38027d4d 100644 --- a/distribution/src/main/release/samples/wsdl_first_xml_wrapped/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_xml_wrapped/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0-SNAPSHOT + 4.1.0 ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0-SNAPSHOT + 4.1.0 generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0-SNAPSHOT + 4.1.0 diff --git a/integration/cdi/pom.xml b/integration/cdi/pom.xml index 0296b51cbd1..8af2bd46ccd 100644 --- a/integration/cdi/pom.xml +++ b/integration/cdi/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/integration/jca/pom.xml b/integration/jca/pom.xml index 5d1bd08f6d3..32f2048e8cd 100644 --- a/integration/jca/pom.xml +++ b/integration/jca/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/integration/pom.xml b/integration/pom.xml index a46eff2d9d6..34ff3779c0c 100644 --- a/integration/pom.xml +++ b/integration/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf - 4.1.0-SNAPSHOT + 4.1.0 jca diff --git a/integration/spring-boot/autoconfigure/pom.xml b/integration/spring-boot/autoconfigure/pom.xml index 11b0292a107..f0ce6818846 100644 --- a/integration/spring-boot/autoconfigure/pom.xml +++ b/integration/spring-boot/autoconfigure/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/integration/spring-boot/pom.xml b/integration/spring-boot/pom.xml index 37c6bfbf747..6c11a112e01 100644 --- a/integration/spring-boot/pom.xml +++ b/integration/spring-boot/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-integration - 4.1.0-SNAPSHOT + 4.1.0 autoconfigure diff --git a/integration/spring-boot/starter-jaxrs/pom.xml b/integration/spring-boot/starter-jaxrs/pom.xml index dc9e4eab7ef..cb6c0805499 100644 --- a/integration/spring-boot/starter-jaxrs/pom.xml +++ b/integration/spring-boot/starter-jaxrs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/integration/spring-boot/starter-jaxws/pom.xml b/integration/spring-boot/starter-jaxws/pom.xml index 54c92f240c4..70619e546d6 100644 --- a/integration/spring-boot/starter-jaxws/pom.xml +++ b/integration/spring-boot/starter-jaxws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/integration/tracing/tracing-brave/pom.xml b/integration/tracing/tracing-brave/pom.xml index 23f94fcf192..385ddf38176 100644 --- a/integration/tracing/tracing-brave/pom.xml +++ b/integration/tracing/tracing-brave/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/integration/tracing/tracing-micrometer/pom.xml b/integration/tracing/tracing-micrometer/pom.xml index 2ba0de9dbd0..1e5319d850d 100644 --- a/integration/tracing/tracing-micrometer/pom.xml +++ b/integration/tracing/tracing-micrometer/pom.xml @@ -8,7 +8,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/integration/tracing/tracing-opentelemetry/pom.xml b/integration/tracing/tracing-opentelemetry/pom.xml index f18bcafdd53..735a5f2ce44 100644 --- a/integration/tracing/tracing-opentelemetry/pom.xml +++ b/integration/tracing/tracing-opentelemetry/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/integration/tracing/tracing-opentracing/pom.xml b/integration/tracing/tracing-opentracing/pom.xml index f4fd71cb89b..c23a96b95b8 100644 --- a/integration/tracing/tracing-opentracing/pom.xml +++ b/integration/tracing/tracing-opentracing/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/maven-plugins/archetypes/cxf-jaxrs-service/pom.xml b/maven-plugins/archetypes/cxf-jaxrs-service/pom.xml index e53e129b354..8d45662d2f9 100644 --- a/maven-plugins/archetypes/cxf-jaxrs-service/pom.xml +++ b/maven-plugins/archetypes/cxf-jaxrs-service/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml org.apache.cxf.archetype diff --git a/maven-plugins/archetypes/cxf-jaxws-javafirst/pom.xml b/maven-plugins/archetypes/cxf-jaxws-javafirst/pom.xml index c2bfd4ffa04..278eb2fe5c0 100644 --- a/maven-plugins/archetypes/cxf-jaxws-javafirst/pom.xml +++ b/maven-plugins/archetypes/cxf-jaxws-javafirst/pom.xml @@ -22,12 +22,12 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml org.apache.cxf.archetype cxf-jaxws-javafirst - 4.1.0-SNAPSHOT + 4.1.0 maven-archetype Apache CXF Archetype - Simple JAX-WS Java First Creates a project for developing a Web service starting from Java code diff --git a/maven-plugins/archetypes/cxf-jaxws-wsdlfirst/pom.xml b/maven-plugins/archetypes/cxf-jaxws-wsdlfirst/pom.xml index afab53947e0..07367f4bcf6 100644 --- a/maven-plugins/archetypes/cxf-jaxws-wsdlfirst/pom.xml +++ b/maven-plugins/archetypes/cxf-jaxws-wsdlfirst/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml org.apache.cxf.archetype diff --git a/maven-plugins/archetypes/pom.xml b/maven-plugins/archetypes/pom.xml index 49159c02476..f15d5aaa26a 100644 --- a/maven-plugins/archetypes/pom.xml +++ b/maven-plugins/archetypes/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0-SNAPSHOT + 4.1.0 cxf-jaxws-javafirst diff --git a/maven-plugins/codegen-plugin/pom.xml b/maven-plugins/codegen-plugin/pom.xml index 41cd056f778..e7c649faebe 100644 --- a/maven-plugins/codegen-plugin/pom.xml +++ b/maven-plugins/codegen-plugin/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.plugin.codegen diff --git a/maven-plugins/corba/pom.xml b/maven-plugins/corba/pom.xml index 013b0b6166c..0f173d5a0bc 100644 --- a/maven-plugins/corba/pom.xml +++ b/maven-plugins/corba/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.plugin.corbatools diff --git a/maven-plugins/java2wadl-plugin/pom.xml b/maven-plugins/java2wadl-plugin/pom.xml index 541a65d71e4..2134d1b61a1 100644 --- a/maven-plugins/java2wadl-plugin/pom.xml +++ b/maven-plugins/java2wadl-plugin/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf cxf-java2wadl-plugin maven-plugin - 4.1.0-SNAPSHOT + 4.1.0 Apache CXF Java2WADL Maven2 Plugin Apache CXF Java2WADL Maven2 Plugin https://cxf.apache.org @@ -31,7 +31,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.plugin.java2wadl diff --git a/maven-plugins/java2ws-plugin/pom.xml b/maven-plugins/java2ws-plugin/pom.xml index f44326ed547..944fff28d5d 100644 --- a/maven-plugins/java2ws-plugin/pom.xml +++ b/maven-plugins/java2ws-plugin/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.plugin.java2ws diff --git a/maven-plugins/pom.xml b/maven-plugins/pom.xml index 5d3e81d2549..9b32ca55ee5 100644 --- a/maven-plugins/pom.xml +++ b/maven-plugins/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../parent diff --git a/maven-plugins/wadl2java-plugin/pom.xml b/maven-plugins/wadl2java-plugin/pom.xml index ea9754c928b..0d98015dcc4 100644 --- a/maven-plugins/wadl2java-plugin/pom.xml +++ b/maven-plugins/wadl2java-plugin/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.plugin.wadl2java diff --git a/maven-plugins/wsdl-validator-plugin/pom.xml b/maven-plugins/wsdl-validator-plugin/pom.xml index 55983d642c9..4adbc7c636b 100644 --- a/maven-plugins/wsdl-validator-plugin/pom.xml +++ b/maven-plugins/wsdl-validator-plugin/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.plugin.wsdl.validator diff --git a/parent/pom.xml b/parent/pom.xml index fd6e7eafb2e..c8bb42994c7 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf cxf - 4.1.0-SNAPSHOT + 4.1.0 4.0.0 cxf-parent diff --git a/pom.xml b/pom.xml index c3d1ee14680..ddf217a196d 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 4.0.0 org.apache.cxf cxf - 4.1.0-SNAPSHOT + 4.1.0 Apache CXF Apache CXF is an open-source services framework that aids in the development of services using front-end programming APIs, like JAX-WS @@ -32,7 +32,7 @@ scm:git:https://gitbox.apache.org/repos/asf/cxf.git scm:git:https://gitbox.apache.org/repos/asf/cxf.git https://gitbox.apache.org/repos/asf?p=cxf.git - HEAD + cxf-4.1.0 jira diff --git a/rt/bindings/coloc/pom.xml b/rt/bindings/coloc/pom.xml index a292f00d5ca..e6ee0dfb8d0 100644 --- a/rt/bindings/coloc/pom.xml +++ b/rt/bindings/coloc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/bindings/corba/pom.xml b/rt/bindings/corba/pom.xml index 498809b3331..a946db6de32 100644 --- a/rt/bindings/corba/pom.xml +++ b/rt/bindings/corba/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/bindings/pom.xml b/rt/bindings/pom.xml index 865862725cb..56c2bc12574 100644 --- a/rt/bindings/pom.xml +++ b/rt/bindings/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0-SNAPSHOT + 4.1.0 soap diff --git a/rt/bindings/soap/pom.xml b/rt/bindings/soap/pom.xml index 04dd0d938fb..1ecd3f491d4 100644 --- a/rt/bindings/soap/pom.xml +++ b/rt/bindings/soap/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/bindings/xml/pom.xml b/rt/bindings/xml/pom.xml index 9f03b869504..1789f8866e3 100644 --- a/rt/bindings/xml/pom.xml +++ b/rt/bindings/xml/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/databinding/aegis/pom.xml b/rt/databinding/aegis/pom.xml index a2b49ca4f54..a7231d9dab6 100644 --- a/rt/databinding/aegis/pom.xml +++ b/rt/databinding/aegis/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/databinding/jaxb/pom.xml b/rt/databinding/jaxb/pom.xml index 47d7e5a1679..b616afeaf2b 100644 --- a/rt/databinding/jaxb/pom.xml +++ b/rt/databinding/jaxb/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/databinding/pom.xml b/rt/databinding/pom.xml index dc84c921f0d..1fe405f5354 100644 --- a/rt/databinding/pom.xml +++ b/rt/databinding/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0-SNAPSHOT + 4.1.0 jaxb diff --git a/rt/features/clustering/pom.xml b/rt/features/clustering/pom.xml index aef7e3a3c84..8b88a5bc6f5 100644 --- a/rt/features/clustering/pom.xml +++ b/rt/features/clustering/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/features/logging/pom.xml b/rt/features/logging/pom.xml index ea51341798e..f94c49f7ed2 100644 --- a/rt/features/logging/pom.xml +++ b/rt/features/logging/pom.xml @@ -3,7 +3,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml cxf-rt-features-logging diff --git a/rt/features/metrics/pom.xml b/rt/features/metrics/pom.xml index 3520b3b18a6..2952056461e 100644 --- a/rt/features/metrics/pom.xml +++ b/rt/features/metrics/pom.xml @@ -3,7 +3,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml cxf-rt-features-metrics diff --git a/rt/features/pom.xml b/rt/features/pom.xml index e87a4a65fea..141d73bdb9a 100644 --- a/rt/features/pom.xml +++ b/rt/features/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0-SNAPSHOT + 4.1.0 clustering diff --git a/rt/features/throttling/pom.xml b/rt/features/throttling/pom.xml index bc778f690e7..fcbe5fb06b5 100644 --- a/rt/features/throttling/pom.xml +++ b/rt/features/throttling/pom.xml @@ -3,7 +3,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml cxf-rt-features-throttling diff --git a/rt/frontend/jaxrs/pom.xml b/rt/frontend/jaxrs/pom.xml index 7a11e12f1ed..7425198d7d6 100644 --- a/rt/frontend/jaxrs/pom.xml +++ b/rt/frontend/jaxrs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/frontend/jaxws/pom.xml b/rt/frontend/jaxws/pom.xml index 1dd0c482616..4f2ef935076 100644 --- a/rt/frontend/jaxws/pom.xml +++ b/rt/frontend/jaxws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/frontend/js/pom.xml b/rt/frontend/js/pom.xml index 4c348b725b9..a50e67e8dd9 100644 --- a/rt/frontend/js/pom.xml +++ b/rt/frontend/js/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/frontend/pom.xml b/rt/frontend/pom.xml index d9944b8dbbf..7d0a6a7f500 100644 --- a/rt/frontend/pom.xml +++ b/rt/frontend/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0-SNAPSHOT + 4.1.0 simple diff --git a/rt/frontend/simple/pom.xml b/rt/frontend/simple/pom.xml index 676cdc38bcf..bb3412bcc8a 100644 --- a/rt/frontend/simple/pom.xml +++ b/rt/frontend/simple/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/javascript/javascript-rt/pom.xml b/rt/javascript/javascript-rt/pom.xml index 1a2a011d8f4..c463754bc74 100644 --- a/rt/javascript/javascript-rt/pom.xml +++ b/rt/javascript/javascript-rt/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-runtime-javascript - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.js diff --git a/rt/javascript/javascript-tests/pom.xml b/rt/javascript/javascript-tests/pom.xml index e6d2bd23df0..e5e77173eaf 100644 --- a/rt/javascript/javascript-tests/pom.xml +++ b/rt/javascript/javascript-tests/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-runtime-javascript - 4.1.0-SNAPSHOT + 4.1.0 org.apache.cxf.js.tests diff --git a/rt/javascript/pom.xml b/rt/javascript/pom.xml index 5cdc7f77e68..b5450750950 100644 --- a/rt/javascript/pom.xml +++ b/rt/javascript/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/rt/management/pom.xml b/rt/management/pom.xml index 8eae305f44b..c3fd33c5cbd 100644 --- a/rt/management/pom.xml +++ b/rt/management/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/rt/pom.xml b/rt/pom.xml index ea69d4c9219..8541788298e 100644 --- a/rt/pom.xml +++ b/rt/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf - 4.1.0-SNAPSHOT + 4.1.0 wsdl diff --git a/rt/rs/client/pom.xml b/rt/rs/client/pom.xml index 5e7c44f4889..8f6fda34a22 100644 --- a/rt/rs/client/pom.xml +++ b/rt/rs/client/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/rs/description-common-openapi/pom.xml b/rt/rs/description-common-openapi/pom.xml index 73708f2ecd6..178fb57b3a6 100644 --- a/rt/rs/description-common-openapi/pom.xml +++ b/rt/rs/description-common-openapi/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/rs/description-microprofile-openapi/pom.xml b/rt/rs/description-microprofile-openapi/pom.xml index 67b3af20ffb..1b977d69ae8 100644 --- a/rt/rs/description-microprofile-openapi/pom.xml +++ b/rt/rs/description-microprofile-openapi/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/rs/description-openapi-v3/pom.xml b/rt/rs/description-openapi-v3/pom.xml index 3332f5bef64..ef7dee01492 100644 --- a/rt/rs/description-openapi-v3/pom.xml +++ b/rt/rs/description-openapi-v3/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/rs/description-swagger-ui/pom.xml b/rt/rs/description-swagger-ui/pom.xml index ddf8a44667c..ac1251c3aed 100644 --- a/rt/rs/description-swagger-ui/pom.xml +++ b/rt/rs/description-swagger-ui/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/rs/description/pom.xml b/rt/rs/description/pom.xml index 3d583270530..de356bf4f5d 100644 --- a/rt/rs/description/pom.xml +++ b/rt/rs/description/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/rs/extensions/json-basic/pom.xml b/rt/rs/extensions/json-basic/pom.xml index 7749718be60..7204827fa7e 100644 --- a/rt/rs/extensions/json-basic/pom.xml +++ b/rt/rs/extensions/json-basic/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/extensions/providers/pom.xml b/rt/rs/extensions/providers/pom.xml index c1b5c452722..6a4d39f73c8 100644 --- a/rt/rs/extensions/providers/pom.xml +++ b/rt/rs/extensions/providers/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/extensions/reactivestreams/pom.xml b/rt/rs/extensions/reactivestreams/pom.xml index f3d554728ee..913d2523256 100644 --- a/rt/rs/extensions/reactivestreams/pom.xml +++ b/rt/rs/extensions/reactivestreams/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/extensions/reactor/pom.xml b/rt/rs/extensions/reactor/pom.xml index e0ef029e14d..b2ecd50ac5b 100644 --- a/rt/rs/extensions/reactor/pom.xml +++ b/rt/rs/extensions/reactor/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/extensions/rx/pom.xml b/rt/rs/extensions/rx/pom.xml index 107c8895b44..b742f6401eb 100644 --- a/rt/rs/extensions/rx/pom.xml +++ b/rt/rs/extensions/rx/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/extensions/rx2/pom.xml b/rt/rs/extensions/rx2/pom.xml index a90ab013618..7348ad02d25 100644 --- a/rt/rs/extensions/rx2/pom.xml +++ b/rt/rs/extensions/rx2/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/extensions/rx3/pom.xml b/rt/rs/extensions/rx3/pom.xml index 7b878b8a9a1..e330c437a8c 100644 --- a/rt/rs/extensions/rx3/pom.xml +++ b/rt/rs/extensions/rx3/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/extensions/search/pom.xml b/rt/rs/extensions/search/pom.xml index 0a515efd748..76d351ad24c 100644 --- a/rt/rs/extensions/search/pom.xml +++ b/rt/rs/extensions/search/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/http-sci/pom.xml b/rt/rs/http-sci/pom.xml index eec1f1a1ccf..2005de279fb 100644 --- a/rt/rs/http-sci/pom.xml +++ b/rt/rs/http-sci/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/rs/microprofile-client/pom.xml b/rt/rs/microprofile-client/pom.xml index b38b088f4a1..0359f80f941 100644 --- a/rt/rs/microprofile-client/pom.xml +++ b/rt/rs/microprofile-client/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/rs/pom.xml b/rt/rs/pom.xml index 4ad5e794ac0..5a4caa9e0f2 100644 --- a/rt/rs/pom.xml +++ b/rt/rs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0-SNAPSHOT + 4.1.0 client diff --git a/rt/rs/security/cors/pom.xml b/rt/rs/security/cors/pom.xml index 25caee6890b..1690dae3e32 100644 --- a/rt/rs/security/cors/pom.xml +++ b/rt/rs/security/cors/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/security/http-signature/pom.xml b/rt/rs/security/http-signature/pom.xml index a9457654c76..adc3ab41902 100644 --- a/rt/rs/security/http-signature/pom.xml +++ b/rt/rs/security/http-signature/pom.xml @@ -29,7 +29,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/security/jose-parent/jose-jaxrs/pom.xml b/rt/rs/security/jose-parent/jose-jaxrs/pom.xml index d841b999c29..52fbb2dad91 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/pom.xml +++ b/rt/rs/security/jose-parent/jose-jaxrs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../../parent/pom.xml diff --git a/rt/rs/security/jose-parent/jose/pom.xml b/rt/rs/security/jose-parent/jose/pom.xml index 42a6562b53e..9791190349d 100644 --- a/rt/rs/security/jose-parent/jose/pom.xml +++ b/rt/rs/security/jose-parent/jose/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../../parent/pom.xml diff --git a/rt/rs/security/jose-parent/pom.xml b/rt/rs/security/jose-parent/pom.xml index 4b6487ac531..46ee8ac1598 100644 --- a/rt/rs/security/jose-parent/pom.xml +++ b/rt/rs/security/jose-parent/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt-rs-security - 4.1.0-SNAPSHOT + 4.1.0 jose diff --git a/rt/rs/security/oauth-parent/oauth2-saml/pom.xml b/rt/rs/security/oauth-parent/oauth2-saml/pom.xml index 5905642f88b..862a84e4e05 100644 --- a/rt/rs/security/oauth-parent/oauth2-saml/pom.xml +++ b/rt/rs/security/oauth-parent/oauth2-saml/pom.xml @@ -27,7 +27,7 @@ cxf-rt-rs-security-oauth-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/rt/rs/security/oauth-parent/oauth2/pom.xml b/rt/rs/security/oauth-parent/oauth2/pom.xml index 1f32110b2b2..d0c92721978 100644 --- a/rt/rs/security/oauth-parent/oauth2/pom.xml +++ b/rt/rs/security/oauth-parent/oauth2/pom.xml @@ -27,7 +27,7 @@ cxf-rt-rs-security-oauth-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/rt/rs/security/oauth-parent/pom.xml b/rt/rs/security/oauth-parent/pom.xml index f6fe1593bc8..c237a8b1d4d 100644 --- a/rt/rs/security/oauth-parent/pom.xml +++ b/rt/rs/security/oauth-parent/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/security/pom.xml b/rt/rs/security/pom.xml index f78a9c02db4..45a07079fa4 100644 --- a/rt/rs/security/pom.xml +++ b/rt/rs/security/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt-rs - 4.1.0-SNAPSHOT + 4.1.0 xml diff --git a/rt/rs/security/sso/oidc/pom.xml b/rt/rs/security/sso/oidc/pom.xml index 4414fd18429..6ab53861281 100644 --- a/rt/rs/security/sso/oidc/pom.xml +++ b/rt/rs/security/sso/oidc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../../parent/pom.xml diff --git a/rt/rs/security/sso/saml/pom.xml b/rt/rs/security/sso/saml/pom.xml index 20ef84efb2e..ddc0208123e 100644 --- a/rt/rs/security/sso/saml/pom.xml +++ b/rt/rs/security/sso/saml/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../../parent/pom.xml diff --git a/rt/rs/security/xml/pom.xml b/rt/rs/security/xml/pom.xml index def00bded57..f66d8ce74e7 100644 --- a/rt/rs/security/xml/pom.xml +++ b/rt/rs/security/xml/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/rs/sse/pom.xml b/rt/rs/sse/pom.xml index c5eb649cecb..e9d7084a897 100644 --- a/rt/rs/sse/pom.xml +++ b/rt/rs/sse/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/security-saml/pom.xml b/rt/security-saml/pom.xml index 107b1c76e52..52f685c847c 100644 --- a/rt/security-saml/pom.xml +++ b/rt/security-saml/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/rt/security/pom.xml b/rt/security/pom.xml index 3b492866ce3..825851a1764 100644 --- a/rt/security/pom.xml +++ b/rt/security/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/rt/transports/http-hc/pom.xml b/rt/transports/http-hc/pom.xml index 9bb09ca36fe..27aa223ee83 100644 --- a/rt/transports/http-hc/pom.xml +++ b/rt/transports/http-hc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/transports/http-hc5/pom.xml b/rt/transports/http-hc5/pom.xml index f4fdf52cc7e..f7b3e04438f 100644 --- a/rt/transports/http-hc5/pom.xml +++ b/rt/transports/http-hc5/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/transports/http-jetty/pom.xml b/rt/transports/http-jetty/pom.xml index dcc27d0ab13..6275d5f9389 100644 --- a/rt/transports/http-jetty/pom.xml +++ b/rt/transports/http-jetty/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/transports/http-netty/netty-client/pom.xml b/rt/transports/http-netty/netty-client/pom.xml index 52c9fdeb838..70f62cbd015 100644 --- a/rt/transports/http-netty/netty-client/pom.xml +++ b/rt/transports/http-netty/netty-client/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/transports/http-netty/netty-server/pom.xml b/rt/transports/http-netty/netty-server/pom.xml index b73176a6d1d..82a586c1510 100644 --- a/rt/transports/http-netty/netty-server/pom.xml +++ b/rt/transports/http-netty/netty-server/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/rt/transports/http-undertow/pom.xml b/rt/transports/http-undertow/pom.xml index 835e30d8b20..f1763c9472e 100644 --- a/rt/transports/http-undertow/pom.xml +++ b/rt/transports/http-undertow/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/transports/http/pom.xml b/rt/transports/http/pom.xml index 9ed702279bb..75a17a93782 100644 --- a/rt/transports/http/pom.xml +++ b/rt/transports/http/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/transports/jms/pom.xml b/rt/transports/jms/pom.xml index a3af0a8b859..a8a9ce1a3b7 100644 --- a/rt/transports/jms/pom.xml +++ b/rt/transports/jms/pom.xml @@ -19,7 +19,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/transports/local/pom.xml b/rt/transports/local/pom.xml index f7f4a2785fc..d3d4dbd3249 100644 --- a/rt/transports/local/pom.xml +++ b/rt/transports/local/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/transports/pom.xml b/rt/transports/pom.xml index 3fce5387de1..1078cafee52 100644 --- a/rt/transports/pom.xml +++ b/rt/transports/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0-SNAPSHOT + 4.1.0 local diff --git a/rt/transports/udp/pom.xml b/rt/transports/udp/pom.xml index 3e9a7ffc93f..2fcd71e10e3 100644 --- a/rt/transports/udp/pom.xml +++ b/rt/transports/udp/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/transports/websocket/pom.xml b/rt/transports/websocket/pom.xml index 1906d8032e5..aad3e01b3c1 100644 --- a/rt/transports/websocket/pom.xml +++ b/rt/transports/websocket/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/ws/addr/pom.xml b/rt/ws/addr/pom.xml index 59c88d4850d..0c64513e128 100644 --- a/rt/ws/addr/pom.xml +++ b/rt/ws/addr/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/ws/eventing/pom.xml b/rt/ws/eventing/pom.xml index 11fe4fa5417..8c997a0db8a 100644 --- a/rt/ws/eventing/pom.xml +++ b/rt/ws/eventing/pom.xml @@ -9,7 +9,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/ws/mex/pom.xml b/rt/ws/mex/pom.xml index 592d2b2c1ab..c2766aa0aec 100644 --- a/rt/ws/mex/pom.xml +++ b/rt/ws/mex/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/ws/policy/pom.xml b/rt/ws/policy/pom.xml index c0267936019..da20802d192 100644 --- a/rt/ws/policy/pom.xml +++ b/rt/ws/policy/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/ws/pom.xml b/rt/ws/pom.xml index 6a12aba43b6..e15b8e15963 100644 --- a/rt/ws/pom.xml +++ b/rt/ws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0-SNAPSHOT + 4.1.0 policy diff --git a/rt/ws/rm/pom.xml b/rt/ws/rm/pom.xml index bc0ec312c6d..d6b30095bb9 100644 --- a/rt/ws/rm/pom.xml +++ b/rt/ws/rm/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/ws/security/pom.xml b/rt/ws/security/pom.xml index af75b91c935..8f6f6f00674 100644 --- a/rt/ws/security/pom.xml +++ b/rt/ws/security/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/ws/transfer/pom.xml b/rt/ws/transfer/pom.xml index be55ceaa598..fbd7ffe1376 100644 --- a/rt/ws/transfer/pom.xml +++ b/rt/ws/transfer/pom.xml @@ -9,7 +9,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/rt/wsdl/pom.xml b/rt/wsdl/pom.xml index 2f629aa9165..54635c69186 100644 --- a/rt/wsdl/pom.xml +++ b/rt/wsdl/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/services/pom.xml b/services/pom.xml index a90bf932bf2..21333943f8b 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf ../pom.xml - 4.1.0-SNAPSHOT + 4.1.0 sts diff --git a/services/sts/pom.xml b/services/sts/pom.xml index ab7d9aaa400..84314168413 100644 --- a/services/sts/pom.xml +++ b/services/sts/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.services cxf-services - 4.1.0-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/services/sts/sts-core/pom.xml b/services/sts/sts-core/pom.xml index 51d21575bea..1aa9f2f565a 100644 --- a/services/sts/sts-core/pom.xml +++ b/services/sts/sts-core/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/sts/systests/advanced/pom.xml b/services/sts/systests/advanced/pom.xml index 46ee47e667e..7df789924ab 100644 --- a/services/sts/systests/advanced/pom.xml +++ b/services/sts/systests/advanced/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/services/sts/systests/basic/pom.xml b/services/sts/systests/basic/pom.xml index 13dd6865040..c4c09209c8e 100644 --- a/services/sts/systests/basic/pom.xml +++ b/services/sts/systests/basic/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/services/sts/systests/pom.xml b/services/sts/systests/pom.xml index 4cbd761e9d7..15a6ea31556 100644 --- a/services/sts/systests/pom.xml +++ b/services/sts/systests/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.services.sts cxf-services-sts - 4.1.0-SNAPSHOT + 4.1.0 basic diff --git a/services/sts/systests/sts-osgi/pom.xml b/services/sts/systests/sts-osgi/pom.xml index cd16cbd7712..419ab514b2a 100644 --- a/services/sts/systests/sts-osgi/pom.xml +++ b/services/sts/systests/sts-osgi/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/services/ws-discovery/pom.xml b/services/ws-discovery/pom.xml index 17bf27bf243..8d7221877b1 100644 --- a/services/ws-discovery/pom.xml +++ b/services/ws-discovery/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.services cxf-services - 4.1.0-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/services/ws-discovery/ws-discovery-api/pom.xml b/services/ws-discovery/ws-discovery-api/pom.xml index bb490a24b58..f8e659b1d3a 100644 --- a/services/ws-discovery/ws-discovery-api/pom.xml +++ b/services/ws-discovery/ws-discovery-api/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/ws-discovery/ws-discovery-service/pom.xml b/services/ws-discovery/ws-discovery-service/pom.xml index b2f02555a4f..4322fb5408f 100644 --- a/services/ws-discovery/ws-discovery-service/pom.xml +++ b/services/ws-discovery/ws-discovery-service/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/wsn/pom.xml b/services/wsn/pom.xml index 735b734ef91..bfa95e507b9 100644 --- a/services/wsn/pom.xml +++ b/services/wsn/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.services cxf-services - 4.1.0-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/services/wsn/wsn-api/pom.xml b/services/wsn/wsn-api/pom.xml index 93229b65461..900c54830ff 100644 --- a/services/wsn/wsn-api/pom.xml +++ b/services/wsn/wsn-api/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/wsn/wsn-core/pom.xml b/services/wsn/wsn-core/pom.xml index 6828ac078cf..f8841460e20 100644 --- a/services/wsn/wsn-core/pom.xml +++ b/services/wsn/wsn-core/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/wsn/wsn-osgi/pom.xml b/services/wsn/wsn-osgi/pom.xml index 5bf41895522..599910800fe 100644 --- a/services/wsn/wsn-osgi/pom.xml +++ b/services/wsn/wsn-osgi/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/xkms/pom.xml b/services/xkms/pom.xml index b72f490ab72..b9545c7ddbd 100644 --- a/services/xkms/pom.xml +++ b/services/xkms/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf.services cxf-services - 4.1.0-SNAPSHOT + 4.1.0 ../pom.xml diff --git a/services/xkms/xkms-client/pom.xml b/services/xkms/xkms-client/pom.xml index 903dace3019..8f8136b9c9e 100644 --- a/services/xkms/xkms-client/pom.xml +++ b/services/xkms/xkms-client/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/xkms/xkms-common/pom.xml b/services/xkms/xkms-common/pom.xml index aedb532ddd1..9149606affe 100644 --- a/services/xkms/xkms-common/pom.xml +++ b/services/xkms/xkms-common/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/xkms/xkms-service/pom.xml b/services/xkms/xkms-service/pom.xml index 13131d45ffc..21529dced09 100644 --- a/services/xkms/xkms-service/pom.xml +++ b/services/xkms/xkms-service/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/xkms/xkms-war/pom.xml b/services/xkms/xkms-war/pom.xml index 9032ff75a82..e9de494439e 100644 --- a/services/xkms/xkms-war/pom.xml +++ b/services/xkms/xkms-war/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/xkms/xkms-x509-handlers/pom.xml b/services/xkms/xkms-x509-handlers/pom.xml index d236f6ad09e..e4ca003302c 100644 --- a/services/xkms/xkms-x509-handlers/pom.xml +++ b/services/xkms/xkms-x509-handlers/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/services/xkms/xkms-x509-repo-ldap/pom.xml b/services/xkms/xkms-x509-repo-ldap/pom.xml index 9585f795ad0..1bfbaec1361 100644 --- a/services/xkms/xkms-x509-repo-ldap/pom.xml +++ b/services/xkms/xkms-x509-repo-ldap/pom.xml @@ -3,7 +3,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml org.apache.cxf.services.xkms diff --git a/systests/cdi/base/pom.xml b/systests/cdi/base/pom.xml index 57b681007c3..ede37ac2bad 100644 --- a/systests/cdi/base/pom.xml +++ b/systests/cdi/base/pom.xml @@ -22,7 +22,7 @@ cxf-systests-cdi org.apache.cxf.systests - 4.1.0-SNAPSHOT + 4.1.0 4.0.0 diff --git a/systests/cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml b/systests/cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml index d1e149bc2c0..da5369d9ff8 100644 --- a/systests/cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml +++ b/systests/cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-cdi-owb - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml b/systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml index d6b0963918d..e3e2e8b0a50 100644 --- a/systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml +++ b/systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-cdi-owb - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/cdi/cdi-owb/cdi-producers-owb/pom.xml b/systests/cdi/cdi-owb/cdi-producers-owb/pom.xml index 16d408cd318..1a8a3b2252b 100644 --- a/systests/cdi/cdi-owb/cdi-producers-owb/pom.xml +++ b/systests/cdi/cdi-owb/cdi-producers-owb/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-cdi-owb - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/cdi/cdi-owb/pom.xml b/systests/cdi/cdi-owb/pom.xml index 27489cbbbea..7a02f53c161 100644 --- a/systests/cdi/cdi-owb/pom.xml +++ b/systests/cdi/cdi-owb/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-cdi - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/cdi/cdi-weld/cdi-multiple-apps-weld/pom.xml b/systests/cdi/cdi-weld/cdi-multiple-apps-weld/pom.xml index 99101fcf6f5..08965edbcf6 100644 --- a/systests/cdi/cdi-weld/cdi-multiple-apps-weld/pom.xml +++ b/systests/cdi/cdi-weld/cdi-multiple-apps-weld/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-cdi-weld - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/cdi/cdi-weld/cdi-no-apps-weld/pom.xml b/systests/cdi/cdi-weld/cdi-no-apps-weld/pom.xml index f742a33d933..4a1ac1c5b32 100644 --- a/systests/cdi/cdi-weld/cdi-no-apps-weld/pom.xml +++ b/systests/cdi/cdi-weld/cdi-no-apps-weld/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-cdi-weld - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/cdi/cdi-weld/cdi-producers-weld/pom.xml b/systests/cdi/cdi-weld/cdi-producers-weld/pom.xml index 425cc07df2c..385b778408c 100644 --- a/systests/cdi/cdi-weld/cdi-producers-weld/pom.xml +++ b/systests/cdi/cdi-weld/cdi-producers-weld/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-cdi-weld - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/cdi/cdi-weld/pom.xml b/systests/cdi/cdi-weld/pom.xml index 9bf34de5452..11af7db9594 100644 --- a/systests/cdi/cdi-weld/pom.xml +++ b/systests/cdi/cdi-weld/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-cdi - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/cdi/pom.xml b/systests/cdi/pom.xml index c2aaeeed6f7..7499bb48647 100644 --- a/systests/cdi/pom.xml +++ b/systests/cdi/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/container-integration/grizzly/pom.xml b/systests/container-integration/grizzly/pom.xml index e0a43cc888f..b002fdfb679 100644 --- a/systests/container-integration/grizzly/pom.xml +++ b/systests/container-integration/grizzly/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-container-integration - 4.1.0-SNAPSHOT + 4.1.0 ../pom.xml cxf-systests-ci-grizzly diff --git a/systests/container-integration/pom.xml b/systests/container-integration/pom.xml index 0d241c206fa..8397a23b7e8 100644 --- a/systests/container-integration/pom.xml +++ b/systests/container-integration/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/container-integration/webapp/pom.xml b/systests/container-integration/webapp/pom.xml index c7031a6172e..2e008813529 100644 --- a/systests/container-integration/webapp/pom.xml +++ b/systests/container-integration/webapp/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-container-integration - 4.1.0-SNAPSHOT + 4.1.0 ../pom.xml cxf-systests-ci-webapp diff --git a/systests/databinding/pom.xml b/systests/databinding/pom.xml index 487162d3f06..8194ba85724 100644 --- a/systests/databinding/pom.xml +++ b/systests/databinding/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/forked/pom.xml b/systests/forked/pom.xml index 3c2c9ad4f14..667534557dd 100644 --- a/systests/forked/pom.xml +++ b/systests/forked/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/jaxrs/pom.xml b/systests/jaxrs/pom.xml index 11f782dfedd..282c39d0601 100644 --- a/systests/jaxrs/pom.xml +++ b/systests/jaxrs/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/jaxws/pom.xml b/systests/jaxws/pom.xml index 6c970ef6eac..9fb7b82d9d8 100644 --- a/systests/jaxws/pom.xml +++ b/systests/jaxws/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/kerberos/pom.xml b/systests/kerberos/pom.xml index b83593084a3..eb38eabb4fb 100644 --- a/systests/kerberos/pom.xml +++ b/systests/kerberos/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/ldap/pom.xml b/systests/ldap/pom.xml index 01ad2ef002f..4d4578025e4 100644 --- a/systests/ldap/pom.xml +++ b/systests/ldap/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/microprofile/client/async/pom.xml b/systests/microprofile/client/async/pom.xml index d30d767ac12..9520d029ba4 100644 --- a/systests/microprofile/client/async/pom.xml +++ b/systests/microprofile/client/async/pom.xml @@ -21,7 +21,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0-SNAPSHOT + 4.1.0 ../../pom.xml 4.0.0 diff --git a/systests/microprofile/client/jaxrs/pom.xml b/systests/microprofile/client/jaxrs/pom.xml index 08bd0820273..7d7e19bdd0b 100644 --- a/systests/microprofile/client/jaxrs/pom.xml +++ b/systests/microprofile/client/jaxrs/pom.xml @@ -21,7 +21,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0-SNAPSHOT + 4.1.0 ../../pom.xml 4.0.0 diff --git a/systests/microprofile/client/nocdi/pom.xml b/systests/microprofile/client/nocdi/pom.xml index 7efd09de6ee..1a75d8ca6d3 100644 --- a/systests/microprofile/client/nocdi/pom.xml +++ b/systests/microprofile/client/nocdi/pom.xml @@ -21,7 +21,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0-SNAPSHOT + 4.1.0 ../../pom.xml 4.0.0 diff --git a/systests/microprofile/client/tracing/pom.xml b/systests/microprofile/client/tracing/pom.xml index 0e2f0feca64..c1ca62bc7c2 100644 --- a/systests/microprofile/client/tracing/pom.xml +++ b/systests/microprofile/client/tracing/pom.xml @@ -21,7 +21,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0-SNAPSHOT + 4.1.0 ../../pom.xml 4.0.0 diff --git a/systests/microprofile/client/weld/pom.xml b/systests/microprofile/client/weld/pom.xml index 50f7e9bae6a..69e0bb98e10 100644 --- a/systests/microprofile/client/weld/pom.xml +++ b/systests/microprofile/client/weld/pom.xml @@ -22,7 +22,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0-SNAPSHOT + 4.1.0 ../../pom.xml diff --git a/systests/microprofile/pom.xml b/systests/microprofile/pom.xml index d90ef9a4ef0..42c6fa28a00 100644 --- a/systests/microprofile/pom.xml +++ b/systests/microprofile/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/pom.xml b/systests/pom.xml index dbe71fd96bd..1a47f7f08a0 100644 --- a/systests/pom.xml +++ b/systests/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf - 4.1.0-SNAPSHOT + 4.1.0 container-integration diff --git a/systests/rs-http-sci/pom.xml b/systests/rs-http-sci/pom.xml index 44f0e4ac539..cbd8b6a8815 100644 --- a/systests/rs-http-sci/pom.xml +++ b/systests/rs-http-sci/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/rs-security/pom.xml b/systests/rs-security/pom.xml index 10ff51f589d..efdc807542a 100644 --- a/systests/rs-security/pom.xml +++ b/systests/rs-security/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/rs-sse/pom.xml b/systests/rs-sse/pom.xml index f10871c3d32..384115e9498 100644 --- a/systests/rs-sse/pom.xml +++ b/systests/rs-sse/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/rs-sse/rs-sse-base/pom.xml b/systests/rs-sse/rs-sse-base/pom.xml index 0608990232a..69f1ee201ec 100644 --- a/systests/rs-sse/rs-sse-base/pom.xml +++ b/systests/rs-sse/rs-sse-base/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-rs-sse - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/rs-sse/rs-sse-jetty/pom.xml b/systests/rs-sse/rs-sse-jetty/pom.xml index 657f0d10472..c582f1bb123 100644 --- a/systests/rs-sse/rs-sse-jetty/pom.xml +++ b/systests/rs-sse/rs-sse-jetty/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-rs-sse - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/rs-sse/rs-sse-tomcat/pom.xml b/systests/rs-sse/rs-sse-tomcat/pom.xml index 711902754b7..694515521bc 100644 --- a/systests/rs-sse/rs-sse-tomcat/pom.xml +++ b/systests/rs-sse/rs-sse-tomcat/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-rs-sse - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/rs-sse/rs-sse-undertow/pom.xml b/systests/rs-sse/rs-sse-undertow/pom.xml index 892f95b2006..efbdd00c86b 100644 --- a/systests/rs-sse/rs-sse-undertow/pom.xml +++ b/systests/rs-sse/rs-sse-undertow/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-rs-sse - 4.1.0-SNAPSHOT + 4.1.0 ../ 4.0.0 diff --git a/systests/spring-boot/pom.xml b/systests/spring-boot/pom.xml index 3409954e031..230862ffe83 100644 --- a/systests/spring-boot/pom.xml +++ b/systests/spring-boot/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/tracing/pom.xml b/systests/tracing/pom.xml index 88a4c07ea58..6ff5a991675 100644 --- a/systests/tracing/pom.xml +++ b/systests/tracing/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/transport-hc5/pom.xml b/systests/transport-hc5/pom.xml index 076be03e741..ee58425b04c 100644 --- a/systests/transport-hc5/pom.xml +++ b/systests/transport-hc5/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/transport-jms/pom.xml b/systests/transport-jms/pom.xml index 8946c4dcaf9..35c0500214d 100644 --- a/systests/transport-jms/pom.xml +++ b/systests/transport-jms/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/transport-netty/pom.xml b/systests/transport-netty/pom.xml index 1cf48fe4d8f..cda472900da 100644 --- a/systests/transport-netty/pom.xml +++ b/systests/transport-netty/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/transport-undertow/pom.xml b/systests/transport-undertow/pom.xml index a6c6c088be8..dfb17a3cb1c 100644 --- a/systests/transport-undertow/pom.xml +++ b/systests/transport-undertow/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/transports/pom.xml b/systests/transports/pom.xml index 7eda2c89664..e7d3417d263 100644 --- a/systests/transports/pom.xml +++ b/systests/transports/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/uncategorized/pom.xml b/systests/uncategorized/pom.xml index 78a1a7ff28a..c94f738daef 100644 --- a/systests/uncategorized/pom.xml +++ b/systests/uncategorized/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-rm/pom.xml b/systests/ws-rm/pom.xml index 9fa98aa305f..c4fc2673b5a 100644 --- a/systests/ws-rm/pom.xml +++ b/systests/ws-rm/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-security-examples/pom.xml b/systests/ws-security-examples/pom.xml index 9182bd2ea28..dad4fb166d0 100644 --- a/systests/ws-security-examples/pom.xml +++ b/systests/ws-security-examples/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-security/pom.xml b/systests/ws-security/pom.xml index e68f4a05572..f31422931a0 100644 --- a/systests/ws-security/pom.xml +++ b/systests/ws-security/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-specs/pom.xml b/systests/ws-specs/pom.xml index 2bfe34470c8..7f42daeea93 100644 --- a/systests/ws-specs/pom.xml +++ b/systests/ws-specs/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-transfer/pom.xml b/systests/ws-transfer/pom.xml index 7cada0039fc..a2b24157ea6 100644 --- a/systests/ws-transfer/pom.xml +++ b/systests/ws-transfer/pom.xml @@ -28,7 +28,7 @@ cxf-parent org.apache.cxf - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/systests/wsdl_maven/codegen/pom.xml b/systests/wsdl_maven/codegen/pom.xml index a39077d21b8..81201b226c8 100644 --- a/systests/wsdl_maven/codegen/pom.xml +++ b/systests/wsdl_maven/codegen/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/systests/wsdl_maven/java2ws/pom.xml b/systests/wsdl_maven/java2ws/pom.xml index 60bac54ca5b..f5db07a3e38 100644 --- a/systests/wsdl_maven/java2ws/pom.xml +++ b/systests/wsdl_maven/java2ws/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/systests/wsdl_maven/pom.xml b/systests/wsdl_maven/pom.xml index bc5e1468da3..06ea0a41cfc 100644 --- a/systests/wsdl_maven/pom.xml +++ b/systests/wsdl_maven/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.systests cxf-systests - 4.1.0-SNAPSHOT + 4.1.0 java2ws diff --git a/testutils/pom.xml b/testutils/pom.xml index 72ddf6258e7..52a385acfc7 100644 --- a/testutils/pom.xml +++ b/testutils/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../parent/pom.xml diff --git a/tools/common/pom.xml b/tools/common/pom.xml index 427923942dc..39f6d60d653 100644 --- a/tools/common/pom.xml +++ b/tools/common/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/tools/corba/pom.xml b/tools/corba/pom.xml index ab8bcf707ba..602f777b31c 100644 --- a/tools/corba/pom.xml +++ b/tools/corba/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/tools/javato/pom.xml b/tools/javato/pom.xml index bd98080d146..a7fce0b97ba 100644 --- a/tools/javato/pom.xml +++ b/tools/javato/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-tools - 4.1.0-SNAPSHOT + 4.1.0 ws diff --git a/tools/javato/ws/pom.xml b/tools/javato/ws/pom.xml index 978d688d340..b4ffe17de09 100644 --- a/tools/javato/ws/pom.xml +++ b/tools/javato/ws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index 1da68c45238..d2e35ac9780 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf - 4.1.0-SNAPSHOT + 4.1.0 common diff --git a/tools/validator/pom.xml b/tools/validator/pom.xml index f01b3f1cd5c..226d6cdae5d 100644 --- a/tools/validator/pom.xml +++ b/tools/validator/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../parent/pom.xml diff --git a/tools/wadlto/jaxrs/pom.xml b/tools/wadlto/jaxrs/pom.xml index d8afbdd85b8..97abae9a0d5 100644 --- a/tools/wadlto/jaxrs/pom.xml +++ b/tools/wadlto/jaxrs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/tools/wadlto/pom.xml b/tools/wadlto/pom.xml index e83ba0da78f..4f8ade35c0a 100644 --- a/tools/wadlto/pom.xml +++ b/tools/wadlto/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-tools - 4.1.0-SNAPSHOT + 4.1.0 jaxrs diff --git a/tools/wsdlto/core/pom.xml b/tools/wsdlto/core/pom.xml index 8410720ad44..61868466319 100644 --- a/tools/wsdlto/core/pom.xml +++ b/tools/wsdlto/core/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/tools/wsdlto/databinding/jaxb/pom.xml b/tools/wsdlto/databinding/jaxb/pom.xml index 4703730ce62..58e89e0b362 100644 --- a/tools/wsdlto/databinding/jaxb/pom.xml +++ b/tools/wsdlto/databinding/jaxb/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/tools/wsdlto/frontend/javascript/pom.xml b/tools/wsdlto/frontend/javascript/pom.xml index 97457d1a598..b71a9341717 100644 --- a/tools/wsdlto/frontend/javascript/pom.xml +++ b/tools/wsdlto/frontend/javascript/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/tools/wsdlto/frontend/jaxws/pom.xml b/tools/wsdlto/frontend/jaxws/pom.xml index a555d254006..cf2e75c3fc6 100644 --- a/tools/wsdlto/frontend/jaxws/pom.xml +++ b/tools/wsdlto/frontend/jaxws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../../parent/pom.xml diff --git a/tools/wsdlto/misc/pom.xml b/tools/wsdlto/misc/pom.xml index b7e3ee43b32..1d74a16ae06 100644 --- a/tools/wsdlto/misc/pom.xml +++ b/tools/wsdlto/misc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml diff --git a/tools/wsdlto/pom.xml b/tools/wsdlto/pom.xml index b6098a2ec02..7570280a9e5 100644 --- a/tools/wsdlto/pom.xml +++ b/tools/wsdlto/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-tools - 4.1.0-SNAPSHOT + 4.1.0 core diff --git a/tools/wsdlto/test/pom.xml b/tools/wsdlto/test/pom.xml index a233ff2130a..9fd9ef86517 100644 --- a/tools/wsdlto/test/pom.xml +++ b/tools/wsdlto/test/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0-SNAPSHOT + 4.1.0 ../../../parent/pom.xml From 85f681bd0e70636289aacf36a32c841f03db7ee8 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Mon, 9 Dec 2024 12:11:46 -0500 Subject: [PATCH 292/430] [maven-release-plugin] prepare for next development iteration --- bom/pom.xml | 2 +- core/pom.xml | 2 +- distribution/javadoc/pom.xml | 46 +++---- distribution/manifest/pom.xml | 94 +++++++------- distribution/pom.xml | 120 +++++++++--------- .../src/main/release/samples/aegis/pom.xml | 10 +- .../release/samples/aegis_standalone/pom.xml | 4 +- .../src/main/release/samples/callback/pom.xml | 10 +- .../samples/configuration_interceptor/pom.xml | 10 +- .../main/release/samples/corba/bank/pom.xml | 4 +- .../samples/corba/bank_ws_addressing/pom.xml | 4 +- .../release/samples/corba/hello_world/pom.xml | 10 +- .../samples/groovy_spring_support/pom.xml | 8 +- .../release/samples/in_jvm_transport/pom.xml | 10 +- .../release/samples/java_first_jaxws/pom.xml | 8 +- .../java_first_jaxws_factory_bean/pom.xml | 8 +- .../release/samples/java_first_jms/pom.xml | 6 +- .../release/samples/java_first_pojo/pom.xml | 8 +- .../samples/java_first_spring_support/pom.xml | 8 +- .../main/release/samples/jax_rs/basic/pom.xml | 8 +- .../samples/jax_rs/basic_http2_jetty/pom.xml | 6 +- .../samples/jax_rs/basic_http2_netty/pom.xml | 6 +- .../jax_rs/basic_http2_undertow/pom.xml | 6 +- .../samples/jax_rs/basic_https/pom.xml | 8 +- .../release/samples/jax_rs/basic_oidc/pom.xml | 10 +- .../release/samples/jax_rs/big_query/pom.xml | 14 +- .../jax_rs/content_negotiation/pom.xml | 10 +- .../pom.xml | 2 +- .../jax_rs/description_openapi_v3/pom.xml | 2 +- .../description_openapi_v3_spring/pom.xml | 2 +- .../jax_rs/description_openapi_v3_web/pom.xml | 2 +- .../samples/jax_rs/graalvm_basic/pom.xml | 2 +- .../main/release/samples/jax_rs/odata/pom.xml | 6 +- .../release/samples/jax_rs/search/pom.xml | 14 +- .../samples/jax_rs/spring_boot/pom.xml | 8 +- .../spring_boot_scan/application/pom.xml | 6 +- .../jax_rs/spring_boot_scan/client/pom.xml | 6 +- .../spring_boot_scan/eureka-registry/pom.xml | 2 +- .../samples/jax_rs/spring_security/pom.xml | 8 +- .../release/samples/jax_rs/sse_cdi/pom.xml | 8 +- .../release/samples/jax_rs/sse_client/pom.xml | 8 +- .../release/samples/jax_rs/sse_spring/pom.xml | 6 +- .../release/samples/jax_rs/sse_tomcat/pom.xml | 6 +- .../samples/jax_rs/tracing_brave/pom.xml | 4 +- .../samples/jax_rs/tracing_micrometer/pom.xml | 14 +- .../jax_rs/tracing_opentelemetry/pom.xml | 14 +- .../tracing_opentelemetry_camel/pom.xml | 2 +- .../jax_rs/tracing_opentracing/pom.xml | 14 +- .../release/samples/jax_rs/websocket/pom.xml | 10 +- .../samples/jax_rs/websocket_web/pom.xml | 2 +- .../samples/jax_server_aegis_client/pom.xml | 10 +- .../main/release/samples/jaxws_async/pom.xml | 14 +- .../samples/jaxws_dispatch_provider/pom.xml | 10 +- .../release/samples/jaxws_graalvm/pom.xml | 4 +- .../jaxws_graalvm_dynamic/client/pom.xml | 2 +- .../jaxws_graalvm_dynamic/server/pom.xml | 4 +- .../release/samples/jaxws_handlers/pom.xml | 10 +- .../release/samples/jaxws_spring_boot/pom.xml | 6 +- .../main/release/samples/jms_pubsub/pom.xml | 4 +- .../main/release/samples/jms_queue/pom.xml | 8 +- .../release/samples/jms_spec_demo/pom.xml | 8 +- .../release/samples/jms_spring_config/pom.xml | 4 +- .../js_browser_client_java_first/pom.xml | 10 +- .../samples/js_browser_client_simple/pom.xml | 12 +- .../main/release/samples/js_client/pom.xml | 12 +- .../main/release/samples/js_provider/pom.xml | 10 +- .../src/main/release/samples/mtom/pom.xml | 10 +- .../release/samples/performance/base/pom.xml | 2 +- .../release/samples/performance/jaxrs/pom.xml | 2 +- .../performance/soap_http_doc_lit/pom.xml | 2 +- distribution/src/main/release/samples/pom.xml | 6 +- .../release/samples/restful_dispatch/pom.xml | 10 +- .../samples/ruby_spring_support/pom.xml | 8 +- .../main/release/samples/soap_header/pom.xml | 10 +- .../src/main/release/samples/sts/pom.xml | 18 +-- .../main/release/samples/throttling/pom.xml | 16 +-- .../release/samples/ws_addressing/pom.xml | 10 +- .../main/release/samples/ws_discovery/pom.xml | 14 +- .../main/release/samples/ws_eventing/pom.xml | 12 +- .../release/samples/ws_notification/pom.xml | 2 +- .../main/release/samples/ws_policy/pom.xml | 10 +- .../src/main/release/samples/ws_rm/pom.xml | 12 +- .../samples/ws_security/sign_enc/pom.xml | 18 +-- .../ws_security/sign_enc_policy/pom.xml | 14 +- .../release/samples/ws_security/ut/pom.xml | 12 +- .../samples/ws_security/ut_policy/pom.xml | 14 +- .../samples/ws_transaction/client/pom.xml | 2 +- .../release/samples/ws_transaction/pom.xml | 6 +- .../samples/ws_transaction/ws_first/pom.xml | 2 +- .../samples/ws_transaction/ws_second/pom.xml | 2 +- .../main/release/samples/wsdl_first/pom.xml | 20 +-- .../samples/wsdl_first_dynamic_client/pom.xml | 10 +- .../release/samples/wsdl_first_https/pom.xml | 10 +- .../samples/wsdl_first_pure_xml/pom.xml | 10 +- .../release/samples/wsdl_first_rpclit/pom.xml | 10 +- .../release/samples/wsdl_first_soap12/pom.xml | 10 +- .../samples/wsdl_first_xml_wrapped/pom.xml | 10 +- integration/cdi/pom.xml | 2 +- integration/jca/pom.xml | 2 +- integration/pom.xml | 2 +- integration/spring-boot/autoconfigure/pom.xml | 2 +- integration/spring-boot/pom.xml | 2 +- integration/spring-boot/starter-jaxrs/pom.xml | 2 +- integration/spring-boot/starter-jaxws/pom.xml | 2 +- integration/tracing/tracing-brave/pom.xml | 2 +- .../tracing/tracing-micrometer/pom.xml | 2 +- .../tracing/tracing-opentelemetry/pom.xml | 2 +- .../tracing/tracing-opentracing/pom.xml | 2 +- .../archetypes/cxf-jaxrs-service/pom.xml | 2 +- .../archetypes/cxf-jaxws-javafirst/pom.xml | 4 +- .../archetypes/cxf-jaxws-wsdlfirst/pom.xml | 2 +- maven-plugins/archetypes/pom.xml | 2 +- maven-plugins/codegen-plugin/pom.xml | 2 +- maven-plugins/corba/pom.xml | 2 +- maven-plugins/java2wadl-plugin/pom.xml | 4 +- maven-plugins/java2ws-plugin/pom.xml | 2 +- maven-plugins/pom.xml | 2 +- maven-plugins/wadl2java-plugin/pom.xml | 2 +- maven-plugins/wsdl-validator-plugin/pom.xml | 2 +- parent/pom.xml | 2 +- pom.xml | 4 +- rt/bindings/coloc/pom.xml | 2 +- rt/bindings/corba/pom.xml | 2 +- rt/bindings/pom.xml | 2 +- rt/bindings/soap/pom.xml | 2 +- rt/bindings/xml/pom.xml | 2 +- rt/databinding/aegis/pom.xml | 2 +- rt/databinding/jaxb/pom.xml | 2 +- rt/databinding/pom.xml | 2 +- rt/features/clustering/pom.xml | 2 +- rt/features/logging/pom.xml | 2 +- rt/features/metrics/pom.xml | 2 +- rt/features/pom.xml | 2 +- rt/features/throttling/pom.xml | 2 +- rt/frontend/jaxrs/pom.xml | 2 +- rt/frontend/jaxws/pom.xml | 2 +- rt/frontend/js/pom.xml | 2 +- rt/frontend/pom.xml | 2 +- rt/frontend/simple/pom.xml | 2 +- rt/javascript/javascript-rt/pom.xml | 2 +- rt/javascript/javascript-tests/pom.xml | 2 +- rt/javascript/pom.xml | 2 +- rt/management/pom.xml | 2 +- rt/pom.xml | 2 +- rt/rs/client/pom.xml | 2 +- rt/rs/description-common-openapi/pom.xml | 2 +- .../description-microprofile-openapi/pom.xml | 2 +- rt/rs/description-openapi-v3/pom.xml | 2 +- rt/rs/description-swagger-ui/pom.xml | 2 +- rt/rs/description/pom.xml | 2 +- rt/rs/extensions/json-basic/pom.xml | 2 +- rt/rs/extensions/providers/pom.xml | 2 +- rt/rs/extensions/reactivestreams/pom.xml | 2 +- rt/rs/extensions/reactor/pom.xml | 2 +- rt/rs/extensions/rx/pom.xml | 2 +- rt/rs/extensions/rx2/pom.xml | 2 +- rt/rs/extensions/rx3/pom.xml | 2 +- rt/rs/extensions/search/pom.xml | 2 +- rt/rs/http-sci/pom.xml | 2 +- rt/rs/microprofile-client/pom.xml | 2 +- rt/rs/pom.xml | 2 +- rt/rs/security/cors/pom.xml | 2 +- rt/rs/security/http-signature/pom.xml | 2 +- rt/rs/security/jose-parent/jose-jaxrs/pom.xml | 2 +- rt/rs/security/jose-parent/jose/pom.xml | 2 +- rt/rs/security/jose-parent/pom.xml | 2 +- .../security/oauth-parent/oauth2-saml/pom.xml | 2 +- rt/rs/security/oauth-parent/oauth2/pom.xml | 2 +- rt/rs/security/oauth-parent/pom.xml | 2 +- rt/rs/security/pom.xml | 2 +- rt/rs/security/sso/oidc/pom.xml | 2 +- rt/rs/security/sso/saml/pom.xml | 2 +- rt/rs/security/xml/pom.xml | 2 +- rt/rs/sse/pom.xml | 2 +- rt/security-saml/pom.xml | 2 +- rt/security/pom.xml | 2 +- rt/transports/http-hc/pom.xml | 2 +- rt/transports/http-hc5/pom.xml | 2 +- rt/transports/http-jetty/pom.xml | 2 +- rt/transports/http-netty/netty-client/pom.xml | 2 +- rt/transports/http-netty/netty-server/pom.xml | 2 +- rt/transports/http-undertow/pom.xml | 2 +- rt/transports/http/pom.xml | 2 +- rt/transports/jms/pom.xml | 2 +- rt/transports/local/pom.xml | 2 +- rt/transports/pom.xml | 2 +- rt/transports/udp/pom.xml | 2 +- rt/transports/websocket/pom.xml | 2 +- rt/ws/addr/pom.xml | 2 +- rt/ws/eventing/pom.xml | 2 +- rt/ws/mex/pom.xml | 2 +- rt/ws/policy/pom.xml | 2 +- rt/ws/pom.xml | 2 +- rt/ws/rm/pom.xml | 2 +- rt/ws/security/pom.xml | 2 +- rt/ws/transfer/pom.xml | 2 +- rt/wsdl/pom.xml | 2 +- services/pom.xml | 2 +- services/sts/pom.xml | 2 +- services/sts/sts-core/pom.xml | 2 +- services/sts/systests/advanced/pom.xml | 2 +- services/sts/systests/basic/pom.xml | 2 +- services/sts/systests/pom.xml | 2 +- services/sts/systests/sts-osgi/pom.xml | 2 +- services/ws-discovery/pom.xml | 2 +- .../ws-discovery/ws-discovery-api/pom.xml | 2 +- .../ws-discovery/ws-discovery-service/pom.xml | 2 +- services/wsn/pom.xml | 2 +- services/wsn/wsn-api/pom.xml | 2 +- services/wsn/wsn-core/pom.xml | 2 +- services/wsn/wsn-osgi/pom.xml | 2 +- services/xkms/pom.xml | 2 +- services/xkms/xkms-client/pom.xml | 2 +- services/xkms/xkms-common/pom.xml | 2 +- services/xkms/xkms-service/pom.xml | 2 +- services/xkms/xkms-war/pom.xml | 2 +- services/xkms/xkms-x509-handlers/pom.xml | 2 +- services/xkms/xkms-x509-repo-ldap/pom.xml | 2 +- systests/cdi/base/pom.xml | 2 +- .../cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml | 2 +- systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml | 2 +- .../cdi/cdi-owb/cdi-producers-owb/pom.xml | 2 +- systests/cdi/cdi-owb/pom.xml | 2 +- .../cdi-weld/cdi-multiple-apps-weld/pom.xml | 2 +- .../cdi/cdi-weld/cdi-no-apps-weld/pom.xml | 2 +- .../cdi/cdi-weld/cdi-producers-weld/pom.xml | 2 +- systests/cdi/cdi-weld/pom.xml | 2 +- systests/cdi/pom.xml | 2 +- .../container-integration/grizzly/pom.xml | 2 +- systests/container-integration/pom.xml | 2 +- systests/container-integration/webapp/pom.xml | 2 +- systests/databinding/pom.xml | 2 +- systests/forked/pom.xml | 2 +- systests/jaxrs/pom.xml | 2 +- systests/jaxws/pom.xml | 2 +- systests/kerberos/pom.xml | 2 +- systests/ldap/pom.xml | 2 +- systests/microprofile/client/async/pom.xml | 2 +- systests/microprofile/client/jaxrs/pom.xml | 2 +- systests/microprofile/client/nocdi/pom.xml | 2 +- systests/microprofile/client/tracing/pom.xml | 2 +- systests/microprofile/client/weld/pom.xml | 2 +- systests/microprofile/pom.xml | 2 +- systests/pom.xml | 2 +- systests/rs-http-sci/pom.xml | 2 +- systests/rs-security/pom.xml | 2 +- systests/rs-sse/pom.xml | 2 +- systests/rs-sse/rs-sse-base/pom.xml | 2 +- systests/rs-sse/rs-sse-jetty/pom.xml | 2 +- systests/rs-sse/rs-sse-tomcat/pom.xml | 2 +- systests/rs-sse/rs-sse-undertow/pom.xml | 2 +- systests/spring-boot/pom.xml | 2 +- systests/tracing/pom.xml | 2 +- systests/transport-hc5/pom.xml | 2 +- systests/transport-jms/pom.xml | 2 +- systests/transport-netty/pom.xml | 2 +- systests/transport-undertow/pom.xml | 2 +- systests/transports/pom.xml | 2 +- systests/uncategorized/pom.xml | 2 +- systests/ws-rm/pom.xml | 2 +- systests/ws-security-examples/pom.xml | 2 +- systests/ws-security/pom.xml | 2 +- systests/ws-specs/pom.xml | 2 +- systests/ws-transfer/pom.xml | 2 +- systests/wsdl_maven/codegen/pom.xml | 2 +- systests/wsdl_maven/java2ws/pom.xml | 2 +- systests/wsdl_maven/pom.xml | 2 +- testutils/pom.xml | 2 +- tools/common/pom.xml | 2 +- tools/corba/pom.xml | 2 +- tools/javato/pom.xml | 2 +- tools/javato/ws/pom.xml | 2 +- tools/pom.xml | 2 +- tools/validator/pom.xml | 2 +- tools/wadlto/jaxrs/pom.xml | 2 +- tools/wadlto/pom.xml | 2 +- tools/wsdlto/core/pom.xml | 2 +- tools/wsdlto/databinding/jaxb/pom.xml | 2 +- tools/wsdlto/frontend/javascript/pom.xml | 2 +- tools/wsdlto/frontend/jaxws/pom.xml | 2 +- tools/wsdlto/misc/pom.xml | 2 +- tools/wsdlto/pom.xml | 2 +- tools/wsdlto/test/pom.xml | 2 +- 283 files changed, 694 insertions(+), 694 deletions(-) diff --git a/bom/pom.xml b/bom/pom.xml index 800ad9a1609..7d1d8542b4c 100644 --- a/bom/pom.xml +++ b/bom/pom.xml @@ -20,7 +20,7 @@ org.apache.cxf cxf - 4.1.0 + 4.1.1-SNAPSHOT 4.0.0 cxf-bom diff --git a/core/pom.xml b/core/pom.xml index b02f9560a51..5029427c5f6 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../parent/pom.xml diff --git a/distribution/javadoc/pom.xml b/distribution/javadoc/pom.xml index 76ffe154cf3..921e73cee6f 100644 --- a/distribution/javadoc/pom.xml +++ b/distribution/javadoc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent @@ -38,7 +38,7 @@ org.apache.cxf cxf-bom - 4.1.0 + 4.1.1-SNAPSHOT pom import @@ -48,107 +48,107 @@ org.apache.cxf cxf-core - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-client - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-security - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-http-signature - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-jose - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-jose-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-oauth2 - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-oauth2-saml - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-security-saml - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-service-description - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-service-description-openapi-v3 - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-service-description-microprofile-openapi - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-mp-client - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-databinding-aegis - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-databinding-jaxb - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-reactor - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-search - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-features-clustering - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-transfer - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-websocket - 4.1.0 + 4.1.1-SNAPSHOT org.apache.commons diff --git a/distribution/manifest/pom.xml b/distribution/manifest/pom.xml index 5b1e7f7e785..b44ab008476 100644 --- a/distribution/manifest/pom.xml +++ b/distribution/manifest/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent @@ -39,52 +39,52 @@ ${project.groupId} cxf-tools-common - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-validator - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wsdlto-core - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-misctools - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wsdlto-databinding-jaxb - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-corba - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wsdlto-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wsdlto-frontend-javascript - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wadlto-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-java2ws - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId}.xjcplugins @@ -119,52 +119,52 @@ ${project.groupId} cxf-core - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-features-clustering - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-management - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-local - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http-hc - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http-netty-server - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http-netty-client - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-udp - 4.1.0 + 4.1.1-SNAPSHOT org.slf4j @@ -177,133 +177,133 @@ ${project.groupId} cxf-rt-transports-jms - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-bindings-soap - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-bindings-xml - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-bindings-corba - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-bindings-coloc - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-databinding-aegis - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-extension-providers - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-extension-search - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-cors - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-oauth2 - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-xml - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-addr - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-rm - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-policy - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-mex - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-security - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-frontend-js - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-frontend-simple - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-javascript - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.sts cxf-services-sts-core - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.wsn cxf-services-wsn-api - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.wsn cxf-services-wsn-core - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-api - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-service - 4.1.0 + 4.1.1-SNAPSHOT org.codehaus.jettison diff --git a/distribution/pom.xml b/distribution/pom.xml index 3c47d86f75e..e6dd301db0d 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../parent @@ -44,52 +44,52 @@ ${project.groupId} cxf-tools-common - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-validator - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wsdlto-core - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wsdlto-frontend-javascript - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-misctools - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-corba - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wsdlto-databinding-jaxb - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wsdlto-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-wadlto-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-tools-java2ws - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId}.xjc-utils @@ -124,57 +124,57 @@ ${project.groupId} cxf-core - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-features-clustering - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-features-throttling - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-features-metrics - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-management - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-local - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-udp - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http-hc - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http-netty-server - 4.1.0 + 4.1.1-SNAPSHOT org.apache.geronimo.specs @@ -189,7 +189,7 @@ ${project.groupId} cxf-rt-transports-http-netty-client - 4.1.0 + 4.1.1-SNAPSHOT io.netty @@ -200,12 +200,12 @@ ${project.groupId} cxf-rt-transports-websocket - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-transports-http-undertow - 4.1.0 + 4.1.1-SNAPSHOT org.slf4j @@ -218,178 +218,178 @@ ${project.groupId} cxf-rt-transports-jms - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-bindings-soap - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-bindings-corba - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-bindings-xml - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-bindings-coloc - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-databinding-aegis - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-addr - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-rm - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-policy - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-mex - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-security - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-transfer - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-ws-eventing - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-frontend-js - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-frontend-simple - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-extension-providers - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-extension-search - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-cors - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-oauth2 - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-oauth2-saml - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-xml - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-sso-saml - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-sso-oidc - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-security-http-signature - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-sse - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-mp-client - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-rs-http-sci - 4.1.0 + 4.1.1-SNAPSHOT ${project.groupId} cxf-rt-javascript - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.sts cxf-services-sts-core - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.wsn cxf-services-wsn-api - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.wsn cxf-services-wsn-core - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-api - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-service - 4.1.0 + 4.1.1-SNAPSHOT org.codehaus.jettison diff --git a/distribution/src/main/release/samples/aegis/pom.xml b/distribution/src/main/release/samples/aegis/pom.xml index 3d7bf419ca6..9390a0738b6 100644 --- a/distribution/src/main/release/samples/aegis/pom.xml +++ b/distribution/src/main/release/samples/aegis/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -88,24 +88,24 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-databinding-aegis - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT junit diff --git a/distribution/src/main/release/samples/aegis_standalone/pom.xml b/distribution/src/main/release/samples/aegis_standalone/pom.xml index b86a8645320..8f6aa7a5792 100644 --- a/distribution/src/main/release/samples/aegis_standalone/pom.xml +++ b/distribution/src/main/release/samples/aegis_standalone/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -88,7 +88,7 @@ org.apache.cxf cxf-rt-databinding-aegis - 4.1.0 + 4.1.1-SNAPSHOT net.java.dev.stax-utils diff --git a/distribution/src/main/release/samples/callback/pom.xml b/distribution/src/main/release/samples/callback/pom.xml index b45fba67635..a736ac67728 100644 --- a/distribution/src/main/release/samples/callback/pom.xml +++ b/distribution/src/main/release/samples/callback/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-CallbackService @@ -117,17 +117,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/configuration_interceptor/pom.xml b/distribution/src/main/release/samples/configuration_interceptor/pom.xml index 79a627ab649..2603e631dbf 100644 --- a/distribution/src/main/release/samples/configuration_interceptor/pom.xml +++ b/distribution/src/main/release/samples/configuration_interceptor/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -118,17 +118,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/corba/bank/pom.xml b/distribution/src/main/release/samples/corba/bank/pom.xml index 793e8a2be71..fce7ec3f540 100644 --- a/distribution/src/main/release/samples/corba/bank/pom.xml +++ b/distribution/src/main/release/samples/corba/bank/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -38,7 +38,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources diff --git a/distribution/src/main/release/samples/corba/bank_ws_addressing/pom.xml b/distribution/src/main/release/samples/corba/bank_ws_addressing/pom.xml index 9cbe49ae7a4..2db90500d4e 100644 --- a/distribution/src/main/release/samples/corba/bank_ws_addressing/pom.xml +++ b/distribution/src/main/release/samples/corba/bank_ws_addressing/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -69,7 +69,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources diff --git a/distribution/src/main/release/samples/corba/hello_world/pom.xml b/distribution/src/main/release/samples/corba/hello_world/pom.xml index 364888c0104..13561a166e6 100644 --- a/distribution/src/main/release/samples/corba/hello_world/pom.xml +++ b/distribution/src/main/release/samples/corba/hello_world/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -71,7 +71,7 @@ org.apache.cxf cxf-corbatools-maven-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -279,17 +279,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-bindings-corba - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-tools-common - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/groovy_spring_support/pom.xml b/distribution/src/main/release/samples/groovy_spring_support/pom.xml index 2f2e88ea552..a142210287d 100644 --- a/distribution/src/main/release/samples/groovy_spring_support/pom.xml +++ b/distribution/src/main/release/samples/groovy_spring_support/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT @@ -108,18 +108,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.groovy diff --git a/distribution/src/main/release/samples/in_jvm_transport/pom.xml b/distribution/src/main/release/samples/in_jvm_transport/pom.xml index af21a717cd5..07fa2a41db3 100644 --- a/distribution/src/main/release/samples/in_jvm_transport/pom.xml +++ b/distribution/src/main/release/samples/in_jvm_transport/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -87,23 +87,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-bindings-coloc - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/java_first_jaxws/pom.xml b/distribution/src/main/release/samples/java_first_jaxws/pom.xml index 11fb18f1772..afb96ba605d 100644 --- a/distribution/src/main/release/samples/java_first_jaxws/pom.xml +++ b/distribution/src/main/release/samples/java_first_jaxws/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT @@ -112,7 +112,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT @@ -144,12 +144,12 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/java_first_jaxws_factory_bean/pom.xml b/distribution/src/main/release/samples/java_first_jaxws_factory_bean/pom.xml index b03a577a3a4..6ced05fb753 100644 --- a/distribution/src/main/release/samples/java_first_jaxws_factory_bean/pom.xml +++ b/distribution/src/main/release/samples/java_first_jaxws_factory_bean/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -82,18 +82,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/java_first_jms/pom.xml b/distribution/src/main/release/samples/java_first_jms/pom.xml index cc5c72e403a..2812d641321 100644 --- a/distribution/src/main/release/samples/java_first_jms/pom.xml +++ b/distribution/src/main/release/samples/java_first_jms/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -97,12 +97,12 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-jms - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/java_first_pojo/pom.xml b/distribution/src/main/release/samples/java_first_pojo/pom.xml index 47493b96810..66a87a77ec1 100644 --- a/distribution/src/main/release/samples/java_first_pojo/pom.xml +++ b/distribution/src/main/release/samples/java_first_pojo/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -82,18 +82,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/java_first_spring_support/pom.xml b/distribution/src/main/release/samples/java_first_spring_support/pom.xml index cb24d6e7ef4..bb895747ea4 100644 --- a/distribution/src/main/release/samples/java_first_spring_support/pom.xml +++ b/distribution/src/main/release/samples/java_first_spring_support/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT @@ -103,17 +103,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/jax_rs/basic/pom.xml b/distribution/src/main/release/samples/jax_rs/basic/pom.xml index 18e837c2483..c352bae542a 100644 --- a/distribution/src/main/release/samples/jax_rs/basic/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -83,18 +83,18 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml index 364ad3e25f8..90fb9348d7b 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_http2_jetty/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -94,12 +94,12 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/jax_rs/basic_http2_netty/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_http2_netty/pom.xml index cace69cfa45..3820b37d0be 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_http2_netty/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_http2_netty/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -81,12 +81,12 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-netty-server - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/jax_rs/basic_http2_undertow/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_http2_undertow/pom.xml index 0b757763255..30573e642a2 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_http2_undertow/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_http2_undertow/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -81,12 +81,12 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-undertow - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/jax_rs/basic_https/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_https/pom.xml index e3dc0734d42..4db53c96653 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_https/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_https/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -81,17 +81,17 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-client - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.httpcomponents diff --git a/distribution/src/main/release/samples/jax_rs/basic_oidc/pom.xml b/distribution/src/main/release/samples/jax_rs/basic_oidc/pom.xml index 0356e16c23c..f893b4f1da1 100644 --- a/distribution/src/main/release/samples/jax_rs/basic_oidc/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/basic_oidc/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -34,22 +34,22 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-jose-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-sso-oidc - 4.1.0 + 4.1.1-SNAPSHOT jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/big_query/pom.xml b/distribution/src/main/release/samples/jax_rs/big_query/pom.xml index cc55d29f91c..d8b98c01f8a 100644 --- a/distribution/src/main/release/samples/jax_rs/big_query/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/big_query/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -34,32 +34,32 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-jose-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-sso-oidc - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-features-logging - 4.1.0 + 4.1.1-SNAPSHOT jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/content_negotiation/pom.xml b/distribution/src/main/release/samples/jax_rs/content_negotiation/pom.xml index 663c6b9ed6f..dae1ae79ae6 100644 --- a/distribution/src/main/release/samples/jax_rs/content_negotiation/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/content_negotiation/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -83,23 +83,23 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0 + 4.1.1-SNAPSHOT org.codehaus.jettison diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/pom.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/pom.xml index fbfd0f290e9..5b60bcc5f25 100644 --- a/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/description_openapi_microprofile_spring/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3/pom.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_v3/pom.xml index db978963955..7b3b069ef00 100644 --- a/distribution/src/main/release/samples/jax_rs/description_openapi_v3/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_spring/pom.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_spring/pom.xml index 4655d1f660b..97c270b3c32 100644 --- a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_spring/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_spring/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml index 03072644559..fb7a6d3db89 100644 --- a/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/description_openapi_v3_web/pom.xml @@ -26,7 +26,7 @@ under the License. org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml index 568152e0094..2902b07e2e8 100644 --- a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/jax_rs/odata/pom.xml b/distribution/src/main/release/samples/jax_rs/odata/pom.xml index a4f09889421..43914a00239 100644 --- a/distribution/src/main/release/samples/jax_rs/odata/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/odata/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -57,12 +57,12 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.olingo diff --git a/distribution/src/main/release/samples/jax_rs/search/pom.xml b/distribution/src/main/release/samples/jax_rs/search/pom.xml index 643348cb4dd..bf3c3e92061 100644 --- a/distribution/src/main/release/samples/jax_rs/search/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/search/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -83,33 +83,33 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-search - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-security-cors - 4.1.0 + 4.1.1-SNAPSHOT org.apache.lucene diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_boot/pom.xml index 794a190b9e8..8abc5ac26ff 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_boot/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_boot/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. org.apache.cxf.samples @@ -16,7 +16,7 @@ org.apache.cxf cxf-spring-boot-starter-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.springframework.boot @@ -32,12 +32,12 @@ org.apache.cxf cxf-rt-rs-service-description-openapi-v3 - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-features-metrics - 4.1.0 + 4.1.1-SNAPSHOT io.micrometer diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/pom.xml index 6eba2c64d58..a9b1932b1b2 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/application/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../../.. spring-boot-sample-rs-scan-app @@ -15,7 +15,7 @@ org.apache.cxf cxf-spring-boot-starter-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.springframework.boot @@ -31,7 +31,7 @@ org.apache.cxf cxf-rt-features-metrics - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/client/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/client/pom.xml index bfeb30070f7..c9319667021 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/client/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/client/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../../.. spring-boot-sample-rs-scan-client @@ -25,13 +25,13 @@ org.apache.cxf cxf-rt-rs-client - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-features-clustering - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/eureka-registry/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/eureka-registry/pom.xml index 746a6696b28..e077e3c4e7f 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_boot_scan/eureka-registry/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_boot_scan/eureka-registry/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../../.. spring-boot-sample-rs-scan-eureka diff --git a/distribution/src/main/release/samples/jax_rs/spring_security/pom.xml b/distribution/src/main/release/samples/jax_rs/spring_security/pom.xml index 236be545248..3e535dc818e 100644 --- a/distribution/src/main/release/samples/jax_rs/spring_security/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/spring_security/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -100,18 +100,18 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml b/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml index 83109db95df..66ee3f55063 100644 --- a/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/sse_cdi/pom.xml @@ -7,7 +7,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -20,19 +20,19 @@ org.apache.cxf cxf-integration-cdi - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-sse - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/jax_rs/sse_client/pom.xml b/distribution/src/main/release/samples/jax_rs/sse_client/pom.xml index e0adb7ab791..2f346811176 100644 --- a/distribution/src/main/release/samples/jax_rs/sse_client/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/sse_client/pom.xml @@ -7,7 +7,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -15,19 +15,19 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-client - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-sse - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml b/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml index f86130c6506..511e6e4869b 100644 --- a/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/sse_spring/pom.xml @@ -7,7 +7,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -15,13 +15,13 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-sse - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/jax_rs/sse_tomcat/pom.xml b/distribution/src/main/release/samples/jax_rs/sse_tomcat/pom.xml index 9f4986e990b..a5fe764a3ce 100644 --- a/distribution/src/main/release/samples/jax_rs/sse_tomcat/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/sse_tomcat/pom.xml @@ -7,7 +7,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -25,13 +25,13 @@ org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-sse - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/jax_rs/tracing_brave/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_brave/pom.xml index 9d2d3a79e47..e63bb6edb65 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_brave/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_brave/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -169,7 +169,7 @@ org.apache.cxf cxf-integration-tracing-brave - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf diff --git a/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml index a1f6fd2186d..f2e49e23ac7 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_micrometer/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -83,33 +83,33 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-client - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-integration-tracing-micrometer - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0 + 4.1.1-SNAPSHOT jakarta.json diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml index 6b1f25f34d0..ae24c6a9853 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -83,33 +83,33 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-client - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-integration-tracing-opentelemetry - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0 + 4.1.1-SNAPSHOT jakarta.json diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry_camel/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry_camel/pom.xml index dc1c4a307d4..8cfe3e744a3 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry_camel/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_opentelemetry_camel/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml b/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml index 6d54dacdb97..9635aee907f 100644 --- a/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/tracing_opentracing/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -83,33 +83,33 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-client - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-integration-tracing-opentracing - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-rs-extension-providers - 4.1.0 + 4.1.1-SNAPSHOT jakarta.json diff --git a/distribution/src/main/release/samples/jax_rs/websocket/pom.xml b/distribution/src/main/release/samples/jax_rs/websocket/pom.xml index 187579c783f..16f9193ab33 100644 --- a/distribution/src/main/release/samples/jax_rs/websocket/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/websocket/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -105,7 +105,7 @@ org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT @@ -142,17 +142,17 @@ org.apache.cxf cxf-rt-transports-websocket - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT jakarta.ws.rs diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml index 49b65d1b758..db362ed87d2 100644 --- a/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/jax_server_aegis_client/pom.xml b/distribution/src/main/release/samples/jax_server_aegis_client/pom.xml index 8f7940cdf0d..630430e791a 100644 --- a/distribution/src/main/release/samples/jax_server_aegis_client/pom.xml +++ b/distribution/src/main/release/samples/jax_server_aegis_client/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -82,23 +82,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-databinding-aegis - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/jaxws_async/pom.xml b/distribution/src/main/release/samples/jaxws_async/pom.xml index 88b02b05efd..cfe6655b5e2 100644 --- a/distribution/src/main/release/samples/jaxws_async/pom.xml +++ b/distribution/src/main/release/samples/jaxws_async/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -37,7 +37,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -92,7 +92,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT @@ -127,17 +127,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-hc - 4.1.0 + 4.1.1-SNAPSHOT org.springframework @@ -149,7 +149,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.eclipse.jetty diff --git a/distribution/src/main/release/samples/jaxws_dispatch_provider/pom.xml b/distribution/src/main/release/samples/jaxws_dispatch_provider/pom.xml index edcb5284026..3dec71371b0 100644 --- a/distribution/src/main/release/samples/jaxws_dispatch_provider/pom.xml +++ b/distribution/src/main/release/samples/jaxws_dispatch_provider/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-SOAPService1 @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT com.sun.xml.messaging.saaj diff --git a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml index cd021b3ac7c..5276dc34e1c 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-SOAPService1 diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml index 269488699b1..83fc6f0e9c4 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml index 0a6ed3d5538..6ed0914af14 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -38,7 +38,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-SOAPService1 diff --git a/distribution/src/main/release/samples/jaxws_handlers/pom.xml b/distribution/src/main/release/samples/jaxws_handlers/pom.xml index ce7613110d3..17bc678316b 100644 --- a/distribution/src/main/release/samples/jaxws_handlers/pom.xml +++ b/distribution/src/main/release/samples/jaxws_handlers/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-SOAPService1 @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT com.sun.xml.messaging.saaj diff --git a/distribution/src/main/release/samples/jaxws_spring_boot/pom.xml b/distribution/src/main/release/samples/jaxws_spring_boot/pom.xml index 4daa770e356..88593004edf 100644 --- a/distribution/src/main/release/samples/jaxws_spring_boot/pom.xml +++ b/distribution/src/main/release/samples/jaxws_spring_boot/pom.xml @@ -4,7 +4,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT .. spring-boot-sample-ws-cxf @@ -15,7 +15,7 @@ org.apache.cxf cxf-spring-boot-starter-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.springframework.boot @@ -31,7 +31,7 @@ org.apache.cxf cxf-rt-features-metrics - 4.1.0 + 4.1.1-SNAPSHOT io.micrometer diff --git a/distribution/src/main/release/samples/jms_pubsub/pom.xml b/distribution/src/main/release/samples/jms_pubsub/pom.xml index c83be1e1d29..6d8e667eedc 100644 --- a/distribution/src/main/release/samples/jms_pubsub/pom.xml +++ b/distribution/src/main/release/samples/jms_pubsub/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources diff --git a/distribution/src/main/release/samples/jms_queue/pom.xml b/distribution/src/main/release/samples/jms_queue/pom.xml index 6ae2023203d..7739f101dd9 100644 --- a/distribution/src/main/release/samples/jms_queue/pom.xml +++ b/distribution/src/main/release/samples/jms_queue/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -137,12 +137,12 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-jms - 4.1.0 + 4.1.1-SNAPSHOT org.apache.activemq diff --git a/distribution/src/main/release/samples/jms_spec_demo/pom.xml b/distribution/src/main/release/samples/jms_spec_demo/pom.xml index 5ea2c30fa3a..7cb585756e4 100644 --- a/distribution/src/main/release/samples/jms_spec_demo/pom.xml +++ b/distribution/src/main/release/samples/jms_spec_demo/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -137,12 +137,12 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-jms - 4.1.0 + 4.1.1-SNAPSHOT org.apache.activemq diff --git a/distribution/src/main/release/samples/jms_spring_config/pom.xml b/distribution/src/main/release/samples/jms_spring_config/pom.xml index 89c87bbf6eb..5117eccfecb 100644 --- a/distribution/src/main/release/samples/jms_spring_config/pom.xml +++ b/distribution/src/main/release/samples/jms_spring_config/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -47,7 +47,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources diff --git a/distribution/src/main/release/samples/js_browser_client_java_first/pom.xml b/distribution/src/main/release/samples/js_browser_client_java_first/pom.xml index abded57118c..07b7d097d1c 100644 --- a/distribution/src/main/release/samples/js_browser_client_java_first/pom.xml +++ b/distribution/src/main/release/samples/js_browser_client_java_first/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -59,22 +59,22 @@ org.apache.cxf cxf-rt-javascript - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/js_browser_client_simple/pom.xml b/distribution/src/main/release/samples/js_browser_client_simple/pom.xml index 24c3f412a98..8376eaad676 100644 --- a/distribution/src/main/release/samples/js_browser_client_simple/pom.xml +++ b/distribution/src/main/release/samples/js_browser_client_simple/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -111,22 +111,22 @@ org.apache.cxf cxf-rt-javascript - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/js_client/pom.xml b/distribution/src/main/release/samples/js_client/pom.xml index 271b8240a45..4e37d68bd67 100644 --- a/distribution/src/main/release/samples/js_client/pom.xml +++ b/distribution/src/main/release/samples/js_client/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -113,22 +113,22 @@ org.apache.cxf cxf-rt-javascript - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.mozilla diff --git a/distribution/src/main/release/samples/js_provider/pom.xml b/distribution/src/main/release/samples/js_provider/pom.xml index c79048b0ee7..255de3522df 100644 --- a/distribution/src/main/release/samples/js_provider/pom.xml +++ b/distribution/src/main/release/samples/js_provider/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -46,7 +46,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -128,18 +128,18 @@ org.apache.cxf cxf-rt-frontend-js - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT com.sun.xml.messaging.saaj diff --git a/distribution/src/main/release/samples/mtom/pom.xml b/distribution/src/main/release/samples/mtom/pom.xml index a5d6762b427..52f62e02ab6 100644 --- a/distribution/src/main/release/samples/mtom/pom.xml +++ b/distribution/src/main/release/samples/mtom/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -115,18 +115,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.eclipse.angus diff --git a/distribution/src/main/release/samples/performance/base/pom.xml b/distribution/src/main/release/samples/performance/base/pom.xml index 03bf2302498..39dd54be982 100644 --- a/distribution/src/main/release/samples/performance/base/pom.xml +++ b/distribution/src/main/release/samples/performance/base/pom.xml @@ -23,7 +23,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/performance/jaxrs/pom.xml b/distribution/src/main/release/samples/performance/jaxrs/pom.xml index f041030d7ad..4c1b67910ce 100644 --- a/distribution/src/main/release/samples/performance/jaxrs/pom.xml +++ b/distribution/src/main/release/samples/performance/jaxrs/pom.xml @@ -23,7 +23,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/performance/soap_http_doc_lit/pom.xml b/distribution/src/main/release/samples/performance/soap_http_doc_lit/pom.xml index 203681b3406..1bf063d6a84 100644 --- a/distribution/src/main/release/samples/performance/soap_http_doc_lit/pom.xml +++ b/distribution/src/main/release/samples/performance/soap_http_doc_lit/pom.xml @@ -24,7 +24,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 9745c57f2af..1172e2d0c09 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.samples cxf-samples pom - 4.1.0 + 4.1.1-SNAPSHOT Apache CXF Samples Apache CXF Samples https://cxf.apache.org @@ -169,14 +169,14 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT pom import org.apache.cxf cxf - 4.1.0 + 4.1.1-SNAPSHOT pom import diff --git a/distribution/src/main/release/samples/restful_dispatch/pom.xml b/distribution/src/main/release/samples/restful_dispatch/pom.xml index e0a70767351..fa1c7efa81c 100644 --- a/distribution/src/main/release/samples/restful_dispatch/pom.xml +++ b/distribution/src/main/release/samples/restful_dispatch/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -82,23 +82,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxrs - 4.1.0 + 4.1.1-SNAPSHOT jakarta.ws.rs diff --git a/distribution/src/main/release/samples/ruby_spring_support/pom.xml b/distribution/src/main/release/samples/ruby_spring_support/pom.xml index 0a2d1995ab2..6ae694339cf 100644 --- a/distribution/src/main/release/samples/ruby_spring_support/pom.xml +++ b/distribution/src/main/release/samples/ruby_spring_support/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT @@ -108,18 +108,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.jruby diff --git a/distribution/src/main/release/samples/soap_header/pom.xml b/distribution/src/main/release/samples/soap_header/pom.xml index 50c265cb90a..4335da95cea 100644 --- a/distribution/src/main/release/samples/soap_header/pom.xml +++ b/distribution/src/main/release/samples/soap_header/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/sts/pom.xml b/distribution/src/main/release/samples/sts/pom.xml index bcdce0f9cd1..5916603771f 100644 --- a/distribution/src/main/release/samples/sts/pom.xml +++ b/distribution/src/main/release/samples/sts/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT .. @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -97,7 +97,7 @@ org.apache.cxf.services.sts cxf-services-sts-core - 4.1.0 + 4.1.1-SNAPSHOT @@ -130,7 +130,7 @@ org.apache.cxf.services.sts cxf-services-sts-core - 4.1.0 + 4.1.1-SNAPSHOT @@ -245,27 +245,27 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-security - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-policy - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/throttling/pom.xml b/distribution/src/main/release/samples/throttling/pom.xml index a452ac676d0..6234e846de1 100644 --- a/distribution/src/main/release/samples/throttling/pom.xml +++ b/distribution/src/main/release/samples/throttling/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${basedir}/src/main/config/hello_world.wsdl @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -123,32 +123,32 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-management - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-features-metrics - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-features-throttling - 4.1.0 + 4.1.1-SNAPSHOT org.slf4j diff --git a/distribution/src/main/release/samples/ws_addressing/pom.xml b/distribution/src/main/release/samples/ws_addressing/pom.xml index cdc12689201..ab57d0313fd 100644 --- a/distribution/src/main/release/samples/ws_addressing/pom.xml +++ b/distribution/src/main/release/samples/ws_addressing/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -118,17 +118,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/ws_discovery/pom.xml b/distribution/src/main/release/samples/ws_discovery/pom.xml index 5f417bc1fbe..53bd5f2c510 100644 --- a/distribution/src/main/release/samples/ws_discovery/pom.xml +++ b/distribution/src/main/release/samples/ws_discovery/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -37,22 +37,22 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-api - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.services.ws-discovery cxf-services-ws-discovery-service - 4.1.0 + 4.1.1-SNAPSHOT @@ -61,7 +61,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -88,7 +88,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/ws_eventing/pom.xml b/distribution/src/main/release/samples/ws_eventing/pom.xml index f87cc3fdafd..8df82337f34 100644 --- a/distribution/src/main/release/samples/ws_eventing/pom.xml +++ b/distribution/src/main/release/samples/ws_eventing/pom.xml @@ -25,24 +25,24 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-core - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.springframework @@ -55,12 +55,12 @@ org.apache.cxf cxf-rt-ws-eventing - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-addr - 4.1.0 + 4.1.1-SNAPSHOT jakarta.servlet diff --git a/distribution/src/main/release/samples/ws_notification/pom.xml b/distribution/src/main/release/samples/ws_notification/pom.xml index e40c91b7c01..dc0ee7c3da0 100644 --- a/distribution/src/main/release/samples/ws_notification/pom.xml +++ b/distribution/src/main/release/samples/ws_notification/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} diff --git a/distribution/src/main/release/samples/ws_policy/pom.xml b/distribution/src/main/release/samples/ws_policy/pom.xml index 22be7f142ac..36bde2e112b 100644 --- a/distribution/src/main/release/samples/ws_policy/pom.xml +++ b/distribution/src/main/release/samples/ws_policy/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -124,17 +124,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/ws_rm/pom.xml b/distribution/src/main/release/samples/ws_rm/pom.xml index a8c16f845c2..109a87c2a01 100644 --- a/distribution/src/main/release/samples/ws_rm/pom.xml +++ b/distribution/src/main/release/samples/ws_rm/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -108,23 +108,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-rm - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/ws_security/sign_enc/pom.xml b/distribution/src/main/release/samples/ws_security/sign_enc/pom.xml index 68d565f12e1..fe13028c4ed 100644 --- a/distribution/src/main/release/samples/ws_security/sign_enc/pom.xml +++ b/distribution/src/main/release/samples/ws_security/sign_enc/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -47,7 +47,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -165,38 +165,38 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-rm - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-security - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-addr - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-policy - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/ws_security/sign_enc_policy/pom.xml b/distribution/src/main/release/samples/ws_security/sign_enc_policy/pom.xml index 795e685699c..8ddb2edcc94 100644 --- a/distribution/src/main/release/samples/ws_security/sign_enc_policy/pom.xml +++ b/distribution/src/main/release/samples/ws_security/sign_enc_policy/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -33,7 +33,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -169,27 +169,27 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-security - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-policy - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/ws_security/ut/pom.xml b/distribution/src/main/release/samples/ws_security/ut/pom.xml index a5a1014a8b7..603d21a8564 100644 --- a/distribution/src/main/release/samples/ws_security/ut/pom.xml +++ b/distribution/src/main/release/samples/ws_security/ut/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -154,23 +154,23 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-security - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/ws_security/ut_policy/pom.xml b/distribution/src/main/release/samples/ws_security/ut_policy/pom.xml index 44836438c48..a7dc54a5593 100644 --- a/distribution/src/main/release/samples/ws_security/ut_policy/pom.xml +++ b/distribution/src/main/release/samples/ws_security/ut_policy/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ../.. @@ -34,7 +34,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -198,27 +198,27 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-security - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-ws-policy - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/ws_transaction/client/pom.xml b/distribution/src/main/release/samples/ws_transaction/client/pom.xml index ada3d204318..c28d61ec9c6 100644 --- a/distribution/src/main/release/samples/ws_transaction/client/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/client/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.samples ws_transaction - 4.1.0 + 4.1.1-SNAPSHOT .. spring-boot-sample-ws-cxf-client diff --git a/distribution/src/main/release/samples/ws_transaction/pom.xml b/distribution/src/main/release/samples/ws_transaction/pom.xml index 3b425418b59..6405d986439 100644 --- a/distribution/src/main/release/samples/ws_transaction/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT pom @@ -45,12 +45,12 @@ org.apache.cxf cxf-rt-features-logging - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-spring-boot-starter-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.springframework.boot diff --git a/distribution/src/main/release/samples/ws_transaction/ws_first/pom.xml b/distribution/src/main/release/samples/ws_transaction/ws_first/pom.xml index 8cd769d6aa8..aa9d6772192 100644 --- a/distribution/src/main/release/samples/ws_transaction/ws_first/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/ws_first/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.samples ws_transaction - 4.1.0 + 4.1.1-SNAPSHOT .. spring-boot-sample-ws-cxf-first-service diff --git a/distribution/src/main/release/samples/ws_transaction/ws_second/pom.xml b/distribution/src/main/release/samples/ws_transaction/ws_second/pom.xml index 4366ace8b26..553fd1e4959 100644 --- a/distribution/src/main/release/samples/ws_transaction/ws_second/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/ws_second/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.samples ws_transaction - 4.1.0 + 4.1.1-SNAPSHOT .. spring-boot-sample-ws-cxf-second-service diff --git a/distribution/src/main/release/samples/wsdl_first/pom.xml b/distribution/src/main/release/samples/wsdl_first/pom.xml index 5e26674999b..b5a373c770f 100644 --- a/distribution/src/main/release/samples/wsdl_first/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT @@ -64,7 +64,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -116,7 +116,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT @@ -146,7 +146,7 @@ org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT @@ -176,7 +176,7 @@ org.apache.cxf cxf-rt-transports-http-netty-server - 4.1.0 + 4.1.1-SNAPSHOT @@ -235,7 +235,7 @@ org.apache.cxf cxf-rt-transports-http-netty-client - 4.1.0 + 4.1.1-SNAPSHOT @@ -244,22 +244,22 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-management - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-features-metrics - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.xjc-utils diff --git a/distribution/src/main/release/samples/wsdl_first_dynamic_client/pom.xml b/distribution/src/main/release/samples/wsdl_first_dynamic_client/pom.xml index 0feb3bc4d33..f5bdaf457af 100644 --- a/distribution/src/main/release/samples/wsdl_first_dynamic_client/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_dynamic_client/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -36,7 +36,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -112,18 +112,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/wsdl_first_https/pom.xml b/distribution/src/main/release/samples/wsdl_first_https/pom.xml index e4d58aec3d5..c07dae50466 100644 --- a/distribution/src/main/release/samples/wsdl_first_https/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_https/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${basedir}/src/main/config/hello_world.wsdl @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -198,17 +198,17 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT org.springframework diff --git a/distribution/src/main/release/samples/wsdl_first_pure_xml/pom.xml b/distribution/src/main/release/samples/wsdl_first_pure_xml/pom.xml index daab907a1f4..94ae30593cd 100644 --- a/distribution/src/main/release/samples/wsdl_first_pure_xml/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_pure_xml/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/wsdl_first_rpclit/pom.xml b/distribution/src/main/release/samples/wsdl_first_rpclit/pom.xml index 15dbcf0a227..b4aeecfc6e1 100644 --- a/distribution/src/main/release/samples/wsdl_first_rpclit/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_rpclit/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/wsdl_first_soap12/pom.xml b/distribution/src/main/release/samples/wsdl_first_soap12/pom.xml index 5a3043bc373..33484448e40 100644 --- a/distribution/src/main/release/samples/wsdl_first_soap12/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_soap12/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/distribution/src/main/release/samples/wsdl_first_xml_wrapped/pom.xml b/distribution/src/main/release/samples/wsdl_first_xml_wrapped/pom.xml index 84c38027d4d..54b90834357 100644 --- a/distribution/src/main/release/samples/wsdl_first_xml_wrapped/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first_xml_wrapped/pom.xml @@ -25,7 +25,7 @@ org.apache.cxf.samples cxf-samples - 4.1.0 + 4.1.1-SNAPSHOT ${project.version} @@ -35,7 +35,7 @@ org.apache.cxf cxf-codegen-plugin - 4.1.0 + 4.1.1-SNAPSHOT generate-sources @@ -114,18 +114,18 @@ org.apache.cxf cxf-rt-frontend-jaxws - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf cxf-rt-transports-http-jetty - 4.1.0 + 4.1.1-SNAPSHOT diff --git a/integration/cdi/pom.xml b/integration/cdi/pom.xml index 8af2bd46ccd..79113bfb2eb 100644 --- a/integration/cdi/pom.xml +++ b/integration/cdi/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/integration/jca/pom.xml b/integration/jca/pom.xml index 32f2048e8cd..40fbbac6f9a 100644 --- a/integration/jca/pom.xml +++ b/integration/jca/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/integration/pom.xml b/integration/pom.xml index 34ff3779c0c..36bf7551c97 100644 --- a/integration/pom.xml +++ b/integration/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf - 4.1.0 + 4.1.1-SNAPSHOT jca diff --git a/integration/spring-boot/autoconfigure/pom.xml b/integration/spring-boot/autoconfigure/pom.xml index f0ce6818846..9476310464e 100644 --- a/integration/spring-boot/autoconfigure/pom.xml +++ b/integration/spring-boot/autoconfigure/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/integration/spring-boot/pom.xml b/integration/spring-boot/pom.xml index 6c11a112e01..f5d27ac118d 100644 --- a/integration/spring-boot/pom.xml +++ b/integration/spring-boot/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-integration - 4.1.0 + 4.1.1-SNAPSHOT autoconfigure diff --git a/integration/spring-boot/starter-jaxrs/pom.xml b/integration/spring-boot/starter-jaxrs/pom.xml index cb6c0805499..83d9351d816 100644 --- a/integration/spring-boot/starter-jaxrs/pom.xml +++ b/integration/spring-boot/starter-jaxrs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/integration/spring-boot/starter-jaxws/pom.xml b/integration/spring-boot/starter-jaxws/pom.xml index 70619e546d6..e4c1778aacb 100644 --- a/integration/spring-boot/starter-jaxws/pom.xml +++ b/integration/spring-boot/starter-jaxws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/integration/tracing/tracing-brave/pom.xml b/integration/tracing/tracing-brave/pom.xml index 385ddf38176..0a902a989c0 100644 --- a/integration/tracing/tracing-brave/pom.xml +++ b/integration/tracing/tracing-brave/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/integration/tracing/tracing-micrometer/pom.xml b/integration/tracing/tracing-micrometer/pom.xml index 1e5319d850d..27a6bca3bdd 100644 --- a/integration/tracing/tracing-micrometer/pom.xml +++ b/integration/tracing/tracing-micrometer/pom.xml @@ -8,7 +8,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/integration/tracing/tracing-opentelemetry/pom.xml b/integration/tracing/tracing-opentelemetry/pom.xml index 735a5f2ce44..638a264988f 100644 --- a/integration/tracing/tracing-opentelemetry/pom.xml +++ b/integration/tracing/tracing-opentelemetry/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/integration/tracing/tracing-opentracing/pom.xml b/integration/tracing/tracing-opentracing/pom.xml index c23a96b95b8..5e274d05a1c 100644 --- a/integration/tracing/tracing-opentracing/pom.xml +++ b/integration/tracing/tracing-opentracing/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/maven-plugins/archetypes/cxf-jaxrs-service/pom.xml b/maven-plugins/archetypes/cxf-jaxrs-service/pom.xml index 8d45662d2f9..f8fbe13988e 100644 --- a/maven-plugins/archetypes/cxf-jaxrs-service/pom.xml +++ b/maven-plugins/archetypes/cxf-jaxrs-service/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml org.apache.cxf.archetype diff --git a/maven-plugins/archetypes/cxf-jaxws-javafirst/pom.xml b/maven-plugins/archetypes/cxf-jaxws-javafirst/pom.xml index 278eb2fe5c0..4b67c82fe25 100644 --- a/maven-plugins/archetypes/cxf-jaxws-javafirst/pom.xml +++ b/maven-plugins/archetypes/cxf-jaxws-javafirst/pom.xml @@ -22,12 +22,12 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml org.apache.cxf.archetype cxf-jaxws-javafirst - 4.1.0 + 4.1.1-SNAPSHOT maven-archetype Apache CXF Archetype - Simple JAX-WS Java First Creates a project for developing a Web service starting from Java code diff --git a/maven-plugins/archetypes/cxf-jaxws-wsdlfirst/pom.xml b/maven-plugins/archetypes/cxf-jaxws-wsdlfirst/pom.xml index 07367f4bcf6..59859b309fa 100644 --- a/maven-plugins/archetypes/cxf-jaxws-wsdlfirst/pom.xml +++ b/maven-plugins/archetypes/cxf-jaxws-wsdlfirst/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml org.apache.cxf.archetype diff --git a/maven-plugins/archetypes/pom.xml b/maven-plugins/archetypes/pom.xml index f15d5aaa26a..d257739f402 100644 --- a/maven-plugins/archetypes/pom.xml +++ b/maven-plugins/archetypes/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0 + 4.1.1-SNAPSHOT cxf-jaxws-javafirst diff --git a/maven-plugins/codegen-plugin/pom.xml b/maven-plugins/codegen-plugin/pom.xml index e7c649faebe..f5f01af09c3 100644 --- a/maven-plugins/codegen-plugin/pom.xml +++ b/maven-plugins/codegen-plugin/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.plugin.codegen diff --git a/maven-plugins/corba/pom.xml b/maven-plugins/corba/pom.xml index 0f173d5a0bc..3e336042275 100644 --- a/maven-plugins/corba/pom.xml +++ b/maven-plugins/corba/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.plugin.corbatools diff --git a/maven-plugins/java2wadl-plugin/pom.xml b/maven-plugins/java2wadl-plugin/pom.xml index 2134d1b61a1..4a972b86f50 100644 --- a/maven-plugins/java2wadl-plugin/pom.xml +++ b/maven-plugins/java2wadl-plugin/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf cxf-java2wadl-plugin maven-plugin - 4.1.0 + 4.1.1-SNAPSHOT Apache CXF Java2WADL Maven2 Plugin Apache CXF Java2WADL Maven2 Plugin https://cxf.apache.org @@ -31,7 +31,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.plugin.java2wadl diff --git a/maven-plugins/java2ws-plugin/pom.xml b/maven-plugins/java2ws-plugin/pom.xml index 944fff28d5d..5fb35a61d11 100644 --- a/maven-plugins/java2ws-plugin/pom.xml +++ b/maven-plugins/java2ws-plugin/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.plugin.java2ws diff --git a/maven-plugins/pom.xml b/maven-plugins/pom.xml index 9b32ca55ee5..a20595eb151 100644 --- a/maven-plugins/pom.xml +++ b/maven-plugins/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../parent diff --git a/maven-plugins/wadl2java-plugin/pom.xml b/maven-plugins/wadl2java-plugin/pom.xml index 0d98015dcc4..8648bd1100a 100644 --- a/maven-plugins/wadl2java-plugin/pom.xml +++ b/maven-plugins/wadl2java-plugin/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.plugin.wadl2java diff --git a/maven-plugins/wsdl-validator-plugin/pom.xml b/maven-plugins/wsdl-validator-plugin/pom.xml index 4adbc7c636b..9738ba1d7c5 100644 --- a/maven-plugins/wsdl-validator-plugin/pom.xml +++ b/maven-plugins/wsdl-validator-plugin/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-maven-plugins - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.plugin.wsdl.validator diff --git a/parent/pom.xml b/parent/pom.xml index c8bb42994c7..9602be3fa05 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf cxf - 4.1.0 + 4.1.1-SNAPSHOT 4.0.0 cxf-parent diff --git a/pom.xml b/pom.xml index ddf217a196d..019da25a296 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 4.0.0 org.apache.cxf cxf - 4.1.0 + 4.1.1-SNAPSHOT Apache CXF Apache CXF is an open-source services framework that aids in the development of services using front-end programming APIs, like JAX-WS @@ -32,7 +32,7 @@ scm:git:https://gitbox.apache.org/repos/asf/cxf.git scm:git:https://gitbox.apache.org/repos/asf/cxf.git https://gitbox.apache.org/repos/asf?p=cxf.git - cxf-4.1.0 + HEAD jira diff --git a/rt/bindings/coloc/pom.xml b/rt/bindings/coloc/pom.xml index e6ee0dfb8d0..12f5c5fbfc6 100644 --- a/rt/bindings/coloc/pom.xml +++ b/rt/bindings/coloc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/bindings/corba/pom.xml b/rt/bindings/corba/pom.xml index a946db6de32..7c68d0b88a9 100644 --- a/rt/bindings/corba/pom.xml +++ b/rt/bindings/corba/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/bindings/pom.xml b/rt/bindings/pom.xml index 56c2bc12574..d9d11121fb9 100644 --- a/rt/bindings/pom.xml +++ b/rt/bindings/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0 + 4.1.1-SNAPSHOT soap diff --git a/rt/bindings/soap/pom.xml b/rt/bindings/soap/pom.xml index 1ecd3f491d4..f3b370eb5ae 100644 --- a/rt/bindings/soap/pom.xml +++ b/rt/bindings/soap/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/bindings/xml/pom.xml b/rt/bindings/xml/pom.xml index 1789f8866e3..8f551385253 100644 --- a/rt/bindings/xml/pom.xml +++ b/rt/bindings/xml/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/databinding/aegis/pom.xml b/rt/databinding/aegis/pom.xml index a7231d9dab6..8b93c6b86e1 100644 --- a/rt/databinding/aegis/pom.xml +++ b/rt/databinding/aegis/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/databinding/jaxb/pom.xml b/rt/databinding/jaxb/pom.xml index b616afeaf2b..de83b92bbd9 100644 --- a/rt/databinding/jaxb/pom.xml +++ b/rt/databinding/jaxb/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/databinding/pom.xml b/rt/databinding/pom.xml index 1fe405f5354..2f2ad5309ec 100644 --- a/rt/databinding/pom.xml +++ b/rt/databinding/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0 + 4.1.1-SNAPSHOT jaxb diff --git a/rt/features/clustering/pom.xml b/rt/features/clustering/pom.xml index 8b88a5bc6f5..b9df2199de3 100644 --- a/rt/features/clustering/pom.xml +++ b/rt/features/clustering/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/features/logging/pom.xml b/rt/features/logging/pom.xml index f94c49f7ed2..71db70f8e1c 100644 --- a/rt/features/logging/pom.xml +++ b/rt/features/logging/pom.xml @@ -3,7 +3,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml cxf-rt-features-logging diff --git a/rt/features/metrics/pom.xml b/rt/features/metrics/pom.xml index 2952056461e..b976173d445 100644 --- a/rt/features/metrics/pom.xml +++ b/rt/features/metrics/pom.xml @@ -3,7 +3,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml cxf-rt-features-metrics diff --git a/rt/features/pom.xml b/rt/features/pom.xml index 141d73bdb9a..022ee036f57 100644 --- a/rt/features/pom.xml +++ b/rt/features/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0 + 4.1.1-SNAPSHOT clustering diff --git a/rt/features/throttling/pom.xml b/rt/features/throttling/pom.xml index fcbe5fb06b5..1d9e3dcf73c 100644 --- a/rt/features/throttling/pom.xml +++ b/rt/features/throttling/pom.xml @@ -3,7 +3,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml cxf-rt-features-throttling diff --git a/rt/frontend/jaxrs/pom.xml b/rt/frontend/jaxrs/pom.xml index 7425198d7d6..4835492eb2b 100644 --- a/rt/frontend/jaxrs/pom.xml +++ b/rt/frontend/jaxrs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/frontend/jaxws/pom.xml b/rt/frontend/jaxws/pom.xml index 4f2ef935076..4f695c2ee84 100644 --- a/rt/frontend/jaxws/pom.xml +++ b/rt/frontend/jaxws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/frontend/js/pom.xml b/rt/frontend/js/pom.xml index a50e67e8dd9..7390b64e090 100644 --- a/rt/frontend/js/pom.xml +++ b/rt/frontend/js/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/frontend/pom.xml b/rt/frontend/pom.xml index 7d0a6a7f500..fafd1752de2 100644 --- a/rt/frontend/pom.xml +++ b/rt/frontend/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0 + 4.1.1-SNAPSHOT simple diff --git a/rt/frontend/simple/pom.xml b/rt/frontend/simple/pom.xml index bb3412bcc8a..3c2f2fe0e58 100644 --- a/rt/frontend/simple/pom.xml +++ b/rt/frontend/simple/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/javascript/javascript-rt/pom.xml b/rt/javascript/javascript-rt/pom.xml index c463754bc74..1f48fbc4025 100644 --- a/rt/javascript/javascript-rt/pom.xml +++ b/rt/javascript/javascript-rt/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-runtime-javascript - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.js diff --git a/rt/javascript/javascript-tests/pom.xml b/rt/javascript/javascript-tests/pom.xml index e5e77173eaf..b11ac711101 100644 --- a/rt/javascript/javascript-tests/pom.xml +++ b/rt/javascript/javascript-tests/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-runtime-javascript - 4.1.0 + 4.1.1-SNAPSHOT org.apache.cxf.js.tests diff --git a/rt/javascript/pom.xml b/rt/javascript/pom.xml index b5450750950..676d3477c29 100644 --- a/rt/javascript/pom.xml +++ b/rt/javascript/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/rt/management/pom.xml b/rt/management/pom.xml index c3fd33c5cbd..a35747a3e7b 100644 --- a/rt/management/pom.xml +++ b/rt/management/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/rt/pom.xml b/rt/pom.xml index 8541788298e..159202b0b74 100644 --- a/rt/pom.xml +++ b/rt/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf - 4.1.0 + 4.1.1-SNAPSHOT wsdl diff --git a/rt/rs/client/pom.xml b/rt/rs/client/pom.xml index 8f6fda34a22..348400f0103 100644 --- a/rt/rs/client/pom.xml +++ b/rt/rs/client/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/rs/description-common-openapi/pom.xml b/rt/rs/description-common-openapi/pom.xml index 178fb57b3a6..a724f02ad52 100644 --- a/rt/rs/description-common-openapi/pom.xml +++ b/rt/rs/description-common-openapi/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/rs/description-microprofile-openapi/pom.xml b/rt/rs/description-microprofile-openapi/pom.xml index 1b977d69ae8..5611f8c3d6e 100644 --- a/rt/rs/description-microprofile-openapi/pom.xml +++ b/rt/rs/description-microprofile-openapi/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/rs/description-openapi-v3/pom.xml b/rt/rs/description-openapi-v3/pom.xml index ef7dee01492..9c81ab6fdfb 100644 --- a/rt/rs/description-openapi-v3/pom.xml +++ b/rt/rs/description-openapi-v3/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/rs/description-swagger-ui/pom.xml b/rt/rs/description-swagger-ui/pom.xml index ac1251c3aed..146820de80e 100644 --- a/rt/rs/description-swagger-ui/pom.xml +++ b/rt/rs/description-swagger-ui/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/rs/description/pom.xml b/rt/rs/description/pom.xml index de356bf4f5d..8ef0543ae85 100644 --- a/rt/rs/description/pom.xml +++ b/rt/rs/description/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/rs/extensions/json-basic/pom.xml b/rt/rs/extensions/json-basic/pom.xml index 7204827fa7e..8bba36dedf1 100644 --- a/rt/rs/extensions/json-basic/pom.xml +++ b/rt/rs/extensions/json-basic/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/extensions/providers/pom.xml b/rt/rs/extensions/providers/pom.xml index 6a4d39f73c8..6b55e90f237 100644 --- a/rt/rs/extensions/providers/pom.xml +++ b/rt/rs/extensions/providers/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/extensions/reactivestreams/pom.xml b/rt/rs/extensions/reactivestreams/pom.xml index 913d2523256..2c2aa6283df 100644 --- a/rt/rs/extensions/reactivestreams/pom.xml +++ b/rt/rs/extensions/reactivestreams/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/extensions/reactor/pom.xml b/rt/rs/extensions/reactor/pom.xml index b2ecd50ac5b..c12a9556246 100644 --- a/rt/rs/extensions/reactor/pom.xml +++ b/rt/rs/extensions/reactor/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/extensions/rx/pom.xml b/rt/rs/extensions/rx/pom.xml index b742f6401eb..02849db53b7 100644 --- a/rt/rs/extensions/rx/pom.xml +++ b/rt/rs/extensions/rx/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/extensions/rx2/pom.xml b/rt/rs/extensions/rx2/pom.xml index 7348ad02d25..6463902f2d5 100644 --- a/rt/rs/extensions/rx2/pom.xml +++ b/rt/rs/extensions/rx2/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/extensions/rx3/pom.xml b/rt/rs/extensions/rx3/pom.xml index e330c437a8c..5b937186a96 100644 --- a/rt/rs/extensions/rx3/pom.xml +++ b/rt/rs/extensions/rx3/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/extensions/search/pom.xml b/rt/rs/extensions/search/pom.xml index 76d351ad24c..b245f2d4a75 100644 --- a/rt/rs/extensions/search/pom.xml +++ b/rt/rs/extensions/search/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/http-sci/pom.xml b/rt/rs/http-sci/pom.xml index 2005de279fb..481cae0b1ed 100644 --- a/rt/rs/http-sci/pom.xml +++ b/rt/rs/http-sci/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/rs/microprofile-client/pom.xml b/rt/rs/microprofile-client/pom.xml index 0359f80f941..fb116b1c334 100644 --- a/rt/rs/microprofile-client/pom.xml +++ b/rt/rs/microprofile-client/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/rs/pom.xml b/rt/rs/pom.xml index 5a4caa9e0f2..023ecb8f27c 100644 --- a/rt/rs/pom.xml +++ b/rt/rs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0 + 4.1.1-SNAPSHOT client diff --git a/rt/rs/security/cors/pom.xml b/rt/rs/security/cors/pom.xml index 1690dae3e32..904ca36cbac 100644 --- a/rt/rs/security/cors/pom.xml +++ b/rt/rs/security/cors/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/security/http-signature/pom.xml b/rt/rs/security/http-signature/pom.xml index adc3ab41902..d9309260eec 100644 --- a/rt/rs/security/http-signature/pom.xml +++ b/rt/rs/security/http-signature/pom.xml @@ -29,7 +29,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/security/jose-parent/jose-jaxrs/pom.xml b/rt/rs/security/jose-parent/jose-jaxrs/pom.xml index 52fbb2dad91..68fd1b5b6e5 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/pom.xml +++ b/rt/rs/security/jose-parent/jose-jaxrs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../../parent/pom.xml diff --git a/rt/rs/security/jose-parent/jose/pom.xml b/rt/rs/security/jose-parent/jose/pom.xml index 9791190349d..77c40717d82 100644 --- a/rt/rs/security/jose-parent/jose/pom.xml +++ b/rt/rs/security/jose-parent/jose/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../../parent/pom.xml diff --git a/rt/rs/security/jose-parent/pom.xml b/rt/rs/security/jose-parent/pom.xml index 46ee8ac1598..cb13487355c 100644 --- a/rt/rs/security/jose-parent/pom.xml +++ b/rt/rs/security/jose-parent/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt-rs-security - 4.1.0 + 4.1.1-SNAPSHOT jose diff --git a/rt/rs/security/oauth-parent/oauth2-saml/pom.xml b/rt/rs/security/oauth-parent/oauth2-saml/pom.xml index 862a84e4e05..00731b238ba 100644 --- a/rt/rs/security/oauth-parent/oauth2-saml/pom.xml +++ b/rt/rs/security/oauth-parent/oauth2-saml/pom.xml @@ -27,7 +27,7 @@ cxf-rt-rs-security-oauth-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/rt/rs/security/oauth-parent/oauth2/pom.xml b/rt/rs/security/oauth-parent/oauth2/pom.xml index d0c92721978..d549e423eb3 100644 --- a/rt/rs/security/oauth-parent/oauth2/pom.xml +++ b/rt/rs/security/oauth-parent/oauth2/pom.xml @@ -27,7 +27,7 @@ cxf-rt-rs-security-oauth-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/rt/rs/security/oauth-parent/pom.xml b/rt/rs/security/oauth-parent/pom.xml index c237a8b1d4d..19df91cf648 100644 --- a/rt/rs/security/oauth-parent/pom.xml +++ b/rt/rs/security/oauth-parent/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/security/pom.xml b/rt/rs/security/pom.xml index 45a07079fa4..78a5d86bdba 100644 --- a/rt/rs/security/pom.xml +++ b/rt/rs/security/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt-rs - 4.1.0 + 4.1.1-SNAPSHOT xml diff --git a/rt/rs/security/sso/oidc/pom.xml b/rt/rs/security/sso/oidc/pom.xml index 6ab53861281..38afb1209cf 100644 --- a/rt/rs/security/sso/oidc/pom.xml +++ b/rt/rs/security/sso/oidc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../../parent/pom.xml diff --git a/rt/rs/security/sso/saml/pom.xml b/rt/rs/security/sso/saml/pom.xml index ddc0208123e..6a82eac384d 100644 --- a/rt/rs/security/sso/saml/pom.xml +++ b/rt/rs/security/sso/saml/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../../parent/pom.xml diff --git a/rt/rs/security/xml/pom.xml b/rt/rs/security/xml/pom.xml index f66d8ce74e7..993a0a35737 100644 --- a/rt/rs/security/xml/pom.xml +++ b/rt/rs/security/xml/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/rs/sse/pom.xml b/rt/rs/sse/pom.xml index e9d7084a897..78ef5e14b2c 100644 --- a/rt/rs/sse/pom.xml +++ b/rt/rs/sse/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/security-saml/pom.xml b/rt/security-saml/pom.xml index 52f685c847c..6ffa6a8d1f1 100644 --- a/rt/security-saml/pom.xml +++ b/rt/security-saml/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/rt/security/pom.xml b/rt/security/pom.xml index 825851a1764..c0edd0093f3 100644 --- a/rt/security/pom.xml +++ b/rt/security/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/rt/transports/http-hc/pom.xml b/rt/transports/http-hc/pom.xml index 27aa223ee83..e8ed1b66f4d 100644 --- a/rt/transports/http-hc/pom.xml +++ b/rt/transports/http-hc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/transports/http-hc5/pom.xml b/rt/transports/http-hc5/pom.xml index f7b3e04438f..4f4655101ab 100644 --- a/rt/transports/http-hc5/pom.xml +++ b/rt/transports/http-hc5/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/transports/http-jetty/pom.xml b/rt/transports/http-jetty/pom.xml index 6275d5f9389..977b981233a 100644 --- a/rt/transports/http-jetty/pom.xml +++ b/rt/transports/http-jetty/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/transports/http-netty/netty-client/pom.xml b/rt/transports/http-netty/netty-client/pom.xml index 70f62cbd015..c57cc347a93 100644 --- a/rt/transports/http-netty/netty-client/pom.xml +++ b/rt/transports/http-netty/netty-client/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/transports/http-netty/netty-server/pom.xml b/rt/transports/http-netty/netty-server/pom.xml index 82a586c1510..6bd79018d7e 100644 --- a/rt/transports/http-netty/netty-server/pom.xml +++ b/rt/transports/http-netty/netty-server/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/rt/transports/http-undertow/pom.xml b/rt/transports/http-undertow/pom.xml index f1763c9472e..9d814014cbe 100644 --- a/rt/transports/http-undertow/pom.xml +++ b/rt/transports/http-undertow/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/transports/http/pom.xml b/rt/transports/http/pom.xml index 75a17a93782..2768b88a1e5 100644 --- a/rt/transports/http/pom.xml +++ b/rt/transports/http/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/transports/jms/pom.xml b/rt/transports/jms/pom.xml index a8a9ce1a3b7..ffa16c4c41a 100644 --- a/rt/transports/jms/pom.xml +++ b/rt/transports/jms/pom.xml @@ -19,7 +19,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/transports/local/pom.xml b/rt/transports/local/pom.xml index d3d4dbd3249..3cde562ce25 100644 --- a/rt/transports/local/pom.xml +++ b/rt/transports/local/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/transports/pom.xml b/rt/transports/pom.xml index 1078cafee52..01c9e0685af 100644 --- a/rt/transports/pom.xml +++ b/rt/transports/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0 + 4.1.1-SNAPSHOT local diff --git a/rt/transports/udp/pom.xml b/rt/transports/udp/pom.xml index 2fcd71e10e3..a8a97776bae 100644 --- a/rt/transports/udp/pom.xml +++ b/rt/transports/udp/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/transports/websocket/pom.xml b/rt/transports/websocket/pom.xml index aad3e01b3c1..1a685bdf71b 100644 --- a/rt/transports/websocket/pom.xml +++ b/rt/transports/websocket/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/ws/addr/pom.xml b/rt/ws/addr/pom.xml index 0c64513e128..ec403ab58a4 100644 --- a/rt/ws/addr/pom.xml +++ b/rt/ws/addr/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/ws/eventing/pom.xml b/rt/ws/eventing/pom.xml index 8c997a0db8a..37995ba7803 100644 --- a/rt/ws/eventing/pom.xml +++ b/rt/ws/eventing/pom.xml @@ -9,7 +9,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/ws/mex/pom.xml b/rt/ws/mex/pom.xml index c2766aa0aec..a881936e971 100644 --- a/rt/ws/mex/pom.xml +++ b/rt/ws/mex/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/ws/policy/pom.xml b/rt/ws/policy/pom.xml index da20802d192..03b90fa3e5e 100644 --- a/rt/ws/policy/pom.xml +++ b/rt/ws/policy/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/ws/pom.xml b/rt/ws/pom.xml index e15b8e15963..fdade29f668 100644 --- a/rt/ws/pom.xml +++ b/rt/ws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-rt - 4.1.0 + 4.1.1-SNAPSHOT policy diff --git a/rt/ws/rm/pom.xml b/rt/ws/rm/pom.xml index d6b30095bb9..e5114bfd132 100644 --- a/rt/ws/rm/pom.xml +++ b/rt/ws/rm/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/ws/security/pom.xml b/rt/ws/security/pom.xml index 8f6f6f00674..a806e4cecab 100644 --- a/rt/ws/security/pom.xml +++ b/rt/ws/security/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/ws/transfer/pom.xml b/rt/ws/transfer/pom.xml index fbd7ffe1376..ab1e62358eb 100644 --- a/rt/ws/transfer/pom.xml +++ b/rt/ws/transfer/pom.xml @@ -9,7 +9,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/rt/wsdl/pom.xml b/rt/wsdl/pom.xml index 54635c69186..73fc325dcdd 100644 --- a/rt/wsdl/pom.xml +++ b/rt/wsdl/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/services/pom.xml b/services/pom.xml index 21333943f8b..178148f2cef 100644 --- a/services/pom.xml +++ b/services/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf ../pom.xml - 4.1.0 + 4.1.1-SNAPSHOT sts diff --git a/services/sts/pom.xml b/services/sts/pom.xml index 84314168413..25917c3a368 100644 --- a/services/sts/pom.xml +++ b/services/sts/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.services cxf-services - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/services/sts/sts-core/pom.xml b/services/sts/sts-core/pom.xml index 1aa9f2f565a..ea5ff09dff6 100644 --- a/services/sts/sts-core/pom.xml +++ b/services/sts/sts-core/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/sts/systests/advanced/pom.xml b/services/sts/systests/advanced/pom.xml index 7df789924ab..a8bd21fcd6d 100644 --- a/services/sts/systests/advanced/pom.xml +++ b/services/sts/systests/advanced/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/services/sts/systests/basic/pom.xml b/services/sts/systests/basic/pom.xml index c4c09209c8e..ad4d1f003b5 100644 --- a/services/sts/systests/basic/pom.xml +++ b/services/sts/systests/basic/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/services/sts/systests/pom.xml b/services/sts/systests/pom.xml index 15a6ea31556..0e1532edecf 100644 --- a/services/sts/systests/pom.xml +++ b/services/sts/systests/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.services.sts cxf-services-sts - 4.1.0 + 4.1.1-SNAPSHOT basic diff --git a/services/sts/systests/sts-osgi/pom.xml b/services/sts/systests/sts-osgi/pom.xml index 419ab514b2a..72088f6437f 100644 --- a/services/sts/systests/sts-osgi/pom.xml +++ b/services/sts/systests/sts-osgi/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/services/ws-discovery/pom.xml b/services/ws-discovery/pom.xml index 8d7221877b1..6c8136cbb97 100644 --- a/services/ws-discovery/pom.xml +++ b/services/ws-discovery/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.services cxf-services - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/services/ws-discovery/ws-discovery-api/pom.xml b/services/ws-discovery/ws-discovery-api/pom.xml index f8e659b1d3a..df8114cb558 100644 --- a/services/ws-discovery/ws-discovery-api/pom.xml +++ b/services/ws-discovery/ws-discovery-api/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/ws-discovery/ws-discovery-service/pom.xml b/services/ws-discovery/ws-discovery-service/pom.xml index 4322fb5408f..6cf1699698d 100644 --- a/services/ws-discovery/ws-discovery-service/pom.xml +++ b/services/ws-discovery/ws-discovery-service/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/wsn/pom.xml b/services/wsn/pom.xml index bfa95e507b9..eea96a4f0b0 100644 --- a/services/wsn/pom.xml +++ b/services/wsn/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.services cxf-services - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/services/wsn/wsn-api/pom.xml b/services/wsn/wsn-api/pom.xml index 900c54830ff..c026717cca1 100644 --- a/services/wsn/wsn-api/pom.xml +++ b/services/wsn/wsn-api/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/wsn/wsn-core/pom.xml b/services/wsn/wsn-core/pom.xml index f8841460e20..d7f863a070d 100644 --- a/services/wsn/wsn-core/pom.xml +++ b/services/wsn/wsn-core/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/wsn/wsn-osgi/pom.xml b/services/wsn/wsn-osgi/pom.xml index 599910800fe..92250f0b327 100644 --- a/services/wsn/wsn-osgi/pom.xml +++ b/services/wsn/wsn-osgi/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/xkms/pom.xml b/services/xkms/pom.xml index b9545c7ddbd..f139aec0708 100644 --- a/services/xkms/pom.xml +++ b/services/xkms/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf.services cxf-services - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml diff --git a/services/xkms/xkms-client/pom.xml b/services/xkms/xkms-client/pom.xml index 8f8136b9c9e..8264313c63c 100644 --- a/services/xkms/xkms-client/pom.xml +++ b/services/xkms/xkms-client/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/xkms/xkms-common/pom.xml b/services/xkms/xkms-common/pom.xml index 9149606affe..5232da836e0 100644 --- a/services/xkms/xkms-common/pom.xml +++ b/services/xkms/xkms-common/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/xkms/xkms-service/pom.xml b/services/xkms/xkms-service/pom.xml index 21529dced09..ea3e05b2d24 100644 --- a/services/xkms/xkms-service/pom.xml +++ b/services/xkms/xkms-service/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/xkms/xkms-war/pom.xml b/services/xkms/xkms-war/pom.xml index e9de494439e..53be3feb586 100644 --- a/services/xkms/xkms-war/pom.xml +++ b/services/xkms/xkms-war/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/xkms/xkms-x509-handlers/pom.xml b/services/xkms/xkms-x509-handlers/pom.xml index e4ca003302c..645f50685ca 100644 --- a/services/xkms/xkms-x509-handlers/pom.xml +++ b/services/xkms/xkms-x509-handlers/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/services/xkms/xkms-x509-repo-ldap/pom.xml b/services/xkms/xkms-x509-repo-ldap/pom.xml index 1bfbaec1361..ac14d2cac83 100644 --- a/services/xkms/xkms-x509-repo-ldap/pom.xml +++ b/services/xkms/xkms-x509-repo-ldap/pom.xml @@ -3,7 +3,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml org.apache.cxf.services.xkms diff --git a/systests/cdi/base/pom.xml b/systests/cdi/base/pom.xml index ede37ac2bad..d9b95f6c8d7 100644 --- a/systests/cdi/base/pom.xml +++ b/systests/cdi/base/pom.xml @@ -22,7 +22,7 @@ cxf-systests-cdi org.apache.cxf.systests - 4.1.0 + 4.1.1-SNAPSHOT 4.0.0 diff --git a/systests/cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml b/systests/cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml index da5369d9ff8..c541b183918 100644 --- a/systests/cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml +++ b/systests/cdi/cdi-owb/cdi-multiple-apps-owb/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-cdi-owb - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml b/systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml index e3e2e8b0a50..17f934dd333 100644 --- a/systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml +++ b/systests/cdi/cdi-owb/cdi-no-apps-owb/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-cdi-owb - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/cdi/cdi-owb/cdi-producers-owb/pom.xml b/systests/cdi/cdi-owb/cdi-producers-owb/pom.xml index 1a8a3b2252b..f5cae15a7bc 100644 --- a/systests/cdi/cdi-owb/cdi-producers-owb/pom.xml +++ b/systests/cdi/cdi-owb/cdi-producers-owb/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-cdi-owb - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/cdi/cdi-owb/pom.xml b/systests/cdi/cdi-owb/pom.xml index 7a02f53c161..3c2eab42b5b 100644 --- a/systests/cdi/cdi-owb/pom.xml +++ b/systests/cdi/cdi-owb/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-cdi - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/cdi/cdi-weld/cdi-multiple-apps-weld/pom.xml b/systests/cdi/cdi-weld/cdi-multiple-apps-weld/pom.xml index 08965edbcf6..63e44e28b38 100644 --- a/systests/cdi/cdi-weld/cdi-multiple-apps-weld/pom.xml +++ b/systests/cdi/cdi-weld/cdi-multiple-apps-weld/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-cdi-weld - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/cdi/cdi-weld/cdi-no-apps-weld/pom.xml b/systests/cdi/cdi-weld/cdi-no-apps-weld/pom.xml index 4a1ac1c5b32..e25cd4c5a91 100644 --- a/systests/cdi/cdi-weld/cdi-no-apps-weld/pom.xml +++ b/systests/cdi/cdi-weld/cdi-no-apps-weld/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-cdi-weld - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/cdi/cdi-weld/cdi-producers-weld/pom.xml b/systests/cdi/cdi-weld/cdi-producers-weld/pom.xml index 385b778408c..6f412c2590e 100644 --- a/systests/cdi/cdi-weld/cdi-producers-weld/pom.xml +++ b/systests/cdi/cdi-weld/cdi-producers-weld/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-cdi-weld - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/cdi/cdi-weld/pom.xml b/systests/cdi/cdi-weld/pom.xml index 11af7db9594..ab169b10fc9 100644 --- a/systests/cdi/cdi-weld/pom.xml +++ b/systests/cdi/cdi-weld/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-cdi - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/cdi/pom.xml b/systests/cdi/pom.xml index 7499bb48647..96740ef12aa 100644 --- a/systests/cdi/pom.xml +++ b/systests/cdi/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/container-integration/grizzly/pom.xml b/systests/container-integration/grizzly/pom.xml index b002fdfb679..7a9dd03893c 100644 --- a/systests/container-integration/grizzly/pom.xml +++ b/systests/container-integration/grizzly/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-container-integration - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml cxf-systests-ci-grizzly diff --git a/systests/container-integration/pom.xml b/systests/container-integration/pom.xml index 8397a23b7e8..34f6e5ea7b1 100644 --- a/systests/container-integration/pom.xml +++ b/systests/container-integration/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/container-integration/webapp/pom.xml b/systests/container-integration/webapp/pom.xml index 2e008813529..b10296bf4ad 100644 --- a/systests/container-integration/webapp/pom.xml +++ b/systests/container-integration/webapp/pom.xml @@ -22,7 +22,7 @@ org.apache.cxf.systests cxf-systests-container-integration - 4.1.0 + 4.1.1-SNAPSHOT ../pom.xml cxf-systests-ci-webapp diff --git a/systests/databinding/pom.xml b/systests/databinding/pom.xml index 8194ba85724..db5413ea888 100644 --- a/systests/databinding/pom.xml +++ b/systests/databinding/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/forked/pom.xml b/systests/forked/pom.xml index 667534557dd..bd569ce65ad 100644 --- a/systests/forked/pom.xml +++ b/systests/forked/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/jaxrs/pom.xml b/systests/jaxrs/pom.xml index 282c39d0601..c41b1435b03 100644 --- a/systests/jaxrs/pom.xml +++ b/systests/jaxrs/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/jaxws/pom.xml b/systests/jaxws/pom.xml index 9fb7b82d9d8..f961035e7ca 100644 --- a/systests/jaxws/pom.xml +++ b/systests/jaxws/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/kerberos/pom.xml b/systests/kerberos/pom.xml index eb38eabb4fb..7fa4246de53 100644 --- a/systests/kerberos/pom.xml +++ b/systests/kerberos/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/ldap/pom.xml b/systests/ldap/pom.xml index 4d4578025e4..ac663bbf241 100644 --- a/systests/ldap/pom.xml +++ b/systests/ldap/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/microprofile/client/async/pom.xml b/systests/microprofile/client/async/pom.xml index 9520d029ba4..97a7248dd0f 100644 --- a/systests/microprofile/client/async/pom.xml +++ b/systests/microprofile/client/async/pom.xml @@ -21,7 +21,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0 + 4.1.1-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/systests/microprofile/client/jaxrs/pom.xml b/systests/microprofile/client/jaxrs/pom.xml index 7d7e19bdd0b..d6927f0bb58 100644 --- a/systests/microprofile/client/jaxrs/pom.xml +++ b/systests/microprofile/client/jaxrs/pom.xml @@ -21,7 +21,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0 + 4.1.1-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/systests/microprofile/client/nocdi/pom.xml b/systests/microprofile/client/nocdi/pom.xml index 1a75d8ca6d3..597adf8695b 100644 --- a/systests/microprofile/client/nocdi/pom.xml +++ b/systests/microprofile/client/nocdi/pom.xml @@ -21,7 +21,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0 + 4.1.1-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/systests/microprofile/client/tracing/pom.xml b/systests/microprofile/client/tracing/pom.xml index c1ca62bc7c2..6bff9a6e848 100644 --- a/systests/microprofile/client/tracing/pom.xml +++ b/systests/microprofile/client/tracing/pom.xml @@ -21,7 +21,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0 + 4.1.1-SNAPSHOT ../../pom.xml 4.0.0 diff --git a/systests/microprofile/client/weld/pom.xml b/systests/microprofile/client/weld/pom.xml index 69e0bb98e10..6f5e6abb49f 100644 --- a/systests/microprofile/client/weld/pom.xml +++ b/systests/microprofile/client/weld/pom.xml @@ -22,7 +22,7 @@ cxf-microprofile-tck org.apache.cxf.systests - 4.1.0 + 4.1.1-SNAPSHOT ../../pom.xml diff --git a/systests/microprofile/pom.xml b/systests/microprofile/pom.xml index 42c6fa28a00..cf63132d41a 100644 --- a/systests/microprofile/pom.xml +++ b/systests/microprofile/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/pom.xml b/systests/pom.xml index 1a47f7f08a0..910c4e64fca 100644 --- a/systests/pom.xml +++ b/systests/pom.xml @@ -28,7 +28,7 @@ org.apache.cxf cxf - 4.1.0 + 4.1.1-SNAPSHOT container-integration diff --git a/systests/rs-http-sci/pom.xml b/systests/rs-http-sci/pom.xml index cbd8b6a8815..5c930be9fe6 100644 --- a/systests/rs-http-sci/pom.xml +++ b/systests/rs-http-sci/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/rs-security/pom.xml b/systests/rs-security/pom.xml index efdc807542a..5f7a57aaeca 100644 --- a/systests/rs-security/pom.xml +++ b/systests/rs-security/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/rs-sse/pom.xml b/systests/rs-sse/pom.xml index 384115e9498..fdf4ff87d47 100644 --- a/systests/rs-sse/pom.xml +++ b/systests/rs-sse/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/rs-sse/rs-sse-base/pom.xml b/systests/rs-sse/rs-sse-base/pom.xml index 69f1ee201ec..901f6eeb89c 100644 --- a/systests/rs-sse/rs-sse-base/pom.xml +++ b/systests/rs-sse/rs-sse-base/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-rs-sse - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/rs-sse/rs-sse-jetty/pom.xml b/systests/rs-sse/rs-sse-jetty/pom.xml index c582f1bb123..d0abc4fc316 100644 --- a/systests/rs-sse/rs-sse-jetty/pom.xml +++ b/systests/rs-sse/rs-sse-jetty/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-rs-sse - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/rs-sse/rs-sse-tomcat/pom.xml b/systests/rs-sse/rs-sse-tomcat/pom.xml index 694515521bc..eaeabe6252d 100644 --- a/systests/rs-sse/rs-sse-tomcat/pom.xml +++ b/systests/rs-sse/rs-sse-tomcat/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-rs-sse - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/rs-sse/rs-sse-undertow/pom.xml b/systests/rs-sse/rs-sse-undertow/pom.xml index efbdd00c86b..d8111274b72 100644 --- a/systests/rs-sse/rs-sse-undertow/pom.xml +++ b/systests/rs-sse/rs-sse-undertow/pom.xml @@ -21,7 +21,7 @@ org.apache.cxf.systests cxf-systests-rs-sse - 4.1.0 + 4.1.1-SNAPSHOT ../ 4.0.0 diff --git a/systests/spring-boot/pom.xml b/systests/spring-boot/pom.xml index 230862ffe83..9efd5ffea42 100644 --- a/systests/spring-boot/pom.xml +++ b/systests/spring-boot/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/tracing/pom.xml b/systests/tracing/pom.xml index 6ff5a991675..7eb267079a2 100644 --- a/systests/tracing/pom.xml +++ b/systests/tracing/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/transport-hc5/pom.xml b/systests/transport-hc5/pom.xml index ee58425b04c..065ffea4577 100644 --- a/systests/transport-hc5/pom.xml +++ b/systests/transport-hc5/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/transport-jms/pom.xml b/systests/transport-jms/pom.xml index 35c0500214d..49e76f1da8d 100644 --- a/systests/transport-jms/pom.xml +++ b/systests/transport-jms/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/transport-netty/pom.xml b/systests/transport-netty/pom.xml index cda472900da..10e81ff2e09 100644 --- a/systests/transport-netty/pom.xml +++ b/systests/transport-netty/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/transport-undertow/pom.xml b/systests/transport-undertow/pom.xml index dfb17a3cb1c..4e681b1ffb4 100644 --- a/systests/transport-undertow/pom.xml +++ b/systests/transport-undertow/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/transports/pom.xml b/systests/transports/pom.xml index e7d3417d263..998d3d53ebb 100644 --- a/systests/transports/pom.xml +++ b/systests/transports/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/uncategorized/pom.xml b/systests/uncategorized/pom.xml index c94f738daef..5d22dbeff52 100644 --- a/systests/uncategorized/pom.xml +++ b/systests/uncategorized/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-rm/pom.xml b/systests/ws-rm/pom.xml index c4fc2673b5a..56139bbefd6 100644 --- a/systests/ws-rm/pom.xml +++ b/systests/ws-rm/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-security-examples/pom.xml b/systests/ws-security-examples/pom.xml index dad4fb166d0..b95e50410fb 100644 --- a/systests/ws-security-examples/pom.xml +++ b/systests/ws-security-examples/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-security/pom.xml b/systests/ws-security/pom.xml index f31422931a0..1e8acafdf5c 100644 --- a/systests/ws-security/pom.xml +++ b/systests/ws-security/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-specs/pom.xml b/systests/ws-specs/pom.xml index 7f42daeea93..4440cb14136 100644 --- a/systests/ws-specs/pom.xml +++ b/systests/ws-specs/pom.xml @@ -21,7 +21,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml 4.0.0 diff --git a/systests/ws-transfer/pom.xml b/systests/ws-transfer/pom.xml index a2b24157ea6..eff42177acc 100644 --- a/systests/ws-transfer/pom.xml +++ b/systests/ws-transfer/pom.xml @@ -28,7 +28,7 @@ cxf-parent org.apache.cxf - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/systests/wsdl_maven/codegen/pom.xml b/systests/wsdl_maven/codegen/pom.xml index 81201b226c8..eeee3e168cc 100644 --- a/systests/wsdl_maven/codegen/pom.xml +++ b/systests/wsdl_maven/codegen/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/systests/wsdl_maven/java2ws/pom.xml b/systests/wsdl_maven/java2ws/pom.xml index f5db07a3e38..36425805147 100644 --- a/systests/wsdl_maven/java2ws/pom.xml +++ b/systests/wsdl_maven/java2ws/pom.xml @@ -26,7 +26,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/systests/wsdl_maven/pom.xml b/systests/wsdl_maven/pom.xml index 06ea0a41cfc..1c5686024ef 100644 --- a/systests/wsdl_maven/pom.xml +++ b/systests/wsdl_maven/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf.systests cxf-systests - 4.1.0 + 4.1.1-SNAPSHOT java2ws diff --git a/testutils/pom.xml b/testutils/pom.xml index 52a385acfc7..e845801fadd 100644 --- a/testutils/pom.xml +++ b/testutils/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../parent/pom.xml diff --git a/tools/common/pom.xml b/tools/common/pom.xml index 39f6d60d653..9671b40b56c 100644 --- a/tools/common/pom.xml +++ b/tools/common/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/tools/corba/pom.xml b/tools/corba/pom.xml index 602f777b31c..9cfceb360bd 100644 --- a/tools/corba/pom.xml +++ b/tools/corba/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/tools/javato/pom.xml b/tools/javato/pom.xml index a7fce0b97ba..038ab5c5af2 100644 --- a/tools/javato/pom.xml +++ b/tools/javato/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-tools - 4.1.0 + 4.1.1-SNAPSHOT ws diff --git a/tools/javato/ws/pom.xml b/tools/javato/ws/pom.xml index b4ffe17de09..60c266e2912 100644 --- a/tools/javato/ws/pom.xml +++ b/tools/javato/ws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/tools/pom.xml b/tools/pom.xml index d2e35ac9780..66d382d5480 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf - 4.1.0 + 4.1.1-SNAPSHOT common diff --git a/tools/validator/pom.xml b/tools/validator/pom.xml index 226d6cdae5d..e15fdf6abe9 100644 --- a/tools/validator/pom.xml +++ b/tools/validator/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../parent/pom.xml diff --git a/tools/wadlto/jaxrs/pom.xml b/tools/wadlto/jaxrs/pom.xml index 97abae9a0d5..bf25df494ee 100644 --- a/tools/wadlto/jaxrs/pom.xml +++ b/tools/wadlto/jaxrs/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/tools/wadlto/pom.xml b/tools/wadlto/pom.xml index 4f8ade35c0a..6f2de89dcc6 100644 --- a/tools/wadlto/pom.xml +++ b/tools/wadlto/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-tools - 4.1.0 + 4.1.1-SNAPSHOT jaxrs diff --git a/tools/wsdlto/core/pom.xml b/tools/wsdlto/core/pom.xml index 61868466319..cb42e2ce222 100644 --- a/tools/wsdlto/core/pom.xml +++ b/tools/wsdlto/core/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/tools/wsdlto/databinding/jaxb/pom.xml b/tools/wsdlto/databinding/jaxb/pom.xml index 58e89e0b362..27625fcc80f 100644 --- a/tools/wsdlto/databinding/jaxb/pom.xml +++ b/tools/wsdlto/databinding/jaxb/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/tools/wsdlto/frontend/javascript/pom.xml b/tools/wsdlto/frontend/javascript/pom.xml index b71a9341717..46466751958 100644 --- a/tools/wsdlto/frontend/javascript/pom.xml +++ b/tools/wsdlto/frontend/javascript/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/tools/wsdlto/frontend/jaxws/pom.xml b/tools/wsdlto/frontend/jaxws/pom.xml index cf2e75c3fc6..edb25eef6b1 100644 --- a/tools/wsdlto/frontend/jaxws/pom.xml +++ b/tools/wsdlto/frontend/jaxws/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../../parent/pom.xml diff --git a/tools/wsdlto/misc/pom.xml b/tools/wsdlto/misc/pom.xml index 1d74a16ae06..955e7fcafe3 100644 --- a/tools/wsdlto/misc/pom.xml +++ b/tools/wsdlto/misc/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml diff --git a/tools/wsdlto/pom.xml b/tools/wsdlto/pom.xml index 7570280a9e5..19ad54ab314 100644 --- a/tools/wsdlto/pom.xml +++ b/tools/wsdlto/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-tools - 4.1.0 + 4.1.1-SNAPSHOT core diff --git a/tools/wsdlto/test/pom.xml b/tools/wsdlto/test/pom.xml index 9fd9ef86517..ca73d2ec64f 100644 --- a/tools/wsdlto/test/pom.xml +++ b/tools/wsdlto/test/pom.xml @@ -27,7 +27,7 @@ org.apache.cxf cxf-parent - 4.1.0 + 4.1.1-SNAPSHOT ../../../parent/pom.xml From a71713898dc4866865df8abe1b76ff6c34e9de6d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Dec 2024 09:27:39 -0500 Subject: [PATCH 293/430] Bump cxf.zipkin-reporter.version from 3.4.2 to 3.4.3 (#2191) Bumps `cxf.zipkin-reporter.version` from 3.4.2 to 3.4.3. Updates `io.zipkin.reporter2:zipkin-reporter-brave` from 3.4.2 to 3.4.3 - [Release notes](https://github.com/openzipkin/zipkin-reporter-java/releases) - [Changelog](https://github.com/openzipkin/zipkin-reporter-java/blob/master/RELEASE.md) - [Commits](https://github.com/openzipkin/zipkin-reporter-java/compare/3.4.2...3.4.3) Updates `io.zipkin.reporter2:zipkin-sender-urlconnection` from 3.4.2 to 3.4.3 - [Release notes](https://github.com/openzipkin/zipkin-reporter-java/releases) - [Changelog](https://github.com/openzipkin/zipkin-reporter-java/blob/master/RELEASE.md) - [Commits](https://github.com/openzipkin/zipkin-reporter-java/compare/3.4.2...3.4.3) --- updated-dependencies: - dependency-name: io.zipkin.reporter2:zipkin-reporter-brave dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.zipkin.reporter2:zipkin-sender-urlconnection dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 1172e2d0c09..8065af41380 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -45,7 +45,7 @@ 5.0.0 1.9.22.1 6.0.3 - 3.4.2 + 3.4.3 2.1 2.31.0 2.3.232 diff --git a/parent/pom.xml b/parent/pom.xml index 9602be3fa05..27f39d7c25e 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -239,7 +239,7 @@ 2.3.1 3.8.16.Final 2.1 - 3.4.2 + 3.4.3 1.0.1 From e3e039cf272879c28bf5baaef8a4d5ee297545a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Dec 2024 08:59:53 -0500 Subject: [PATCH 294/430] Bump cxf.micrometer.version from 1.14.1 to 1.14.2 (#2192) Bumps `cxf.micrometer.version` from 1.14.1 to 1.14.2. Updates `io.micrometer:micrometer-core` from 1.14.1 to 1.14.2 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.14.1...v1.14.2) Updates `io.micrometer:micrometer-observation` from 1.14.1 to 1.14.2 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.14.1...v1.14.2) Updates `io.micrometer:micrometer-test` from 1.14.1 to 1.14.2 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.14.1...v1.14.2) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-observation dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-test dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 27f39d7c25e..8c052ed9985 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -176,7 +176,7 @@ 1.5.12 9.12.0 3.9.8 - 1.14.1 + 1.14.2 1.4.0 3.1 3.0.1 From 3c5e313664f13491b58f78685798b0db84154220 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 12 Dec 2024 08:43:59 -0500 Subject: [PATCH 295/430] Update Project Reactor to 3.7.1 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 8c052ed9985..83bc4b1f375 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -199,7 +199,7 @@ 4.10.0 3.5.1 1.0.4 - 3.7.0 + 3.7.1 1.7.15 1.3.8 2.2.21 From 69a16d6e4982414210d218a92d43e55a3fe078b7 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 12 Dec 2024 08:44:31 -0500 Subject: [PATCH 296/430] Update Spring Framework to 6.2.1 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 83bc4b1f375..826b29fe9e1 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -215,7 +215,7 @@ 3.2.8 spring-test 6.4.1 - 6.2.0 + 6.2.1 1.8.3 5.18.2 2.2.26 From c7e1fbfc2af5da8f36c82ce95e2a6ef011b22dfa Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 12 Dec 2024 08:47:19 -0500 Subject: [PATCH 297/430] Update Micrometer Tracing to 1.4.1 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 826b29fe9e1..043578042c6 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -177,7 +177,7 @@ 9.12.0 3.9.8 1.14.2 - 1.4.0 + 1.4.1 3.1 3.0.1 3.1.2 From 9732c6d9d4b4fb085fbb17256a1b9262f28a5985 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 12 Dec 2024 08:53:53 -0500 Subject: [PATCH 298/430] Update Jetty to 12.0.6 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 8065af41380..876cac87eb7 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -33,7 +33,7 @@ UTF-8 3.4.0 4.2.0 - 12.0.15 + 12.0.16 4.1.115.Final 4.5.14 5.18.2 diff --git a/parent/pom.xml b/parent/pom.xml index 043578042c6..782fb8185ef 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -160,7 +160,7 @@ 1.1.1 1.0 1.5.4 - 12.0.15 + 12.0.16 ${cxf.jetty12.version} 3.3 2.10.10 From 31b735e19813c218fc2115f95030d6c6ad7c4a8d Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 12 Dec 2024 09:03:31 -0500 Subject: [PATCH 299/430] Update Swagger Core to 2.2.27 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 782fb8185ef..604dba1dc9f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -218,7 +218,7 @@ 6.2.1 1.8.3 5.18.2 - 2.2.26 + 2.2.27 3.0.0 10.1.31 1.8 From 5dbbe399aa6d2390ace861becbfe52fffbd8e277 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 12 Dec 2024 11:14:41 -0500 Subject: [PATCH 300/430] Fix cxf-coverage-report version (should be 4.1.1-SNAPSHOT) --- coverage/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coverage/pom.xml b/coverage/pom.xml index dc15a92e3df..09beb4519fd 100644 --- a/coverage/pom.xml +++ b/coverage/pom.xml @@ -20,7 +20,7 @@ org.apache.cxf cxf - 4.1.0-SNAPSHOT + 4.1.1-SNAPSHOT 4.0.0 cxf-coverage-report From 483fe3b17c3d9b83c18fb8540b69ddc6ae88b2b2 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 12 Dec 2024 11:15:43 -0500 Subject: [PATCH 301/430] CXF-9039: Run Jakarta RESTful Web Services 3.1 TCK. Fix SeBootstrap test cases (#2186) --- .../bootstrap/ConfigurationBuilderImpl.java | 16 ++ .../cxf/jaxrs/impl/RuntimeDelegateImpl.java | 44 ++++- .../apache/cxf/jaxrs/impl/UriBuilderImpl.java | 2 +- .../jaxrs/bootstrap/SeBootstrapTest.java | 159 ++++++++++++++++++ tck/Jenkinsfile | 2 +- tck/cxf-tck/pom.xml | 19 ++- 6 files changed, 237 insertions(+), 5 deletions(-) create mode 100644 systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/bootstrap/SeBootstrapTest.java diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/bootstrap/ConfigurationBuilderImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/bootstrap/ConfigurationBuilderImpl.java index 7f890d91477..6ace8ed3dac 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/bootstrap/ConfigurationBuilderImpl.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/bootstrap/ConfigurationBuilderImpl.java @@ -76,4 +76,20 @@ public SeBootstrap.Configuration.Builder from(BiFunction, O return this; } + @Override + public SeBootstrap.Configuration.Builder from(Object externalConfig) { + if (SeBootstrap.Configuration.class.isInstance(externalConfig)) { + final SeBootstrap.Configuration other = (SeBootstrap.Configuration) externalConfig; + from((name, clazz) -> { + final Object property = other.property(name); + if (property != null && clazz.equals(property.getClass())) { + return Optional.of(property); + } else { + return Optional.empty(); + } + }); + } + return this; + } + } diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RuntimeDelegateImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RuntimeDelegateImpl.java index 4bd9bb0e5db..03ceeca44c5 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RuntimeDelegateImpl.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RuntimeDelegateImpl.java @@ -19,8 +19,11 @@ package org.apache.cxf.jaxrs.impl; +import java.io.IOException; +import java.net.ServerSocket; import java.net.URI; import java.security.AccessController; +import java.security.PrivilegedAction; import java.security.PrivilegedExceptionAction; import java.util.Date; import java.util.HashMap; @@ -55,6 +58,8 @@ import org.apache.cxf.jaxrs.utils.ResourceUtils; public class RuntimeDelegateImpl extends RuntimeDelegate { + // The default value is implementation specific, using non-priviledged default port + private static final int DEFAULT_HTTP_PORT = 8080; protected Map, HeaderDelegate> headerProviders = new HashMap<>(); public RuntimeDelegateImpl() { @@ -144,7 +149,30 @@ public Builder createConfigurationBuilder() { @Override public CompletionStage bootstrap(Application application, Configuration configuration) { final JAXRSServerFactoryBean factory = ResourceUtils.createApplication(application, false, false, false, null); - final URI address = configuration.baseUriBuilder().path(factory.getAddress()).build(); + + Configuration.Builder instanceConfigurationBuilder = Configuration.builder().from(configuration); + if (!configuration.hasProperty(Configuration.HOST)) { // The default value is "localhost" + instanceConfigurationBuilder = instanceConfigurationBuilder.host("localhost"); + } + + if (!configuration.hasProperty(Configuration.PROTOCOL)) { // The default value is "HTTP" + instanceConfigurationBuilder = instanceConfigurationBuilder.protocol("HTTP"); + } + + if (!configuration.hasProperty(Configuration.PORT)) { + instanceConfigurationBuilder = instanceConfigurationBuilder.port(DEFAULT_HTTP_PORT); + } else if (configuration.port() == Configuration.FREE_PORT) { + instanceConfigurationBuilder = instanceConfigurationBuilder.port(findFreePort()); /* free port */ + } else if (configuration.port() == Configuration.DEFAULT_PORT) { + instanceConfigurationBuilder = instanceConfigurationBuilder.port(DEFAULT_HTTP_PORT); + } + + if (!configuration.hasProperty(Configuration.ROOT_PATH)) { // The default value is "/" + instanceConfigurationBuilder = instanceConfigurationBuilder.rootPath("/"); + } + + final Configuration instanceConfiguration = instanceConfigurationBuilder.build(); + final URI address = instanceConfiguration.baseUriBuilder().path(factory.getAddress()).build(); factory.setAddress(address.toString()); factory.setStart(true); @@ -174,9 +202,10 @@ public CompletionStage bootstrap(Application application, Configuratio return CompletableFuture .supplyAsync(() -> factory.create()) - .thenApply(s -> new InstanceImpl(s, configuration)); + .thenApply(s -> new InstanceImpl(s, instanceConfiguration)); } + @SuppressWarnings({ "removal", "deprecation" }) @Override public CompletionStage bootstrap(Class clazz, Configuration configuration) { try { @@ -198,4 +227,15 @@ public Application run() throws Exception { public EntityPart.Builder createEntityPartBuilder(String partName) throws IllegalArgumentException { return new EntityPartBuilderImpl(partName); } + + @SuppressWarnings({ "removal", "deprecation" }) + private static int findFreePort() { + return AccessController.doPrivileged((PrivilegedAction) () -> { + try (ServerSocket socket = new ServerSocket(0)) { + return socket.getLocalPort(); + } catch (final IOException e) { + return -1; + } + }); + } } diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java index cf3a316097f..3313247ebe5 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java @@ -613,7 +613,7 @@ public UriBuilder port(int thePort) throws IllegalArgumentException { @Override public UriBuilder scheme(String s) throws IllegalArgumentException { - scheme = s; + scheme = (s != null) ? s.toLowerCase() : s; return this; } diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/bootstrap/SeBootstrapTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/bootstrap/SeBootstrapTest.java new file mode 100644 index 00000000000..9f59c8b014d --- /dev/null +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/bootstrap/SeBootstrapTest.java @@ -0,0 +1,159 @@ +/** + * 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.cxf.systest.jaxrs.bootstrap; + +import java.util.Collections; +import java.util.Set; +import java.util.concurrent.CompletionStage; + +import jakarta.ws.rs.ApplicationPath; +import jakarta.ws.rs.GET; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.SeBootstrap; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.core.Application; +import jakarta.ws.rs.core.UriBuilder; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.Matchers.greaterThan; +import static org.junit.Assert.assertThat; + +/** + * Some tests are taken from {@linkplain https://github.com/jakartaee/rest/blob/tck-3.1.2/jaxrs-tck + * /src/main/java/ee/jakarta/tck/ws/rs/sebootstrap/SeBootstrapIT.java} + */ +public class SeBootstrapTest { + private Client client; + + @Before + public void setUp() { + client = ClientBuilder.newClient(); + } + + @After + public void tearDown() { + client.close(); + } + + /** + * Verifies that an instance will boot using default configuration. + */ + @Test + public final void shouldBootInstanceUsingDefaults() { + final Application application = new StaticApplication(); + final SeBootstrap.Configuration.Builder bootstrapConfigurationBuilder = SeBootstrap.Configuration.builder(); + final SeBootstrap.Configuration requestedConfiguration = bootstrapConfigurationBuilder.build(); + + final CompletionStage completionStage = SeBootstrap.start(application, + requestedConfiguration); + final SeBootstrap.Instance instance = completionStage.toCompletableFuture().join(); + final SeBootstrap.Configuration actualConfiguration = instance.configuration(); + final String actualResponse = client.target(UriBuilder.newInstance().scheme(actualConfiguration.protocol()) + .host(actualConfiguration.host()).port(actualConfiguration.port()).path(actualConfiguration.rootPath()) + .path("application/resource")).request().get(String.class); + + assertThat(actualResponse, is("OK")); + assertThat(actualConfiguration.protocol(), is("HTTP")); + assertThat(actualConfiguration.host(), is("localhost")); + assertThat(actualConfiguration.port(), is(greaterThan(0))); + assertThat(actualConfiguration.rootPath(), is("/")); + + instance.stop().toCompletableFuture().join(); + } + + /** + * Verifies that an instance will boot using a self-detected free IP port. + */ + @Test + public final void shouldBootInstanceUsingSelfDetectedFreeIpPort() { + final Application application = new StaticApplication(); + final SeBootstrap.Configuration.Builder bootstrapConfigurationBuilder = SeBootstrap.Configuration.builder(); + final SeBootstrap.Configuration requestedConfiguration = bootstrapConfigurationBuilder.protocol("HTTP") + .host("localhost").port(SeBootstrap.Configuration.FREE_PORT).rootPath("/root/path").build(); + + final CompletionStage completionStage = SeBootstrap.start(application, + requestedConfiguration); + final SeBootstrap.Instance instance = completionStage.toCompletableFuture().join(); + final SeBootstrap.Configuration actualConfiguration = instance.configuration(); + final String actualResponse = client.target(UriBuilder.newInstance().scheme(actualConfiguration.protocol()) + .host(actualConfiguration.host()).port(actualConfiguration.port()).path(actualConfiguration.rootPath()) + .path("application/resource")).request().get(String.class); + + assertThat(actualResponse, is("OK")); + assertThat(actualConfiguration.protocol(), is(requestedConfiguration.protocol())); + assertThat(actualConfiguration.host(), is(requestedConfiguration.host())); + assertThat(actualConfiguration.port(), is(greaterThan(0))); + assertThat(actualConfiguration.rootPath(), is(requestedConfiguration.rootPath())); + instance.stop().toCompletableFuture().join(); + } + + @Test + public final void shouldBootInstanceUsingImplementationsDefaultIpPort() { + final Application application = new StaticApplication(); + final SeBootstrap.Configuration.Builder bootstrapConfigurationBuilder = SeBootstrap.Configuration.builder(); + final SeBootstrap.Configuration requestedConfiguration = bootstrapConfigurationBuilder.protocol("HTTP") + .host("localhost").port(SeBootstrap.Configuration.DEFAULT_PORT).rootPath("/root/path").build(); + + final CompletionStage completionStage = SeBootstrap.start(application, + requestedConfiguration); + final SeBootstrap.Instance instance = completionStage.toCompletableFuture().join(); + final SeBootstrap.Configuration actualConfiguration = instance.configuration(); + final String actualResponse = client.target(UriBuilder.newInstance().scheme(actualConfiguration.protocol()) + .host(actualConfiguration.host()).port(actualConfiguration.port()).path(actualConfiguration.rootPath()) + .path("application/resource")).request().get(String.class); + + assertThat(actualResponse, is("OK")); + assertThat(actualConfiguration.protocol(), is(requestedConfiguration.protocol())); + assertThat(actualConfiguration.host(), is(requestedConfiguration.host())); + assertThat(actualConfiguration.port(), is(greaterThan(0))); + assertThat(actualConfiguration.rootPath(), is(requestedConfiguration.rootPath())); + instance.stop().toCompletableFuture().join(); + } + + @ApplicationPath("application") + public static final class StaticApplication extends Application { + private final StaticResource staticResource; + + private StaticApplication() { + this.staticResource = new StaticResource(); + } + + @Override + public Set getSingletons() { + return Collections.singleton(staticResource); + } + + @Path("resource") + public static final class StaticResource { + private StaticResource() { + } + + @GET + public String staticResponse() { + return "OK"; + } + } + }; +} diff --git a/tck/Jenkinsfile b/tck/Jenkinsfile index 9d1e63ffd51..8d4d41f44f4 100644 --- a/tck/Jenkinsfile +++ b/tck/Jenkinsfile @@ -37,7 +37,7 @@ pipeline { stage('Download JakartaEE Restful Services TCK') { steps { checkout([$class: 'GitSCM', - branches: [[name: 'refs/tags/3.1.0']], + branches: [[name: 'refs/tags/tck-3.1.2']], userRemoteConfigs: [[url: 'https://github.com/jakartaee/rest/']], extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'rest']] ]) diff --git a/tck/cxf-tck/pom.xml b/tck/cxf-tck/pom.xml index 80abc201c8b..472e7edd9ec 100644 --- a/tck/cxf-tck/pom.xml +++ b/tck/cxf-tck/pom.xml @@ -35,7 +35,7 @@ 11 11 - 4.1.0-SNAPSHOT + 4.1.1-SNAPSHOT 7.0.16 ${project.build.directory}/glassfish7 10.0.0 @@ -155,6 +155,12 @@ test + + org.apache.cxf + cxf-rt-transports-http-jetty + test + + org.apache.cxf cxf-rt-frontend-jaxrs @@ -582,5 +588,16 @@ jitpack.io https://jitpack.io + + apache-snapshots + Apache SNAPSHOT Repository + https://repository.apache.org/content/groups/snapshots-group/ + + true + + + false + + From f4808817f5997d3a3ef03160f2c4c62b95ddbd72 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Thu, 12 Dec 2024 15:53:11 -0500 Subject: [PATCH 302/430] [CXF-9090]samples: use cargo-maven2-plugin instead of tomcat-maven-plugin to launch tomcat --- .../samples/java_first_jaxws/README.txt | 8 +- .../release/samples/java_first_jaxws/pom.xml | 12 +-- .../samples/jax_rs/websocket_web/README.txt | 6 +- .../samples/jax_rs/websocket_web/pom.xml | 85 +++++++------------ .../release/samples/wsdl_first/README.txt | 6 +- .../main/release/samples/wsdl_first/pom.xml | 37 ++++++-- 6 files changed, 70 insertions(+), 84 deletions(-) diff --git a/distribution/src/main/release/samples/java_first_jaxws/README.txt b/distribution/src/main/release/samples/java_first_jaxws/README.txt index c90ca4c45c0..7d1841bf9d8 100644 --- a/distribution/src/main/release/samples/java_first_jaxws/README.txt +++ b/distribution/src/main/release/samples/java_first_jaxws/README.txt @@ -25,13 +25,9 @@ Alternative: WAR deployment of service to Tomcat (either embedded or standalone) value, for running this sample on your local machine most likely: "http://localhost:8080/java_first_jaxws/services/hello_world". -2.) Standalone Tomcat: Manually copy the generated WAR file to the Tomcat webapps folder, -or, if you have Maven and Tomcat set up to use the Tomcat Maven Plugin -(http://tomcat.apache.org/maven-plugin-2.2/tomcat7-maven-plugin/index.html) you can -use the mvn tomcat7:redeploy command instead. +2.) Standalone Tomcat: Manually copy the generated WAR file to the Tomcat webapps folder -For embedded Tomcat 7: Just run mvn tomcat7:run-war from the project base folder. -For embedded Tomcat 8: Just run mvn cargo:run from the project base folder. +For embedded Tomcat: Just run mvn cargo:run from the project base folder. Prior to running the client (mvn -Pclient) it would be good to confirm the generated WSDL can be seen from a web browser at: diff --git a/distribution/src/main/release/samples/java_first_jaxws/pom.xml b/distribution/src/main/release/samples/java_first_jaxws/pom.xml index afb96ba605d..5a631a19460 100644 --- a/distribution/src/main/release/samples/java_first_jaxws/pom.xml +++ b/distribution/src/main/release/samples/java_first_jaxws/pom.xml @@ -37,23 +37,13 @@ src/main/webapp/WEB-INF/web.xml - - org.apache.tomcat.maven - tomcat7-maven-plugin - 2.2 - - myTomcat - http://localhost:8080/manager/text - /${project.build.finalName} - - org.codehaus.cargo cargo-maven2-plugin 1.8.5 - tomcat8x + tomcat org.apache.tomcat tomcat diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/README.txt b/distribution/src/main/release/samples/jax_rs/websocket_web/README.txt index 7d41f61f4c4..fe584ed09e3 100644 --- a/distribution/src/main/release/samples/jax_rs/websocket_web/README.txt +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/README.txt @@ -16,13 +16,13 @@ Using either UNIX or Windows: This will produce a war file in the target folder. -To run the war file using jetty9 +To run the war file using jetty mvn jetty:run-war (from one command line window) -To run the war file using tomcat7 +To run the war file using tomcat - mvn tomcat7:run-war (from one command line window) + mvn cargo:run (from one command line window) To remove the target dir, run mvn clean". diff --git a/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml index db362ed87d2..ebcfb83f122 100644 --- a/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/websocket_web/pom.xml @@ -50,62 +50,39 @@ - org.apache.tomcat.maven - tomcat7-maven-plugin - 2.2 + org.codehaus.cargo + cargo-maven2-plugin + 1.8.5 - ${project.build.directory}/${project.artifactId} - 9000 - / + + tomcat + + org.apache.tomcat + tomcat + ${cxf.tomcat.version} + + + + standalone + + ${project.build.directory}/apache-tomcat-${cxf.tomcat.version} + + + 8080 + high + + + + + ${project.groupId} + ${project.artifactId} + war + + /${project.build.finalName} + + + - - - run-tomcat - - true - - - run - - - - - - org.apache.tomcat.embed - tomcat-embed-core - ${cxf.tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-logging-juli - ${cxf.tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-jasper - ${cxf.tomcat.version} - - - org.apache.tomcat - tomcat-jasper - ${cxf.tomcat.version} - - - org.apache.tomcat - tomcat-jasper-el - ${cxf.tomcat.version} - - - org.apache.tomcat - tomcat-jsp-api - ${cxf.tomcat.version} - - - org.apache.tomcat.embed - tomcat-embed-websocket - ${cxf.tomcat.version} - - org.apache.maven.plugins diff --git a/distribution/src/main/release/samples/wsdl_first/README.txt b/distribution/src/main/release/samples/wsdl_first/README.txt index af5fca2f196..030a0256dab 100644 --- a/distribution/src/main/release/samples/wsdl_first/README.txt +++ b/distribution/src/main/release/samples/wsdl_first/README.txt @@ -99,11 +99,9 @@ switching the soap:address value to the servlet-specific one (presently commented-out). 2.) For standalone Tomcat: You can manually copy the generated WAR file to the Tomcat -webapps folder, or, if you have Maven and Tomcat set up to use the Tomcat Maven Plugin -(http://tomcat.apache.org/maven-plugin-2.1/tomcat7-maven-plugin/index.html) -you can use the mvn tomcat7:redeploy command instead. +webapps folder. -For embedded Tomcat: Just run mvn tomcat7:run-war from the project base folder. +For embedded Tomcat: Just run mvn cargo:run from the project base folder. 3.) Next activate the client via mvn -Pclient as explained in the previous section. diff --git a/distribution/src/main/release/samples/wsdl_first/pom.xml b/distribution/src/main/release/samples/wsdl_first/pom.xml index b5a373c770f..34e3b8fc728 100644 --- a/distribution/src/main/release/samples/wsdl_first/pom.xml +++ b/distribution/src/main/release/samples/wsdl_first/pom.xml @@ -49,13 +49,38 @@ - org.apache.tomcat.maven - tomcat7-maven-plugin - 2.2 + org.codehaus.cargo + cargo-maven2-plugin + 1.8.5 - myTomcat - http://localhost:8080/manager/text - /${project.build.finalName} + + tomcat + + org.apache.tomcat + tomcat + ${cxf.tomcat.version} + + + + standalone + + ${project.build.directory}/apache-tomcat-${cxf.tomcat.version} + + + 8080 + high + + + + + ${project.groupId} + ${project.artifactId} + war + + /${project.build.finalName} + + + From 2d9434b4d1cf8579d6c5d57afef307b8ea1b9393 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 13 Dec 2024 08:13:05 -0500 Subject: [PATCH 303/430] Update Spring LDAP to 3.2.10 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 604dba1dc9f..7383934f7fa 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -212,7 +212,7 @@ 2.3 2.3_2 3.4.0 - 3.2.8 + 3.2.10 spring-test 6.4.1 6.2.1 From 6bbf85ec306b38097780ca22c0287996fce7a1b1 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 13 Dec 2024 09:13:33 -0500 Subject: [PATCH 304/430] Update Apache Lucene to 9.12.1 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 876cac87eb7..6326ef07ba6 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -41,7 +41,7 @@ 10.1.31 4.0.3.Final 2.11.0 - 9.12.0 + 9.12.1 5.0.0 1.9.22.1 6.0.3 diff --git a/parent/pom.xml b/parent/pom.xml index 7383934f7fa..a3f1f780da2 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -174,7 +174,7 @@ 7.0.2 1.1.2 1.5.12 - 9.12.0 + 9.12.1 3.9.8 1.14.2 1.4.1 From ca85828bbb5929eb447dfd5aa7814eeba05ebf23 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Dec 2024 10:44:05 -0500 Subject: [PATCH 305/430] Bump org.jboss.ws.cxf:jbossws-cxf-client from 7.3.0.Final to 7.3.1.Final (#2194) Bumps org.jboss.ws.cxf:jbossws-cxf-client from 7.3.0.Final to 7.3.1.Final. --- updated-dependencies: - dependency-name: org.jboss.ws.cxf:jbossws-cxf-client dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/ws_transaction/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/ws_transaction/pom.xml b/distribution/src/main/release/samples/ws_transaction/pom.xml index 6405d986439..9db29b39c09 100644 --- a/distribution/src/main/release/samples/ws_transaction/pom.xml +++ b/distribution/src/main/release/samples/ws_transaction/pom.xml @@ -80,7 +80,7 @@ org.jboss.ws.cxf jbossws-cxf-client - 7.3.0.Final + 7.3.1.Final org.apache.cxf From da3f484d06fa874456d34edd3a01e4fd0454ec3e Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 15 Dec 2024 17:31:59 -0500 Subject: [PATCH 306/430] Update Hibernate Validator to 8.0.2.Final --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index a3f1f780da2..52a26344f1e 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -121,7 +121,7 @@ 3.0 5.5.0 6.6.3.Final - 8.0.1.Final + 8.0.2.Final 2.7.4 [4.0,4.2) 4.1.5 From 31ab8605d48b3ec3d3c66939b9776e1710e16a2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 07:55:39 -0500 Subject: [PATCH 307/430] Bump com.puppycrawl.tools:checkstyle from 10.20.2 to 10.21.0 (#2198) Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.20.2 to 10.21.0. - [Release notes](https://github.com/checkstyle/checkstyle/releases) - [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.20.2...checkstyle-10.21.0) --- updated-dependencies: - dependency-name: com.puppycrawl.tools:checkstyle dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 52a26344f1e..bfb47a13601 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -393,7 +393,7 @@ com.puppycrawl.tools checkstyle - 10.20.2 + 10.21.0 From 044751c86e887257d8fb748fc507dc958a56bf2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 16 Dec 2024 07:55:50 -0500 Subject: [PATCH 308/430] Bump github/codeql-action from 3.27.6 to 3.27.9 (#2197) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.6 to 3.27.9. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/aa578102511db1f4524ed59b8cc2bae4f6e88195...df409f7d9260372bd5f19e5b04e83cb3c43714ae) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 3b94be8645e..61dcb7056fc 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@aa578102511db1f4524ed59b8cc2bae4f6e88195 # v3.27.6 + uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 37ab61b27b6..157c0214281 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@aa578102511db1f4524ed59b8cc2bae4f6e88195 #tag=v2 + uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae #tag=v2 with: sarif_file: results.sarif From b17b46ef9da25835d9314d3dfc22338a8b70a74f Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 16 Dec 2024 18:03:39 -0500 Subject: [PATCH 309/430] Update Spring Security to 6.4.2 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index bfb47a13601..4d358e596ed 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -214,7 +214,7 @@ 3.4.0 3.2.10 spring-test - 6.4.1 + 6.4.2 6.2.1 1.8.3 5.18.2 From cc2c51c31d9db6715919e7a1a8cc57f7e57cbf5f Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 16 Dec 2024 18:04:22 -0500 Subject: [PATCH 310/430] Update JUnit 5 to 5.11.4 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 4d358e596ed..8c3295436de 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -169,7 +169,7 @@ 3.0.1 1.0 4.13.2 - 5.11.3 + 5.11.4 2.0.3 7.0.2 1.1.2 From 5ec32095555af7dab49a0166526f59eb63459084 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 16 Dec 2024 18:14:59 -0500 Subject: [PATCH 311/430] Update Apache Tomcat to 10.1.34 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 6326ef07ba6..43295522d9d 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -38,7 +38,7 @@ 4.5.14 5.18.2 3.0.0 - 10.1.31 + 10.1.34 4.0.3.Final 2.11.0 9.12.1 diff --git a/parent/pom.xml b/parent/pom.xml index 8c3295436de..5588ec36cc9 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -220,7 +220,7 @@ 5.18.2 2.2.27 3.0.0 - 10.1.31 + 10.1.34 1.8 2.3.18.Final 3.0.4 From cab5419123d53e6e45577ee1a857200cb5c4f239 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 17 Dec 2024 10:00:57 -0500 Subject: [PATCH 312/430] Update Weld to 5.1.2.Final in the distribution samples --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 43295522d9d..e682cf64e7a 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -39,7 +39,7 @@ 5.18.2 3.0.0 10.1.34 - 4.0.3.Final + 5.1.2.Final 2.11.0 9.12.1 5.0.0 From ab1aa2edebdc0758537cfad5ecb08d49e6c82d15 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 17 Dec 2024 16:45:58 -0500 Subject: [PATCH 313/430] Update Netty to 4.1.116.Final --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index e682cf64e7a..4f80df8226e 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -34,7 +34,7 @@ 3.4.0 4.2.0 12.0.16 - 4.1.115.Final + 4.1.116.Final 4.5.14 5.18.2 3.0.0 diff --git a/parent/pom.xml b/parent/pom.xml index 5588ec36cc9..18f569dc3f6 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -186,7 +186,7 @@ 2022.7 3.2.1 [4,5) - 4.1.115.Final + 4.1.116.Final 2.0.69.Final 2.0.12 3.2.2 From 91e7e29f257808b643b7fa3944dec226e7fe200d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 19 Dec 2024 08:06:06 -0500 Subject: [PATCH 314/430] Bump cxf.opentelemetry.semconv.version from 1.28.0-alpha to 1.29.0-alpha (#2200) Bumps `cxf.opentelemetry.semconv.version` from 1.28.0-alpha to 1.29.0-alpha. Updates `io.opentelemetry.semconv:opentelemetry-semconv` from 1.28.0-alpha to 1.29.0-alpha - [Release notes](https://github.com/open-telemetry/semantic-conventions-java/releases) - [Changelog](https://github.com/open-telemetry/semantic-conventions-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/semantic-conventions-java/commits) Updates `io.opentelemetry.semconv:opentelemetry-semconv-incubating` from 1.28.0-alpha to 1.29.0-alpha - [Release notes](https://github.com/open-telemetry/semantic-conventions-java/releases) - [Changelog](https://github.com/open-telemetry/semantic-conventions-java/blob/main/CHANGELOG.md) - [Commits](https://github.com/open-telemetry/semantic-conventions-java/commits) --- updated-dependencies: - dependency-name: io.opentelemetry.semconv:opentelemetry-semconv dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: io.opentelemetry.semconv:opentelemetry-semconv-incubating dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 18f569dc3f6..2c7cfbfbd89 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -191,7 +191,7 @@ 2.0.12 3.2.2 1.45.0 - 1.28.0-alpha + 1.29.0-alpha 0.33.0 2.0.27 1.1.7 From f6b36af889fe92371ac6a7f6ac8dde22cacf51d6 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 19 Dec 2024 11:33:49 -0500 Subject: [PATCH 315/430] Update Spring Boot to 3.4.1 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 4f80df8226e..3b0ba97d2b2 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -31,7 +31,7 @@ true UTF-8 - 3.4.0 + 3.4.1 4.2.0 12.0.16 4.1.116.Final diff --git a/parent/pom.xml b/parent/pom.xml index 2c7cfbfbd89..abf4f0d6cb7 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -211,7 +211,7 @@ 2.0.16 2.3 2.3_2 - 3.4.0 + 3.4.1 3.2.10 spring-test 6.4.2 From e272c5e9452eddfbbfe3c7b11140f83308a59697 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Fri, 20 Dec 2024 10:18:39 -0500 Subject: [PATCH 316/430] [CXF-9092]remove unnecessary jakarta.jws-api dependency --- distribution/manifest/pom.xml | 5 ----- distribution/pom.xml | 4 ---- .../src/it/jaxb-xjc-runtime-sources/pom.xml | 5 ----- .../src/it/jdk-cxf-with-toolchain/pom.xml | 5 ----- .../codegen-plugin/src/it/mark-generated/pom.xml | 5 ----- .../src/it/wsdl-artifact-resolution/pom.xml | 5 ----- parent/pom.xml | 6 ------ rt/bindings/soap/pom.xml | 4 ---- services/sts/systests/advanced/pom.xml | 4 ---- services/sts/systests/basic/pom.xml | 4 ---- services/wsn/wsn-core/pom.xml | 4 ---- services/xkms/xkms-common/pom.xml | 4 ---- testutils/pom.xml | 6 ------ tools/common/pom.xml | 14 ++++---------- 14 files changed, 4 insertions(+), 71 deletions(-) diff --git a/distribution/manifest/pom.xml b/distribution/manifest/pom.xml index b44ab008476..d58409a8ae8 100644 --- a/distribution/manifest/pom.xml +++ b/distribution/manifest/pom.xml @@ -326,11 +326,6 @@ jakarta.xml.bind jakarta.xml.bind-api - - jakarta.jws - jakarta.jws-api - ${cxf.jakarta.jwsapi.version} - jakarta.xml.soap jakarta.xml.soap-api diff --git a/distribution/pom.xml b/distribution/pom.xml index e6dd301db0d..51f85ef4b17 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -415,10 +415,6 @@ jakarta.xml.bind jakarta.xml.bind-api - - jakarta.jws - jakarta.jws-api - jakarta.xml.soap jakarta.xml.soap-api diff --git a/maven-plugins/codegen-plugin/src/it/jaxb-xjc-runtime-sources/pom.xml b/maven-plugins/codegen-plugin/src/it/jaxb-xjc-runtime-sources/pom.xml index ea57f60abbe..04f8593eea0 100644 --- a/maven-plugins/codegen-plugin/src/it/jaxb-xjc-runtime-sources/pom.xml +++ b/maven-plugins/codegen-plugin/src/it/jaxb-xjc-runtime-sources/pom.xml @@ -92,11 +92,6 @@ jakarta.xml.ws-api 4.0.0 - - jakarta.jws - jakarta.jws-api - 3.0.0 - jakarta.xml.bind jakarta.xml.bind-api diff --git a/maven-plugins/codegen-plugin/src/it/jdk-cxf-with-toolchain/pom.xml b/maven-plugins/codegen-plugin/src/it/jdk-cxf-with-toolchain/pom.xml index f156353cf8f..0d7f8212670 100644 --- a/maven-plugins/codegen-plugin/src/it/jdk-cxf-with-toolchain/pom.xml +++ b/maven-plugins/codegen-plugin/src/it/jdk-cxf-with-toolchain/pom.xml @@ -127,11 +127,6 @@ jakarta.xml.ws-api 4.0.0 - - jakarta.jws - jakarta.jws-api - 3.0.0 - jakarta.xml.bind jakarta.xml.bind-api diff --git a/maven-plugins/codegen-plugin/src/it/mark-generated/pom.xml b/maven-plugins/codegen-plugin/src/it/mark-generated/pom.xml index b115a62caa2..5800611efd4 100644 --- a/maven-plugins/codegen-plugin/src/it/mark-generated/pom.xml +++ b/maven-plugins/codegen-plugin/src/it/mark-generated/pom.xml @@ -90,11 +90,6 @@ jakarta.xml.ws-api 4.0.0 - - jakarta.jws - jakarta.jws-api - 3.0.0 - jakarta.xml.bind jakarta.xml.bind-api diff --git a/maven-plugins/codegen-plugin/src/it/wsdl-artifact-resolution/pom.xml b/maven-plugins/codegen-plugin/src/it/wsdl-artifact-resolution/pom.xml index 7bdc64e0ae3..f3af090016c 100644 --- a/maven-plugins/codegen-plugin/src/it/wsdl-artifact-resolution/pom.xml +++ b/maven-plugins/codegen-plugin/src/it/wsdl-artifact-resolution/pom.xml @@ -92,11 +92,6 @@ jakarta.xml.ws-api 4.0.0 - - jakarta.jws - jakarta.jws-api - 3.0.0 - jakarta.xml.bind jakarta.xml.bind-api diff --git a/parent/pom.xml b/parent/pom.xml index abf4f0d6cb7..db6213fbf4b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -138,7 +138,6 @@ 2.1.3 2.0.1 2.1.0 - 3.0.0 3.0.2 4.0.2 3.1.0 @@ -1663,11 +1662,6 @@ - - jakarta.jws - jakarta.jws-api - ${cxf.jakarta.jwsapi.version} - jakarta.xml.soap jakarta.xml.soap-api diff --git a/rt/bindings/soap/pom.xml b/rt/bindings/soap/pom.xml index f3b370eb5ae..f6b2ca4b70e 100644 --- a/rt/bindings/soap/pom.xml +++ b/rt/bindings/soap/pom.xml @@ -45,10 +45,6 @@ jakarta.xml.soap jakarta.xml.soap-api - - jakarta.jws - jakarta.jws-api - jakarta.xml.ws jakarta.xml.ws-api diff --git a/services/sts/systests/advanced/pom.xml b/services/sts/systests/advanced/pom.xml index a8bd21fcd6d..9240799a4c6 100644 --- a/services/sts/systests/advanced/pom.xml +++ b/services/sts/systests/advanced/pom.xml @@ -40,10 +40,6 @@ jakarta.xml.ws jakarta.xml.ws-api - - jakarta.jws - jakarta.jws-api - junit junit diff --git a/services/sts/systests/basic/pom.xml b/services/sts/systests/basic/pom.xml index ad4d1f003b5..8ecdfdebc9e 100644 --- a/services/sts/systests/basic/pom.xml +++ b/services/sts/systests/basic/pom.xml @@ -40,10 +40,6 @@ jakarta.xml.ws jakarta.xml.ws-api - - jakarta.jws - jakarta.jws-api - junit junit diff --git a/services/wsn/wsn-core/pom.xml b/services/wsn/wsn-core/pom.xml index d7f863a070d..7b79da35323 100644 --- a/services/wsn/wsn-core/pom.xml +++ b/services/wsn/wsn-core/pom.xml @@ -41,10 +41,6 @@ jakarta.jms jakarta.jms-api - - jakarta.jws - jakarta.jws-api - jakarta.xml.ws jakarta.xml.ws-api diff --git a/services/xkms/xkms-common/pom.xml b/services/xkms/xkms-common/pom.xml index 5232da836e0..6e5868eadeb 100644 --- a/services/xkms/xkms-common/pom.xml +++ b/services/xkms/xkms-common/pom.xml @@ -39,10 +39,6 @@ - - jakarta.jws - jakarta.jws-api - jakarta.xml.ws jakarta.xml.ws-api diff --git a/testutils/pom.xml b/testutils/pom.xml index e845801fadd..388c5b0ffe8 100644 --- a/testutils/pom.xml +++ b/testutils/pom.xml @@ -48,12 +48,6 @@ provided true - - jakarta.jws - jakarta.jws-api - provided - true - jakarta.xml.soap jakarta.xml.soap-api diff --git a/tools/common/pom.xml b/tools/common/pom.xml index 9671b40b56c..fb26b5c1507 100644 --- a/tools/common/pom.xml +++ b/tools/common/pom.xml @@ -38,15 +38,14 @@ - - jakarta.jws - jakarta.jws-api - ${cxf.jakarta.jwsapi.version} - org.apache.velocity velocity-engine-core + + jakarta.xml.ws + jakarta.xml.ws-api + wsdl4j wsdl4j @@ -80,11 +79,6 @@ ${project.version} test - - jakarta.xml.ws - jakarta.xml.ws-api - test - org.apache.ws.xmlschema xmlschema-core From baec16565652e02e471889c3a13ba619af1057b7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 20 Dec 2024 12:23:35 -0500 Subject: [PATCH 317/430] Bump cxf.hibernate.em.version from 6.6.3.Final to 6.6.4.Final (#2201) Bumps `cxf.hibernate.em.version` from 6.6.3.Final to 6.6.4.Final. Updates `org.hibernate.orm:hibernate-core` from 6.6.3.Final to 6.6.4.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.4/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.3...6.6.4) Updates `org.hibernate.orm:hibernate-jcache` from 6.6.3.Final to 6.6.4.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.4/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.3...6.6.4) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.hibernate.orm:hibernate-jcache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index db6213fbf4b..bd264ca1557 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -120,7 +120,7 @@ 2.0.1 3.0 5.5.0 - 6.6.3.Final + 6.6.4.Final 8.0.2.Final 2.7.4 [4.0,4.2) From cb4c731e5aa57ea4fd44f19c6fe7febfe273e4aa Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Fri, 20 Dec 2024 14:08:24 -0500 Subject: [PATCH 318/430] [CXF-9092]revise ws-api version range --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index bd264ca1557..b9e5d1e6120 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -75,7 +75,7 @@ [5,6) [3,4) [3,4) - [3,4) + [4,5) [2,3) [4.2,5) [3,4) From 99e8d5c41e6fa2b34309ad0907aae8c8dbeb6dad Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:40:42 -0500 Subject: [PATCH 319/430] Bump actions/setup-java from 4.5.0 to 4.6.0 (#2203) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.5.0 to 4.6.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/8df1039502a15bceb9433410b1a100fbe190c53b...7a6d8a8234af8eb26422e24e3006232cccaa061b) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pull-request-build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 61dcb7056fc..49b0f02e8d9 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup JDK 17 - uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 + uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/pull-request-build.yml b/.github/workflows/pull-request-build.yml index 26d92aa1d06..0776f494e4e 100644 --- a/.github/workflows/pull-request-build.yml +++ b/.github/workflows/pull-request-build.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v3.6.0 - name: Set up JDK 17 - uses: actions/setup-java@8df1039502a15bceb9433410b1a100fbe190c53b # v4.5.0 + uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0 with: java-version: '17' distribution: 'temurin' From cf1b05411d25ef397f2b94059b3f56eb1ddcfd20 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:40:55 -0500 Subject: [PATCH 320/430] Bump ch.qos.logback:logback-classic from 1.5.12 to 1.5.15 (#2206) Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.12 to 1.5.15. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.12...v_1.5.15) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index b9e5d1e6120..06f941a98b0 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -172,7 +172,7 @@ 2.0.3 7.0.2 1.1.2 - 1.5.12 + 1.5.15 9.12.1 3.9.8 1.14.2 From 91602cfe88280e49a0cd45f9628f908d4975a695 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:41:10 -0500 Subject: [PATCH 321/430] Bump github/codeql-action from 3.27.9 to 3.28.0 (#2205) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.27.9 to 3.28.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/df409f7d9260372bd5f19e5b04e83cb3c43714ae...48ab28a6f5dbc2a99bf1e0131198dd8f1df78169) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 49b0f02e8d9..816d478e652 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 + uses: github/codeql-action/init@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@df409f7d9260372bd5f19e5b04e83cb3c43714ae # v3.27.9 + uses: github/codeql-action/analyze@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 157c0214281..3005f8b8341 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@df409f7d9260372bd5f19e5b04e83cb3c43714ae #tag=v2 + uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 #tag=v2 with: sarif_file: results.sarif From 3e2b39165ac6e4fe57c1778116ef8cfe683ce7e7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 23 Dec 2024 10:41:25 -0500 Subject: [PATCH 322/430] Bump actions/upload-artifact from 4.4.3 to 4.5.0 (#2204) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.4.3 to 4.5.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882...6f51ac03b9356f520e9adb1b1b7802705f340c2b) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecards.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 3005f8b8341..c5d9270b197 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -49,7 +49,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@b4b15b8c7c6ac21ea08fcf65892d2ee8f75cf882 # tag=v4.4.3 + uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # tag=v4.5.0 with: name: SARIF file path: results.sarif From 477ee89c020bb21c6d2528646bc34230cb6cb719 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 23 Dec 2024 10:41:55 -0500 Subject: [PATCH 323/430] Add more @Multipart tests (#2152) --- .../cxf/systest/jaxrs/JAXRSMultipartTest.java | 44 +++++ .../cxf/systest/jaxrs/MultipartStore.java | 18 ++ .../JAXRSMultipartValidationTest.java | 168 ++++++++++++++++++ .../MultipartBookStoreWithValidation.java | 53 ++++++ 4 files changed, 283 insertions(+) create mode 100644 systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/validation/JAXRSMultipartValidationTest.java create mode 100644 systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/validation/MultipartBookStoreWithValidation.java diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java index 061f4a129bb..e1a1984908a 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSMultipartTest.java @@ -39,6 +39,7 @@ import jakarta.activation.DataHandler; import jakarta.mail.util.ByteArrayDataSource; +import jakarta.ws.rs.client.Client; import jakarta.ws.rs.client.ClientBuilder; import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.client.WebTarget; @@ -421,6 +422,49 @@ public void testAddBookAsJAXB2() throws Exception { doAddBook(address, "attachmentData", 200); } + @Test + public void testAddBookWithDetailsAsMultipart() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/books/details"; + + final Client client = ClientBuilder.newClient(); + try (InputStream is = getClass() + .getResourceAsStream("/org/apache/cxf/systest/jaxrs/resources/attachmentData")) { + final MultipartBody builder = new MultipartBody(Arrays.asList( + new AttachmentBuilder() + .mediaType("application/xml") + .id("book") + .object(new Book()) + .build(), + new AttachmentBuilder() + .id("upfile1Detail") + .object(is) + .contentDisposition(new ContentDisposition("form-data; name=\"field1\";")) + .build(), + new AttachmentBuilder() + .id("upfile2Detail") + .dataHandler(new DataHandler( + new InputStreamDataSource(new ByteArrayInputStream(new byte[0]), "text/xml"))) + .contentDisposition(new ContentDisposition("form-data; name=\"field2\";")) + .build(), + new AttachmentBuilder() + .id("upfile3Detail") + .dataHandler(new DataHandler(new InputStreamDataSource( + new ByteArrayInputStream(new byte[0]), "text/xml"))) + .contentDisposition(new ContentDisposition("form-data; name=\"field3\";")) + .build())); + + final Response response = client + .target(address) + .request("text/xml") + .post(Entity.entity(builder, "multipart/form-data")); + + final Book book = response.readEntity(Book.class); + assertThat("Unexpected status code for response:" + response, + response.getStatus(), equalTo(200)); + assertThat(book.getName(), equalTo("upfile1Detail,upfile2Detail,upfile3Detail")); + } + } + @Test public void testAddBookAsJAXBBody() throws Exception { String address = "http://localhost:" + PORT + "/bookstore/books/jaxb-body"; diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java index 99965b8370f..01190c6185a 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/MultipartStore.java @@ -405,6 +405,24 @@ public Response addBookParts(@Multipart("rootPart") Book b1, return Response.ok(b1).build(); } + @POST + @Path("/books/details") + @Consumes("multipart/form-data") + @Produces("text/xml") + public Response addBookWithDetails(@Multipart(value = "book", type = "application/xml") Book book, + @Multipart("upfile1Detail") Attachment a1, + @Multipart("upfile2Detail") Attachment a2, + @Multipart("upfile3Detail") Attachment a3) + throws Exception { + + if (a1.equals(a2) || a1.equals(a3) || a2.equals(a3)) { + throw new WebApplicationException(); + } + + book.setName(a1.getContentId() + "," + a2.getContentId() + "," + a3.getContentId()); + return Response.ok(book).build(); + } + @POST @Path("/books/jaxb-body") @Consumes("multipart/related;type=\"text/xml\"") diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/validation/JAXRSMultipartValidationTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/validation/JAXRSMultipartValidationTest.java new file mode 100644 index 00000000000..b855daabfa2 --- /dev/null +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/validation/JAXRSMultipartValidationTest.java @@ -0,0 +1,168 @@ +/** + * 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.cxf.systest.jaxrs.validation; + +import java.io.ByteArrayInputStream; +import java.io.InputStream; +import java.util.Arrays; +import java.util.List; + +import jakarta.activation.DataHandler; +import jakarta.ws.rs.client.Client; +import jakarta.ws.rs.client.ClientBuilder; +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.Response; +import org.apache.cxf.Bus; +import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; +import org.apache.cxf.jaxrs.ext.multipart.AttachmentBuilder; +import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition; +import org.apache.cxf.jaxrs.ext.multipart.InputStreamDataSource; +import org.apache.cxf.jaxrs.ext.multipart.MultipartBody; +import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider; +import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.validation.ValidationExceptionMapper; +import org.apache.cxf.testutil.common.AbstractServerTestServerBase; +import org.apache.cxf.validation.BeanValidationFeature; + +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertTrue; + +public class JAXRSMultipartValidationTest extends AbstractJAXRSValidationTest { + public static final String PORT = allocatePort(JAXRSMultipartValidationTest.class); + + public static class Server extends AbstractServerTestServerBase { + @Override + protected org.apache.cxf.endpoint.Server createServer(Bus bus) throws Exception { + final JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean(); + sf.setResourceClasses(MultipartBookStoreWithValidation.class); + sf.setFeatures(List.of(new BeanValidationFeature())); + sf.setProvider(new ValidationExceptionMapper()); + sf.setResourceProvider(new SingletonResourceProvider(new MultipartBookStoreWithValidation())); + sf.setAddress("http://localhost:" + PORT + "/"); + return sf.create(); + } + + public static void main(String[] args) throws Exception { + new Server().start(); + } + } + + @BeforeClass + public static void startServers() throws Exception { + AbstractResourceInfo.clearAllMaps(); + //keep out of process due to stack traces testing failures + assertTrue("server did not launch correctly", launchServer(Server.class, true)); + } + + @Test + public void testAddBookWithDetailsAsMultipartBadRequest() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/books/details"; + + final Client client = ClientBuilder.newClient(); + try (InputStream is = getClass() + .getResourceAsStream("/org/apache/cxf/systest/jaxrs/resources/attachmentData")) { + final MultipartBody builder = new MultipartBody(Arrays.asList( + new AttachmentBuilder() + .mediaType("application/xml") + .id("book") + .object(new BookWithValidation()) + .build(), + new AttachmentBuilder() + .id("upfile1Detail") + .object(is) + .contentDisposition(new ContentDisposition("form-data; name=\"field1\";")) + .build(), + new AttachmentBuilder() + .id("upfile2Detail") + .dataHandler(new DataHandler( + new InputStreamDataSource(new ByteArrayInputStream(new byte[0]), "text/xml"))) + .contentDisposition(new ContentDisposition("form-data; name=\"field2\";")) + .build(), + new AttachmentBuilder() + .id("upfile3Detail") + .dataHandler(new DataHandler(new InputStreamDataSource( + new ByteArrayInputStream(new byte[0]), "text/xml"))) + .contentDisposition(new ContentDisposition("form-data; name=\"field3\";")) + .build())); + + final Response response = client + .target(address) + .request("text/xml") + .post(Entity.entity(builder, "multipart/form-data")); + + // Book's name is 'null', validation should fail with 400 + assertThat("Unexpected status code for response:" + response, + response.getStatus(), equalTo(400)); + } + } + + @Test + public void testAddBookWithDetailsAsMultipart() throws Exception { + String address = "http://localhost:" + PORT + "/bookstore/books/details"; + + final Client client = ClientBuilder.newClient(); + try (InputStream is = getClass() + .getResourceAsStream("/org/apache/cxf/systest/jaxrs/resources/attachmentData")) { + final MultipartBody builder = new MultipartBody(Arrays.asList( + new AttachmentBuilder() + .mediaType("application/xml") + .id("book") + .object(new BookWithValidation("Book", "book1")) + .build(), + new AttachmentBuilder() + .id("upfile1Detail") + .object(is) + .contentDisposition(new ContentDisposition("form-data; name=\"field1\";")) + .build(), + new AttachmentBuilder() + .id("upfile2Detail") + .dataHandler(new DataHandler( + new InputStreamDataSource(new ByteArrayInputStream(new byte[0]), "text/xml"))) + .contentDisposition(new ContentDisposition("form-data; name=\"field2\";")) + .build(), + new AttachmentBuilder() + .id("upfile3Detail") + .dataHandler(new DataHandler(new InputStreamDataSource( + new ByteArrayInputStream(new byte[0]), "text/xml"))) + .contentDisposition(new ContentDisposition("form-data; name=\"field3\";")) + .build())); + + final Response response = client + .target(address) + .request("text/xml") + .post(Entity.entity(builder, "multipart/form-data")); + + final BookWithValidation book = response.readEntity(BookWithValidation.class); + assertThat("Unexpected status code for response:" + response, + response.getStatus(), equalTo(200)); + assertThat(book.getName(), equalTo("upfile1Detail,upfile2Detail,upfile3Detail")); + } + } + + @Override + protected String getPort() { + return PORT; + } +} + diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/validation/MultipartBookStoreWithValidation.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/validation/MultipartBookStoreWithValidation.java new file mode 100644 index 00000000000..52165c301ee --- /dev/null +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/validation/MultipartBookStoreWithValidation.java @@ -0,0 +1,53 @@ +/** + * 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.cxf.systest.jaxrs.validation; + +import jakarta.validation.Valid; +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.POST; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.WebApplicationException; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.Response; +import org.apache.cxf.jaxrs.ext.multipart.Attachment; +import org.apache.cxf.jaxrs.ext.multipart.Multipart; + +@Path("/bookstore") +public class MultipartBookStoreWithValidation { + @POST + @Path("/books/details") + @Consumes("multipart/form-data") + @Produces("text/xml") + public Response addBookWithDetails( + @Valid @Multipart(value = "book", type = "application/xml") BookWithValidation book, + @Multipart("upfile1Detail") Attachment a1, + @Multipart("upfile2Detail") Attachment a2, + @Multipart("upfile3Detail") Attachment a3) + throws Exception { + + if (a1.equals(a2) || a1.equals(a3) || a2.equals(a3)) { + throw new WebApplicationException(); + } + + book.setName(a1.getContentId() + "," + a2.getContentId() + "," + a3.getContentId()); + return Response.ok(book, MediaType.APPLICATION_XML_TYPE).build(); + } +} From eab3b3d8b0ea446bd28c61984f9a0b1f336adcb0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Dec 2024 14:19:13 -0500 Subject: [PATCH 324/430] Bump org.assertj:assertj-core from 3.26.3 to 3.27.0 (#2207) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.26.3 to 3.27.0. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.26.3...assertj-build-3.27.0) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 06f941a98b0..790cf642be8 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -92,7 +92,7 @@ 1.8.0.Final 3.0.2.Final 1.9.22.1 - 3.26.3 + 3.27.0 [3.0, 4.0) 3.0.13 1.77 From 9164d67047baf78d60b0f563d7b1559daccc321e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 24 Dec 2024 17:20:28 -0500 Subject: [PATCH 325/430] Bump org.eclipse.persistence:org.eclipse.persistence.moxy (#2208) Bumps [org.eclipse.persistence:org.eclipse.persistence.moxy](https://github.com/eclipse-ee4j/eclipselink) from 4.0.4 to 4.0.5. - [Release notes](https://github.com/eclipse-ee4j/eclipselink/releases) - [Commits](https://github.com/eclipse-ee4j/eclipselink/compare/4.0.4...4.0.5) --- updated-dependencies: - dependency-name: org.eclipse.persistence:org.eclipse.persistence.moxy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 790cf642be8..dc146ca77de 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -2052,7 +2052,7 @@ org.eclipse.persistence org.eclipse.persistence.moxy - 4.0.4 + 4.0.5 provided true From 11917a26c9570a54f4ca6c508a33a5ca9c6a713b Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 28 Dec 2024 14:15:33 -0500 Subject: [PATCH 326/430] Update Apache MINA to 2.2.4 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index dc146ca77de..f6df24c1b8e 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -180,7 +180,7 @@ 3.1 3.0.1 3.1.2 - 2.2.1 + 2.2.4 5.14.2 2022.7 3.2.1 From f19cbfe8bf4256036919e86341499bb24b063f80 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 30 Dec 2024 11:40:38 -0500 Subject: [PATCH 327/430] Add Cookie header test cases (#2185) --- .../cxf/jaxrs/client/WebClientTest.java | 30 +++++++++++++++++++ .../apache/cxf/systest/jaxrs/BookStore.java | 9 ++++++ .../jaxrs/JAXRS20ClientServerBookTest.java | 18 +++++++++++ 3 files changed, 57 insertions(+) diff --git a/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java b/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java index 3b4cfb767d4..b98a68b1c03 100644 --- a/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java +++ b/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/WebClientTest.java @@ -24,6 +24,7 @@ import java.net.URI; import java.util.Collections; +import jakarta.ws.rs.core.Cookie; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.ext.ParamConverter; import jakarta.ws.rs.ext.ParamConverterProvider; @@ -32,8 +33,10 @@ import org.junit.Test; +import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -343,6 +346,33 @@ public void testLanguageHeader() { assertEquals("en_CA", wc.getHeaders().getFirst(HttpHeaders.CONTENT_LANGUAGE)); } + @Test + public void testDefaultCookie() { + WebClient wc = WebClient.create("http://foo").language("en_CA"); + wc.cookie(new Cookie("a", "1")); + wc.cookie(new Cookie("b", "2")); + assertThat(wc.getHeaders().get(HttpHeaders.COOKIE), + containsInAnyOrder("$Version=1;a=1", "$Version=1;b=2")); + } + + @Test + public void testCookieNoVersion() { + WebClient wc = WebClient.create("http://foo").language("en_CA"); + wc.cookie(new Cookie("a", "1", null, null, 0)); + wc.cookie(new Cookie("b", "2", null, null, 0)); + assertThat(wc.getHeaders().get(HttpHeaders.COOKIE), + containsInAnyOrder("a=1", "b=2")); + } + + @Test + public void testCookieBuilder() { + WebClient wc = WebClient.create("http://foo").language("en_CA"); + wc.cookie(new Cookie.Builder("a").value("1").build()); + wc.cookie(new Cookie.Builder("b").value("2").build()); + assertThat(wc.getHeaders().get(HttpHeaders.COOKIE), + containsInAnyOrder("$Version=1;a=1", "$Version=1;b=2")); + } + private static final class ParamConverterProviderImpl implements ParamConverterProvider { @SuppressWarnings("unchecked") diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java index a28f720742c..e1a16401b3b 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookStore.java @@ -1852,6 +1852,15 @@ public Map> getHeaders() { return httpHeaders.getRequestHeaders(); } + @GET + @Path("/cookies") + @Produces("application/json") + public Response getCookies() { + return Response.ok() + .header(HttpHeaders.SET_COOKIE, httpHeaders.getRequestHeaders().getFirst(HttpHeaders.COOKIE)) + .build(); + } + public final String init() { books.clear(); cds.clear(); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java index 7362f4f7e8b..5159ee3d428 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRS20ClientServerBookTest.java @@ -63,6 +63,7 @@ import jakarta.ws.rs.client.WebTarget; import jakarta.ws.rs.container.ResourceContext; import jakarta.ws.rs.core.Context; +import jakarta.ws.rs.core.Cookie; import jakarta.ws.rs.core.Feature; import jakarta.ws.rs.core.FeatureContext; import jakarta.ws.rs.core.GenericEntity; @@ -1122,6 +1123,23 @@ public void testGetBookDateAnnotated() throws Exception { + "jakarta.ws.rs.ext.Provider,jakarta.ws.rs.Consumes}")); } + @Test + public void testGetCookies() throws Exception { + final WebTarget target = ClientBuilder + .newClient() + .property("org.apache.cxf.http.cookie.separator", ";") + .target("http://localhost:" + PORT + "/bookstore/cookies"); + + @SuppressWarnings("unchecked") + final Response response = target + .request().accept("application/json") + .cookie(new Cookie("a", "1")) + .cookie(new Cookie("b", "2")) + .get(); + + assertThat(response.getHeaderString(HttpHeaders.SET_COOKIE), equalTo("$Version=1;a=1; $Version=1;b=2")); + } + private static final class ReplaceBodyFilter implements ClientRequestFilter { @Override From c3e24aa9becda95a907edc670c672ac9ec817ddf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 30 Dec 2024 11:40:57 -0500 Subject: [PATCH 328/430] Bump com.puppycrawl.tools:checkstyle from 10.21.0 to 10.21.1 (#2209) Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.21.0 to 10.21.1. - [Release notes](https://github.com/checkstyle/checkstyle/releases) - [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.21.0...checkstyle-10.21.1) --- updated-dependencies: - dependency-name: com.puppycrawl.tools:checkstyle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index f6df24c1b8e..326dfd5bcd0 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -392,7 +392,7 @@ com.puppycrawl.tools checkstyle - 10.21.0 + 10.21.1 From 23fe6df440bb1718a46d2499a253b1b7b421a73d Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 1 Jan 2025 14:34:15 -0500 Subject: [PATCH 329/430] Update ActiveMQ Artemis to 2.39.0 (#2212) --- parent/pom.xml | 2 +- rt/transports/jms/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index 326dfd5bcd0..f73dee7d2c0 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -87,7 +87,7 @@ [2,3) - 2.35.0 + 2.39.0 3.0.1 1.8.0.Final 3.0.2.Final diff --git a/rt/transports/jms/pom.xml b/rt/transports/jms/pom.xml index ffa16c4c41a..8b63c46841d 100644 --- a/rt/transports/jms/pom.xml +++ b/rt/transports/jms/pom.xml @@ -172,7 +172,7 @@ jdk23 - [23,) + [23,24) From b3dff1fec1fc923e9f341c6e38d8b7146685863c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 2 Jan 2025 08:16:28 -0500 Subject: [PATCH 330/430] Bump org.assertj:assertj-core from 3.27.0 to 3.27.1 (#2213) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.0 to 3.27.1. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.0...assertj-build-3.27.1) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index f73dee7d2c0..075dca06f5c 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -92,7 +92,7 @@ 1.8.0.Final 3.0.2.Final 1.9.22.1 - 3.27.0 + 3.27.1 [3.0, 4.0) 3.0.13 1.77 From 4e960cf9acdc777319c8d56bb12115e08fc79af5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 3 Jan 2025 08:08:19 -0500 Subject: [PATCH 331/430] Bump cxf.mockito.version from 5.14.2 to 5.15.2 (#2215) Bumps `cxf.mockito.version` from 5.14.2 to 5.15.2. Updates `org.mockito:mockito-subclass` from 5.14.2 to 5.15.2 - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.2...v5.15.2) Updates `org.mockito:mockito-core` from 5.14.2 to 5.15.2 - [Release notes](https://github.com/mockito/mockito/releases) - [Commits](https://github.com/mockito/mockito/compare/v5.14.2...v5.15.2) --- updated-dependencies: - dependency-name: org.mockito:mockito-subclass dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.mockito:mockito-core dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 075dca06f5c..c56f10fac4c 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -181,7 +181,7 @@ 3.0.1 3.1.2 2.2.4 - 5.14.2 + 5.15.2 2022.7 3.2.1 [4,5) From d963e585da37834062ae88e6b2935bf9fc505277 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 4 Jan 2025 09:04:07 -0500 Subject: [PATCH 332/430] Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.11.1 to 3.11.2 (#2188) Bumps [org.apache.maven.plugins:maven-javadoc-plugin](https://github.com/apache/maven-javadoc-plugin) from 3.11.1 to 3.11.2. - [Release notes](https://github.com/apache/maven-javadoc-plugin/releases) - [Commits](https://github.com/apache/maven-javadoc-plugin/compare/maven-javadoc-plugin-3.11.1...maven-javadoc-plugin-3.11.2) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-javadoc-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- maven-plugins/java2wadl-plugin/pom.xml | 24 ++++- .../src/it/java-generate-rx/pom.xml | 59 +++++++++++ .../src/main/java/application/Test1.java | 22 +++++ .../src/main/java/application/Test2.java | 18 ++++ .../java2wadl-plugin/src/it/settings.xml | 45 +++++++++ .../javatowadl/ParseJavaDocMojo.java | 97 ++++++++----------- parent/pom.xml | 2 +- pom.xml | 2 +- 8 files changed, 208 insertions(+), 61 deletions(-) create mode 100644 maven-plugins/java2wadl-plugin/src/it/java-generate-rx/pom.xml create mode 100644 maven-plugins/java2wadl-plugin/src/it/java-generate-rx/src/main/java/application/Test1.java create mode 100644 maven-plugins/java2wadl-plugin/src/it/java-generate-rx/src/main/java/application/Test2.java create mode 100644 maven-plugins/java2wadl-plugin/src/it/settings.xml diff --git a/maven-plugins/java2wadl-plugin/pom.xml b/maven-plugins/java2wadl-plugin/pom.xml index 4a972b86f50..64ded259729 100644 --- a/maven-plugins/java2wadl-plugin/pom.xml +++ b/maven-plugins/java2wadl-plugin/pom.xml @@ -124,10 +124,6 @@ org.apache.maven maven-toolchain - - org.apache.maven.doxia - * - @@ -147,6 +143,26 @@ cxf-java2wadl + + org.apache.maven.plugins + maven-invoker-plugin + + + test-integration + + install + integration-test + verify + + + src/it/settings.xml + ${project.build.directory}/it + ${maven.test.skip.exec} + ${project.build.directory}/it-repo + + + + diff --git a/maven-plugins/java2wadl-plugin/src/it/java-generate-rx/pom.xml b/maven-plugins/java2wadl-plugin/src/it/java-generate-rx/pom.xml new file mode 100644 index 00000000000..7c89af967f7 --- /dev/null +++ b/maven-plugins/java2wadl-plugin/src/it/java-generate-rx/pom.xml @@ -0,0 +1,59 @@ + + 4.0.0 + + org.apache.cxf.it + java-generate-rx + 1.0.0-SNAPSHOT + jar + java-generate-rx + + + + org.apache.cxf + cxf-rt-frontend-jaxrs + @project.version@ + + + + + + + maven-compiler-plugin + 3.13.0 + + 17 + 17 + + + + org.apache.cxf + cxf-java2wadl-plugin + @project.version@ + + + parsejavadoc + generate-sources + + parsejavadoc + + + + process-classes + process-classes + + java2wadl + + + + application.Test1 + application.Test2 + + org.apache.cxf.maven_plugin.javatowadl.ResourceMapJavaDocProvider + true + + + + + + + diff --git a/maven-plugins/java2wadl-plugin/src/it/java-generate-rx/src/main/java/application/Test1.java b/maven-plugins/java2wadl-plugin/src/it/java-generate-rx/src/main/java/application/Test1.java new file mode 100644 index 00000000000..68eca5145ca --- /dev/null +++ b/maven-plugins/java2wadl-plugin/src/it/java-generate-rx/src/main/java/application/Test1.java @@ -0,0 +1,22 @@ +/** + * Created by Apache CXF WadlToJava code generator +**/ +package application; + +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.Produces; +import jakarta.ws.rs.QueryParam; +import java.util.concurrent.CompletableFuture; +import org.apache.cxf.jaxrs.ext.multipart.Multipart; + +@Path("/1") +public interface Test1 { + + @PUT + @Consumes("multipart/mixed") + @Produces("text/plain") + CompletableFuture put(@QueryParam("standalone") Boolean standalone, @Multipart("action") String action, @Multipart(value = "sources", required = false) String sources); + +} diff --git a/maven-plugins/java2wadl-plugin/src/it/java-generate-rx/src/main/java/application/Test2.java b/maven-plugins/java2wadl-plugin/src/it/java-generate-rx/src/main/java/application/Test2.java new file mode 100644 index 00000000000..e0fe57b81ff --- /dev/null +++ b/maven-plugins/java2wadl-plugin/src/it/java-generate-rx/src/main/java/application/Test2.java @@ -0,0 +1,18 @@ +/** + * Created by Apache CXF WadlToJava code generator +**/ +package application; + +import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.PUT; +import jakarta.ws.rs.Path; +import jakarta.ws.rs.QueryParam; + +@Path("/2") +public interface Test2 { + + @PUT + @Consumes("application/json") + void put(@QueryParam("snapshot") boolean snapshot, String flow); + +} diff --git a/maven-plugins/java2wadl-plugin/src/it/settings.xml b/maven-plugins/java2wadl-plugin/src/it/settings.xml new file mode 100644 index 00000000000..d29dc39671b --- /dev/null +++ b/maven-plugins/java2wadl-plugin/src/it/settings.xml @@ -0,0 +1,45 @@ + + + + + it-repo + + true + + + + local.central + @localRepositoryUrl@ + + true + + + true + + + + + + local.central + @localRepositoryUrl@ + + true + + + true + + + + local.it + file://@project.build.directory@/it/repo + + true + + + true + + + + + + diff --git a/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/ParseJavaDocMojo.java b/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/ParseJavaDocMojo.java index 7830be85699..76e681e09c3 100644 --- a/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/ParseJavaDocMojo.java +++ b/maven-plugins/java2wadl-plugin/src/main/java/org/apache/cxf/maven_plugin/javatowadl/ParseJavaDocMojo.java @@ -21,10 +21,12 @@ import java.io.File; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.List; import java.util.Locale; import org.apache.maven.artifact.Artifact; -import org.apache.maven.artifact.repository.ArtifactRepository; +import org.apache.maven.artifact.handler.manager.ArtifactHandlerManager; +import org.apache.maven.doxia.tools.SiteTool; import org.apache.maven.execution.MavenSession; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -34,10 +36,10 @@ import org.apache.maven.plugins.javadoc.options.DocletArtifact; import org.apache.maven.plugins.javadoc.resolver.ResourceResolver; import org.apache.maven.project.MavenProject; -import org.apache.maven.shared.transfer.artifact.resolve.ArtifactResolver; -import org.apache.maven.shared.transfer.dependencies.resolve.DependencyResolver; import org.apache.maven.toolchain.ToolchainManager; import org.codehaus.plexus.archiver.manager.ArchiverManager; +import org.eclipse.aether.RepositorySystem; +import org.eclipse.aether.RepositorySystemSession; /** * @goal parsejavadoc @@ -78,19 +80,6 @@ public class ParseJavaDocMojo extends AbstractMojo { * @component */ private ResourceResolver resourceResolver; - - /** - * @component - */ - private DependencyResolver dependencyResolver; - - - /** - * @component - */ - private ArtifactResolver artifactResolver; - - /** * @component @@ -109,15 +98,6 @@ public class ParseJavaDocMojo extends AbstractMojo { */ private File dumpFileOutputDirectory; - /** - * The local maven repository. - * - * @parameter expression="${localRepository}" - * @required - * @readonly - */ - private ArtifactRepository localRepository; - /** * Directory into which assembled {@link JavadocOptions} instances will be written before they @@ -128,9 +108,37 @@ public class ParseJavaDocMojo extends AbstractMojo { */ private File javadocOptionsDir; + /** + * @component + */ + private RepositorySystem repoSystem; + + /** + * @parameter default-value = "${repositorySystemSession}" + * @required + * @readonly + */ + private RepositorySystemSession repoSession; + + /** + * @component + */ + private ArtifactHandlerManager artifactHandlerManager; + + /** + * @component + */ + private SiteTool siteTool; + @Override public void execute() throws MojoExecutionException, MojoFailureException { - AbstractJavadocMojo mojo = new JavadocReport(); + AbstractJavadocMojo mojo = new JavadocReport(siteTool, + archiverManager, + resourceResolver, + repoSystem, + artifactHandlerManager, + mavenProjectBuilder, + toolchainManager); Locale locale = Locale.getDefault(); try { Field f = AbstractJavadocMojo.class.getDeclaredField("doclet"); @@ -164,39 +172,10 @@ public void execute() throws MojoExecutionException, MojoFailureException { } f.set(mojo, docletArtifact); - - f = AbstractJavadocMojo.class.getDeclaredField("mavenProjectBuilder"); - f.setAccessible(true); - f.set(mojo, this.mavenProjectBuilder); - - f = AbstractJavadocMojo.class.getDeclaredField("resourceResolver"); - f.setAccessible(true); - f.set(mojo, this.resourceResolver); - f = AbstractJavadocMojo.class.getDeclaredField("session"); System.out.println("========>" + session.getProjects()); f.setAccessible(true); f.set(mojo, this.session); - - f = AbstractJavadocMojo.class.getDeclaredField("dependencyResolver"); - f.setAccessible(true); - f.set(mojo, this.dependencyResolver); - - f = AbstractJavadocMojo.class.getDeclaredField("artifactResolver"); - f.setAccessible(true); - f.set(mojo, this.artifactResolver); - - f = AbstractJavadocMojo.class.getDeclaredField("archiverManager"); - f.setAccessible(true); - f.set(mojo, this.archiverManager); - - f = AbstractJavadocMojo.class.getDeclaredField("toolchainManager"); - f.setAccessible(true); - f.set(mojo, this.toolchainManager); - - f = AbstractJavadocMojo.class.getDeclaredField("localRepository"); - f.setAccessible(true); - f.set(mojo, this.localRepository); f = AbstractJavadocMojo.class.getDeclaredField("applyJavadocSecurityFix"); f.setAccessible(true); @@ -221,6 +200,14 @@ public void execute() throws MojoExecutionException, MojoFailureException { f.set(mojo, dumpFileOutputDirectory); } + f = AbstractJavadocMojo.class.getDeclaredField("reactorProjects"); + f.setAccessible(true); + f.set(mojo, List.of()); + + f = AbstractJavadocMojo.class.getDeclaredField("repoSession"); + f.setAccessible(true); + f.set(mojo, repoSession); + Method m = AbstractJavadocMojo.class.getDeclaredMethod("executeReport", Locale.class); m.setAccessible(true); m.invoke(mojo, locale); diff --git a/parent/pom.xml b/parent/pom.xml index c56f10fac4c..65e52be1529 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -2009,7 +2009,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.11.1 + 3.11.2 org.ehcache diff --git a/pom.xml b/pom.xml index 019da25a296..24994a409f5 100644 --- a/pom.xml +++ b/pom.xml @@ -472,7 +472,7 @@ org.apache.maven.plugins maven-javadoc-plugin - 3.11.1 + 3.11.2 true ${cxf.jdk.version} From 2f3e2fbb99d4893eae641f504a2cd704eeafea5a Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 4 Jan 2025 15:27:46 -0500 Subject: [PATCH 333/430] Fix cxf-rt-transports-jms test cases for JDK-24 (Subject::getSubject) --- .../jms/src/test/resources/logging.properties | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 rt/transports/jms/src/test/resources/logging.properties diff --git a/rt/transports/jms/src/test/resources/logging.properties b/rt/transports/jms/src/test/resources/logging.properties new file mode 100644 index 00000000000..98412a86411 --- /dev/null +++ b/rt/transports/jms/src/test/resources/logging.properties @@ -0,0 +1,19 @@ +# 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. + +# Disable ActiveMQ Artemis loggers (including the audit ones) +.level=SEVERE From 436721d94079bf5b91a18e37bdcbf3fb7560d270 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:15:38 -0500 Subject: [PATCH 334/430] Bump org.assertj:assertj-core from 3.27.1 to 3.27.2 (#2216) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.1 to 3.27.2. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.1...assertj-build-3.27.2) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 65e52be1529..f44b2d8d6a1 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -92,7 +92,7 @@ 1.8.0.Final 3.0.2.Final 1.9.22.1 - 3.27.1 + 3.27.2 [3.0, 4.0) 3.0.13 1.77 From 847055984da12293aa6b3c2fe1dfe4845200dff9 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 6 Jan 2025 17:15:51 -0500 Subject: [PATCH 335/430] Bump ch.qos.logback:logback-classic from 1.5.15 to 1.5.16 (#2218) Bumps [ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) from 1.5.15 to 1.5.16. - [Commits](https://github.com/qos-ch/logback/compare/v_1.5.15...v_1.5.16) --- updated-dependencies: - dependency-name: ch.qos.logback:logback-classic dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index f44b2d8d6a1..7246b9bc1a7 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -172,7 +172,7 @@ 2.0.3 7.0.2 1.1.2 - 1.5.15 + 1.5.16 9.12.1 3.9.8 1.14.2 From f7da232ff5446cbf379a140652550ad6eecf7f95 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 9 Jan 2025 13:02:21 -0500 Subject: [PATCH 336/430] CXF-9093: Client does not send entire payload (if size ~> 2500 bytes) when hc5, TLS1.3 are used (#2214) --- systests/transport-hc5/pom.xml | 4 ++ .../hc5/https/clientauth/ClientAuthTest.java | 69 +++++++++++++++++++ .../https/clientauth/client-auth-server.xml | 25 ++++++- .../https/clientauth/client-auth-tls-1.3.xml | 44 ++++++++++++ 4 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 systests/transport-hc5/src/test/resources/org/apache/cxf/systest/hc5/https/clientauth/client-auth-tls-1.3.xml diff --git a/systests/transport-hc5/pom.xml b/systests/transport-hc5/pom.xml index 065ffea4577..cf55be39753 100644 --- a/systests/transport-hc5/pom.xml +++ b/systests/transport-hc5/pom.xml @@ -82,6 +82,8 @@ true + + true @@ -90,6 +92,8 @@ false + + true diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/https/clientauth/ClientAuthTest.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/https/clientauth/ClientAuthTest.java index cec88e348f5..3c51d83b16b 100644 --- a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/https/clientauth/ClientAuthTest.java +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/https/clientauth/ClientAuthTest.java @@ -65,6 +65,7 @@ public class ClientAuthTest extends AbstractBusClientServerTestBase { static final String PORT = allocatePort(ClientAuthServer.class); static final String PORT2 = allocatePort(ClientAuthServer.class, 2); + static final String PORT3 = allocatePort(ClientAuthServer.class, 3); final Boolean async; @@ -575,6 +576,74 @@ public void testDirectTrustUsingSSLContext() throws Exception { ((java.io.Closeable)port).close(); } + // Server directly trusts the client cert and uses TLSv1.3, no chunking + @org.junit.Test + public void testDirectTrustTls13LargeNoChunking() throws Exception { + SpringBusFactory bf = new SpringBusFactory(); + URL busFile = ClientAuthTest.class.getResource("client-auth-tls-1.3.xml"); + + Bus bus = bf.createBus(busFile.toString()); + BusFactory.setDefaultBus(bus); + BusFactory.setThreadDefaultBus(bus); + + URL url = SOAPService.WSDL_LOCATION; + SOAPService service = new SOAPService(url, SOAPService.SERVICE); + assertNotNull("Service is null", service); + final Greeter port = service.getHttpsPort(); + assertNotNull("Port is null", port); + + updateAddressPort(port, PORT3); + + // Enable Async + if (async) { + ((BindingProvider)port).getRequestContext().put("use.async.http.conduit", true); + } + + Client client = ClientProxy.getClient(port); + HTTPConduit http = (HTTPConduit) client.getConduit(); + http.getClient().setAllowChunking(false); + + final String name = "Kitty ".repeat(500); + assertEquals(port.greetMe(name), "Hello " + name); + + ((java.io.Closeable)port).close(); + bus.shutdown(true); + } + + // Server directly trusts the client cert and uses TLSv1.3, chunking + @org.junit.Test + public void testDirectTrustTls13LargeChunking() throws Exception { + SpringBusFactory bf = new SpringBusFactory(); + URL busFile = ClientAuthTest.class.getResource("client-auth-tls-1.3.xml"); + + Bus bus = bf.createBus(busFile.toString()); + BusFactory.setDefaultBus(bus); + BusFactory.setThreadDefaultBus(bus); + + URL url = SOAPService.WSDL_LOCATION; + SOAPService service = new SOAPService(url, SOAPService.SERVICE); + assertNotNull("Service is null", service); + final Greeter port = service.getHttpsPort(); + assertNotNull("Port is null", port); + + updateAddressPort(port, PORT3); + + // Enable Async + if (async) { + ((BindingProvider)port).getRequestContext().put("use.async.http.conduit", true); + } + + Client client = ClientProxy.getClient(port); + HTTPConduit http = (HTTPConduit) client.getConduit(); + http.getClient().setAllowChunking(true); + + final String name = "Kitty ".repeat(500); + assertEquals(port.greetMe(name), "Hello " + name); + + ((java.io.Closeable)port).close(); + bus.shutdown(true); + } + private static final class DisableCNCheckVerifier implements HostnameVerifier { @Override diff --git a/systests/transport-hc5/src/test/resources/org/apache/cxf/systest/hc5/https/clientauth/client-auth-server.xml b/systests/transport-hc5/src/test/resources/org/apache/cxf/systest/hc5/https/clientauth/client-auth-server.xml index af5a90ffe6d..1b96177faaf 100644 --- a/systests/transport-hc5/src/test/resources/org/apache/cxf/systest/hc5/https/clientauth/client-auth-server.xml +++ b/systests/transport-hc5/src/test/resources/org/apache/cxf/systest/hc5/https/clientauth/client-auth-server.xml @@ -54,7 +54,7 @@ address="https://localhost:${testutil.ports.ClientAuthServer}/SoapContext/HttpsPort" serviceName="s:SOAPService" endpointName="e:HttpsPort" depends-on="direct-trust-tls-settings"/> - + @@ -76,5 +76,26 @@ address="https://localhost:${testutil.ports.ClientAuthServer.2}/SoapContext/HttpsPort" serviceName="s:SOAPService" endpointName="e:HttpsPort" depends-on="chain-trust-tls-settings"/> - + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/systests/transport-hc5/src/test/resources/org/apache/cxf/systest/hc5/https/clientauth/client-auth-tls-1.3.xml b/systests/transport-hc5/src/test/resources/org/apache/cxf/systest/hc5/https/clientauth/client-auth-tls-1.3.xml new file mode 100644 index 00000000000..dc19c42849d --- /dev/null +++ b/systests/transport-hc5/src/test/resources/org/apache/cxf/systest/hc5/https/clientauth/client-auth-tls-1.3.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 2f79660306ce75e9d9df6ddeaf013f213a98ea57 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 10 Jan 2025 15:13:52 -0500 Subject: [PATCH 337/430] Update OpenTelemetry to 1.46.0 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 7246b9bc1a7..0b427765d01 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -189,7 +189,7 @@ 2.0.69.Final 2.0.12 3.2.2 - 1.45.0 + 1.46.0 1.29.0-alpha 0.33.0 2.0.27 From 45d81ef6fe8709ac19effee9c5ebef9792e85732 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 10 Jan 2025 15:20:21 -0500 Subject: [PATCH 338/430] Update Apache HttpCore5 to 5.3.2 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 0b427765d01..a67c5febb5d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -129,7 +129,7 @@ [4.3,4.5.0) 4.4.16 5.4.1 - 5.3.1 + 5.3.2 2.18.2 2.18.2 3.9 From a52e4bcf3be3fbf1862d738d5498ad6e74839872 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 11 Jan 2025 09:01:46 -0500 Subject: [PATCH 339/430] CXF-9094: Hard coded org.slf4j.impl.StaticLoggerBinder of slf4j 1.x in LogUtils (#2220) --- .../java/org/apache/cxf/common/logging/LogUtils.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/cxf/common/logging/LogUtils.java b/core/src/main/java/org/apache/cxf/common/logging/LogUtils.java index 09727e68a32..3bf3cd64c78 100644 --- a/core/src/main/java/org/apache/cxf/common/logging/LogUtils.java +++ b/core/src/main/java/org/apache/cxf/common/logging/LogUtils.java @@ -98,7 +98,14 @@ public String run() { // as we'll just use j.u.l and pax-logging will pick it up fine // If we don't call this and there isn't a slf4j impl avail, // you get warnings printed to stderr about NOPLoggers and such - Class.forName("org.slf4j.impl.StaticLoggerBinder"); + try { + // SLF4J 2.x + Class.forName("org.slf4j.spi.SLF4JServiceProvider"); + } catch (final ClassNotFoundException ex) { + // SLF4J 1.x + Class.forName("org.slf4j.impl.StaticLoggerBinder"); + } + Class cls = Class.forName("org.slf4j.LoggerFactory"); Class fcls = cls.getMethod("getILoggerFactory").invoke(null).getClass(); String clsName = fcls.getName(); From d58847626b4cc50f9b654704571e330cee52bfb5 Mon Sep 17 00:00:00 2001 From: Fabian Ohler Date: Sun, 12 Jan 2025 16:10:36 +0100 Subject: [PATCH 340/430] [CXF-8910] Add https to special handling in package name derivation (#1368) Required by https://jakarta.ee/specifications/xml-binding/4.0/jakarta-xml-binding-spec-4.0#mapping-from-a-namespace-uri --- .../main/java/org/apache/cxf/common/util/PackageUtils.java | 2 +- .../java/org/apache/cxf/common/util/PackageUtilsTest.java | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/cxf/common/util/PackageUtils.java b/core/src/main/java/org/apache/cxf/common/util/PackageUtils.java index 9d014c85796..a63e3ac66cf 100644 --- a/core/src/main/java/org/apache/cxf/common/util/PackageUtils.java +++ b/core/src/main/java/org/apache/cxf/common/util/PackageUtils.java @@ -89,7 +89,7 @@ public static String getPackageNameByNameSpaceURI(String nameSpaceURI) { if (idx >= 0) { final String scheme = nameSpaceURI.substring(0, idx); urnScheme = "urn".equalsIgnoreCase(scheme); - if ("http".equalsIgnoreCase(scheme) || urnScheme) { + if ("http".equalsIgnoreCase(scheme) || "https".equalsIgnoreCase(scheme) || urnScheme) { nameSpaceURI = nameSpaceURI.substring(idx + (urnScheme ? 1 : 3)); // } } diff --git a/core/src/test/java/org/apache/cxf/common/util/PackageUtilsTest.java b/core/src/test/java/org/apache/cxf/common/util/PackageUtilsTest.java index 3f930ba4f62..0388dac114d 100644 --- a/core/src/test/java/org/apache/cxf/common/util/PackageUtilsTest.java +++ b/core/src/test/java/org/apache/cxf/common/util/PackageUtilsTest.java @@ -127,6 +127,7 @@ public void testParsePackageName() throws Exception { @Test public void testGetPackageNameByNameSpaceURI() throws Exception { assertEquals("com.iona.cxf", PackageUtils.getPackageNameByNameSpaceURI("http://www.cxf.iona.com")); + assertEquals("com.iona.cxf", PackageUtils.getPackageNameByNameSpaceURI("https://www.cxf.iona.com")); assertEquals("com.iona._class", PackageUtils.getPackageNameByNameSpaceURI("urn:www.class.iona.com")); assertEquals("uri.cxf_apache_org.jstest", PackageUtils.getPackageNameByNameSpaceURI("uri:cxf.apache.org:jstest")); @@ -134,10 +135,16 @@ public void testGetPackageNameByNameSpaceURI() throws Exception { PackageUtils.getPackageNameByNameSpaceURI("com.esendex.ems.soapinterface")); assertEquals("ddd.cc.bb.aa._int.fff_v01_00", PackageUtils.getPackageNameByNameSpaceURI("http://aa.bb.cc.ddd/Int/fff-v01.00")); + assertEquals("ddd.cc.bb.aa._int.fff_v01_00", + PackageUtils.getPackageNameByNameSpaceURI("https://aa.bb.cc.ddd/Int/fff-v01.00")); assertEquals("org.apache.cxf._case", PackageUtils.getPackageNameByNameSpaceURI("http://www.case.cxf.apache.org")); + assertEquals("org.apache.cxf._case", + PackageUtils.getPackageNameByNameSpaceURI("https://www.case.cxf.apache.org")); assertEquals("org.apache.cxf._case", PackageUtils.getPackageNameByNameSpaceURI("http://www.Case.cxf.apache.org")); + assertEquals("org.apache.cxf._case", + PackageUtils.getPackageNameByNameSpaceURI("https://www.Case.cxf.apache.org")); } @Test From 3ad942b22b2cd386fe446b82c9c81f28ee19c24d Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Mon, 13 Jan 2025 11:53:57 -0500 Subject: [PATCH 341/430] [CXF-9099]GZIPOutInterceptor : ensure the CXF headers that GZIPOutInterceptor needs to resize is modifiable --- .../common/gzip/GZIPOutInterceptor.java | 2 ++ .../http_undertow/UndertowDigestAuthTest.java | 19 +++++++++++++++++-- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPOutInterceptor.java b/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPOutInterceptor.java index d7fc1686d87..6f6e1eaccbd 100644 --- a/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPOutInterceptor.java +++ b/core/src/main/java/org/apache/cxf/transport/common/gzip/GZIPOutInterceptor.java @@ -329,6 +329,8 @@ private static void addHeader(Message message, String name, String value) { message.put(Message.PROTOCOL_HEADERS, headers); } List header = headers.computeIfAbsent(name, k -> new ArrayList<>()); + header = new ArrayList(header); //ensure header List is modifiable + headers.put(name, header); if (header.isEmpty() || !header.contains(value)) { header.add(value); } diff --git a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java index 448bf49bace..0ca1acc2096 100644 --- a/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java +++ b/systests/transport-undertow/src/test/java/org/apache/cxf/systest/http_undertow/UndertowDigestAuthTest.java @@ -20,7 +20,11 @@ package org.apache.cxf.systest.http_undertow; import java.net.URL; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; import java.util.Map; +import java.util.TreeMap; import javax.xml.namespace.QName; @@ -42,6 +46,7 @@ import org.apache.cxf.phase.Phase; import org.apache.cxf.testutil.common.AbstractBusTestServerBase; import org.apache.cxf.testutil.common.AbstractClientServerTestBase; +import org.apache.cxf.transport.common.gzip.GZIPOutInterceptor; import org.apache.cxf.transport.http.HTTPConduit; import org.apache.cxf.transport.http.HTTPConduitConfigurer; import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit; @@ -112,6 +117,7 @@ private HTTPConduit setupClient(boolean async) throws Exception { BindingProvider bp = (BindingProvider)greeter; ClientProxy.getClient(greeter).getInInterceptors().add(new LoggingInInterceptor()); ClientProxy.getClient(greeter).getOutInterceptors().add(new LoggingOutInterceptor()); + ClientProxy.getClient(greeter).getOutInterceptors().add(new GZIPOutInterceptor()); bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, ADDRESS); HTTPConduit cond = (HTTPConduit)ClientProxy.getClient(greeter).getConduit(); @@ -132,10 +138,19 @@ private HTTPConduit setupClient(boolean async) throws Exception { } ClientProxy.getClient(greeter).getOutInterceptors() - .add(new AbstractPhaseInterceptor(Phase.PRE_STREAM_ENDING) { + .add(new AbstractPhaseInterceptor(Phase.USER_LOGICAL) { public void handleMessage(Message message) throws Fault { - Map headers = CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS)); + Map> headers = + CastUtils.cast((Map)message.get(Message.PROTOCOL_HEADERS)); + if (headers == null) { + headers = new TreeMap<>(String.CASE_INSENSITIVE_ORDER); + message.put(Message.PROTOCOL_HEADERS, headers); + } + List header = + (List)headers.computeIfAbsent("Accept-Encoding", k -> new ArrayList<>()); + header = Arrays.asList(header.toArray()); + headers.put("Accept-Encoding", header); if (headers.containsKey("Proxy-Authorization")) { throw new RuntimeException("Should not have Proxy-Authorization"); } From fd8af4bb3720317adaa54f66155e5fa73d05dbe3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 17:22:31 -0500 Subject: [PATCH 342/430] Bump org.owasp:dependency-check-maven from 11.1.1 to 12.0.0 (#2223) Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 11.1.1 to 12.0.0. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v11.1.1...v12.0.0) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 24994a409f5..f6da86dda0c 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 17 UTF-8 scp://people.apache.org/www/cxf.apache.org/maven-site - 11.1.1 + 12.0.0 clean install From 1b802d1f5ecccc6746afe28afc536266eb0f92a4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 13 Jan 2025 17:22:46 -0500 Subject: [PATCH 343/430] Bump github/codeql-action from 3.28.0 to 3.28.1 (#2222) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.0 to 3.28.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/48ab28a6f5dbc2a99bf1e0131198dd8f1df78169...b6a472f63d85b9c78a3ac5e89422239fc15e9b3c) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 816d478e652..bb2fc3ff544 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0 + uses: github/codeql-action/init@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 # v3.28.0 + uses: github/codeql-action/analyze@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index c5d9270b197..6ef8d273bd5 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@48ab28a6f5dbc2a99bf1e0131198dd8f1df78169 #tag=v2 + uses: github/codeql-action/upload-sarif@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c #tag=v2 with: sarif_file: results.sarif From bad6feb8b5bd18ef7d817a1424d960f77a5be595 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 13 Jan 2025 17:58:18 -0500 Subject: [PATCH 344/430] Update Arquillian to 1.8.1.Final --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index a67c5febb5d..ce825369ceb 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -89,7 +89,7 @@ 2.39.0 3.0.1 - 1.8.0.Final + 1.8.1.Final 3.0.2.Final 1.9.22.1 3.27.2 From 58ad38cd0ce8dabca103072c529d31093ef9f2a3 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 13 Jan 2025 17:58:49 -0500 Subject: [PATCH 345/430] Update Micrometer to 1.14.3 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index ce825369ceb..f5492575b0d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -175,7 +175,7 @@ 1.5.16 9.12.1 3.9.8 - 1.14.2 + 1.14.3 1.4.1 3.1 3.0.1 From 29a31b10846b4d95bbcd85b70a5b9be21ffbac3e Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 13 Jan 2025 17:59:09 -0500 Subject: [PATCH 346/430] Update Micrometer Tracing to 1.14.2 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index f5492575b0d..792f56384ff 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -176,7 +176,7 @@ 9.12.1 3.9.8 1.14.3 - 1.4.1 + 1.4.2 3.1 3.0.1 3.1.2 From a4a936400b8f05ebdaf5e076182fb5a8961a39d8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Jan 2025 08:54:29 -0500 Subject: [PATCH 347/430] Bump actions/upload-artifact from 4.5.0 to 4.6.0 (#2221) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.5.0 to 4.6.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/6f51ac03b9356f520e9adb1b1b7802705f340c2b...65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecards.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 6ef8d273bd5..774ec89aaef 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -49,7 +49,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@6f51ac03b9356f520e9adb1b1b7802705f340c2b # tag=v4.5.0 + uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # tag=v4.6.0 with: name: SARIF file path: results.sarif From 1d3d700fd88bb1326bfd4a650a6db2f6585eaf2d Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 14 Jan 2025 17:59:59 -0500 Subject: [PATCH 348/430] CXF-9065: StackOverflow Exception during execution of WebClient POST Request on SSLUtils class (#2224) --- .../apache/cxf/transport/https/SSLUtils.java | 7 +- .../cxf/transport/https/SSLUtilsTest.java | 64 +++++++++++++++++++ 2 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 rt/transports/http/src/test/java/org/apache/cxf/transport/https/SSLUtilsTest.java diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java index 9c6da933baf..ba34a645c7f 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java @@ -293,7 +293,12 @@ public X509Certificate[] getAcceptedIssuers() { static class SSLEngineWrapper extends SSLEngine { final SSLEngine delegate; SSLEngineWrapper(SSLEngine delegate) { - this.delegate = delegate; + // Unwrap the delegate if it is an instance of the SSLEngineWrapper + if (delegate instanceof SSLEngineWrapper) { + this.delegate = ((SSLEngineWrapper) delegate).delegate; + } else { + this.delegate = delegate; + } } public SSLParameters getSSLParameters() { //make sure the hostname verification is not done in the default X509 stuff diff --git a/rt/transports/http/src/test/java/org/apache/cxf/transport/https/SSLUtilsTest.java b/rt/transports/http/src/test/java/org/apache/cxf/transport/https/SSLUtilsTest.java new file mode 100644 index 00000000000..66a1cc27867 --- /dev/null +++ b/rt/transports/http/src/test/java/org/apache/cxf/transport/https/SSLUtilsTest.java @@ -0,0 +1,64 @@ +/** + * 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.cxf.transport.https; + +import java.security.NoSuchAlgorithmException; + +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLEngine; + +import org.apache.cxf.transport.https.SSLUtils.SSLEngineWrapper; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; + + +public class SSLUtilsTest { + private SSLEngine engine; + + @Before + public void setUp() throws NoSuchAlgorithmException { + engine = SSLContext.getDefault().createSSLEngine(); + } + + @After + public void tearDown() throws Exception { + engine.closeInbound(); + engine.closeOutbound(); + engine = null; + } + + @Test + public void testCXF9065() throws NoSuchAlgorithmException, InterruptedException { + SSLEngineWrapper wrapper = new SSLEngineWrapper(engine); + + for (int i = 0; i < 15000; ++i) { + wrapper = new SSLEngineWrapper(wrapper); + } + + assertThat(wrapper.getSSLParameters(), is(not(nullValue()))); + } +} From 499bfbb0f6a3fc39e1ce7e99b7b61d8e245ce6fc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2025 09:02:04 -0500 Subject: [PATCH 349/430] Bump cxf.netty.version from 4.1.116.Final to 4.1.117.Final (#2226) Bumps `cxf.netty.version` from 4.1.116.Final to 4.1.117.Final. Updates `io.netty:netty-codec-http` from 4.1.116.Final to 4.1.117.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.116.Final...netty-4.1.117.Final) Updates `io.netty:netty-codec-http2` from 4.1.116.Final to 4.1.117.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.116.Final...netty-4.1.117.Final) Updates `io.netty:netty-codec-socks` from 4.1.116.Final to 4.1.117.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.116.Final...netty-4.1.117.Final) Updates `io.netty:netty-handler-proxy` from 4.1.116.Final to 4.1.117.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.116.Final...netty-4.1.117.Final) --- updated-dependencies: - dependency-name: io.netty:netty-codec-http dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.netty:netty-codec-http2 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.netty:netty-codec-socks dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.netty:netty-handler-proxy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 3b0ba97d2b2..eb904263e98 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -34,7 +34,7 @@ 3.4.1 4.2.0 12.0.16 - 4.1.116.Final + 4.1.117.Final 4.5.14 5.18.2 3.0.0 diff --git a/parent/pom.xml b/parent/pom.xml index 792f56384ff..8e4ab317b57 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -185,7 +185,7 @@ 2022.7 3.2.1 [4,5) - 4.1.116.Final + 4.1.117.Final 2.0.69.Final 2.0.12 3.2.2 From 0a9983d58a5765cac83da1b74fe2745ce6313eb8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 15 Jan 2025 09:02:13 -0500 Subject: [PATCH 350/430] Bump cxf.reactor.version from 3.7.1 to 3.7.2 (#2225) Bumps `cxf.reactor.version` from 3.7.1 to 3.7.2. Updates `io.projectreactor:reactor-core` from 3.7.1 to 3.7.2 - [Release notes](https://github.com/reactor/reactor-core/releases) - [Commits](https://github.com/reactor/reactor-core/compare/v3.7.1...v3.7.2) Updates `io.projectreactor:reactor-test` from 3.7.1 to 3.7.2 - [Release notes](https://github.com/reactor/reactor-core/releases) - [Commits](https://github.com/reactor/reactor-core/compare/v3.7.1...v3.7.2) --- updated-dependencies: - dependency-name: io.projectreactor:reactor-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.projectreactor:reactor-test dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 8e4ab317b57..84e1f020379 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -198,7 +198,7 @@ 4.10.0 3.5.1 1.0.4 - 3.7.1 + 3.7.2 1.7.15 1.3.8 2.2.21 From 347eea80bbe9a297c1b704e31dd3f9fda3bc0aa4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Jan 2025 07:50:42 -0500 Subject: [PATCH 351/430] Bump cxf.dropwizard4.version from 4.2.29 to 4.2.30 (#2227) Bumps `cxf.dropwizard4.version` from 4.2.29 to 4.2.30. Updates `io.dropwizard.metrics:metrics-core` from 4.2.29 to 4.2.30 - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.29...v4.2.30) Updates `io.dropwizard.metrics:metrics-jmx` from 4.2.29 to 4.2.30 - [Release notes](https://github.com/dropwizard/metrics/releases) - [Commits](https://github.com/dropwizard/metrics/compare/v4.2.29...v4.2.30) --- updated-dependencies: - dependency-name: io.dropwizard.metrics:metrics-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.dropwizard.metrics:metrics-jmx dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 84e1f020379..e6117b1f46a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -109,7 +109,7 @@ 10.16.1.1 2.1.4 3.2.6 - 4.2.29 + 4.2.30 3.10.8 5.0.1 3.0.2 From dd7dc2748586a9bb639770da49d62c46bbda4571 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 16 Jan 2025 08:30:26 -0500 Subject: [PATCH 352/430] Update Spring to 6.2.2 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index e6117b1f46a..cfedc0e99b6 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -214,7 +214,7 @@ 3.2.10 spring-test 6.4.2 - 6.2.1 + 6.2.2 1.8.3 5.18.2 2.2.27 From 318409d12c10a0680d0ccd616eb2ba219bb2aa84 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 16 Jan 2025 08:37:00 -0500 Subject: [PATCH 353/430] Update Swagger to 2.2.28 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index cfedc0e99b6..4b9f58be579 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -217,7 +217,7 @@ 6.2.2 1.8.3 5.18.2 - 2.2.27 + 2.2.28 3.0.0 10.1.34 1.8 From a9053c26036aac80630b030c413900da7df716b1 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 19 Jan 2025 10:15:18 -0500 Subject: [PATCH 354/430] CXF-8765: Option to remove Ehcache (#2196) --- rt/rs/security/sso/saml/pom.xml | 7 + .../sso/jcache/JCacheTokenReplayCache.java | 162 ++++++++++++++++ .../state/jcache/JCacheSPStateManager.java | 165 ++++++++++++++++ .../src/main/resources/cxf-samlp-ehcache.xml | 18 ++ .../src/main/resources/cxf-samlp-jcache.xml | 74 +++++++ .../security/saml/sso/SPStateManagerTest.java | 3 +- .../saml/sso/TokenReplayCacheTest.java | 43 +++-- rt/ws/security/pom.xml | 7 + .../cache/jcache/CXFJCacheReplayCache.java | 50 +++++ .../cache/jcache/JCacheReplayCache.java | 141 ++++++++++++++ .../tokenstore/TokenStoreFactory.java | 29 +-- .../tokenstore/jcache/JCacheTokenStore.java | 131 +++++++++++++ .../jcache/JCacheTokenStoreFactory.java | 51 +++++ .../cxf/ws/security/utils/JCacheUtils.java | 73 +++++++ .../cxf/ws/security/wss4j/WSS4JUtils.java | 5 + .../src/main/resources/cxf-ehcache.xml | 18 ++ .../src/main/resources/cxf-jcache.xml | 50 +++++ .../security/tokenstore/TokenStoreTest.java | 21 +- .../sts/cache/jcache/JCacheIdentityCache.java | 182 ++++++++++++++++++ .../src/main/resources/sts-ehcache.xml | 18 ++ .../src/main/resources/sts-jcache.xml | 40 ++++ .../cache/jcache/JCacheIdentityCacheTest.java | 37 ++++ .../cache/jcache/JCacheXKMSClientCache.java | 124 ++++++++++++ .../cxf/xkms/cache/XKMSClientCacheTest.java | 20 +- .../jaxrs/BookCxfContinuationStore.java | 2 +- .../cxf/systest/ws/cache/CachingTest.java | 36 ++-- 26 files changed, 1451 insertions(+), 56 deletions(-) create mode 100644 rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/jcache/JCacheTokenReplayCache.java create mode 100644 rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/state/jcache/JCacheSPStateManager.java create mode 100644 rt/rs/security/sso/saml/src/main/resources/cxf-samlp-jcache.xml create mode 100644 rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/jcache/CXFJCacheReplayCache.java create mode 100644 rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/jcache/JCacheReplayCache.java create mode 100644 rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/jcache/JCacheTokenStore.java create mode 100644 rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/jcache/JCacheTokenStoreFactory.java create mode 100644 rt/ws/security/src/main/java/org/apache/cxf/ws/security/utils/JCacheUtils.java create mode 100644 rt/ws/security/src/main/resources/cxf-jcache.xml create mode 100644 services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/jcache/JCacheIdentityCache.java create mode 100644 services/sts/sts-core/src/main/resources/sts-jcache.xml create mode 100644 services/sts/sts-core/src/test/java/org/apache/cxf/sts/cache/jcache/JCacheIdentityCacheTest.java create mode 100644 services/xkms/xkms-client/src/main/java/org/apache/cxf/xkms/cache/jcache/JCacheXKMSClientCache.java diff --git a/rt/rs/security/sso/saml/pom.xml b/rt/rs/security/sso/saml/pom.xml index 6a82eac384d..8c70da2877e 100644 --- a/rt/rs/security/sso/saml/pom.xml +++ b/rt/rs/security/sso/saml/pom.xml @@ -71,5 +71,12 @@ jakarta compile + + org.ehcache.modules + ehcache-107 + ${cxf.ehcache3.version} + provided + true + diff --git a/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/jcache/JCacheTokenReplayCache.java b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/jcache/JCacheTokenReplayCache.java new file mode 100644 index 00000000000..e944c36227c --- /dev/null +++ b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/jcache/JCacheTokenReplayCache.java @@ -0,0 +1,162 @@ +/** + * 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.cxf.rs.security.saml.sso.jcache; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.time.Instant; + +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.configuration.MutableConfiguration; +import javax.cache.spi.CachingProvider; + +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; +import org.apache.cxf.jaxrs.utils.ResourceUtils; +import org.apache.cxf.rs.security.saml.sso.TokenReplayCache; +import org.apache.wss4j.common.cache.EHCacheReplayCache; +import org.apache.wss4j.common.cache.EHCacheValue; +import org.apache.wss4j.common.util.Loader; + +/** + * An in-memory JCache based implementation of the TokenReplayCache interface. + * The default TTL is 60 minutes and the max TTL is 12 hours. + */ + +public class JCacheTokenReplayCache implements TokenReplayCache { + + public static final String CACHE_KEY = "cxf.samlp.replay.cache"; + + private static final org.slf4j.Logger LOG = + org.slf4j.LoggerFactory.getLogger(EHCacheReplayCache.class); + private static final String DEFAULT_CONFIG_URL = "/cxf-samlp-jcache.xml"; + + private final Cache cache; + private final CacheManager cacheManager; + + public JCacheTokenReplayCache() throws URISyntaxException { + this(DEFAULT_CONFIG_URL, null); + } + + public JCacheTokenReplayCache(Bus bus) throws URISyntaxException { + this(DEFAULT_CONFIG_URL, bus); + } + + public JCacheTokenReplayCache(String configFile) throws URISyntaxException { + this(configFile, null); + } + + public JCacheTokenReplayCache(String configFile, Bus bus) throws URISyntaxException { + if (bus == null) { + bus = BusFactory.getThreadDefaultBus(true); + } + URL configFileURL = null; + try { + configFileURL = + ResourceUtils.getClasspathResourceURL(configFile, JCacheTokenReplayCache.class, bus); + } catch (Exception ex) { + // ignore + } + + final CachingProvider cachingProvider = Caching.getCachingProvider(); + + cacheManager = cachingProvider.getCacheManager( + getConfigFileURL(configFileURL).toURI(), + getClass().getClassLoader()); + + cache = getOrCreate(cacheManager, CACHE_KEY, String.class, EHCacheValue.class); + } + + private static Cache getOrCreate(CacheManager cacheManager, String name, + Class kclass, Class vclass) { + + final Cache cache = cacheManager.getCache(name, kclass, vclass); + if (cache != null) { + return cache; + } + + final MutableConfiguration cacheConfiguration = new MutableConfiguration<>(); + cacheConfiguration.setTypes(kclass, vclass); + + return cacheManager.createCache(name, cacheConfiguration); + } + + private URL getConfigFileURL(URL suppliedConfigFileURL) { + if (suppliedConfigFileURL == null) { + //using the default + try { + URL configFileURL = Loader.getResource(DEFAULT_CONFIG_URL); + if (configFileURL == null) { + configFileURL = new URL(DEFAULT_CONFIG_URL); + } + return configFileURL; + } catch (IOException e) { + // Do nothing + LOG.debug(e.getMessage()); + } + } + return suppliedConfigFileURL; + } + + /** + * Add the given identifier to the cache. It will be cached for a default amount of time. + * @param identifier The identifier to be added + */ + public void putId(String identifier) { + putId(identifier, null); + } + + /** + * Add the given identifier to the cache to be cached for the given time + * @param identifier The identifier to be added + * @param expiry A custom expiry time for the identifier. Can be null in which case, the default expiry is used. + */ + public void putId(String identifier, Instant expiry) { + if (identifier == null || "".equals(identifier)) { + return; + } + + cache.put(identifier, new EHCacheValue(identifier, expiry)); + } + + /** + * Return true if the given identifier is contained in the cache + * @param identifier The identifier to check + */ + public boolean contains(String identifier) { + if (cache == null) { + return false; + } + EHCacheValue element = cache.get(identifier); + return element != null; + } + + public synchronized void close() { + if (!cacheManager.isClosed()) { + cacheManager.destroyCache(CACHE_KEY); + cacheManager.close(); + } + } + + +} diff --git a/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/state/jcache/JCacheSPStateManager.java b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/state/jcache/JCacheSPStateManager.java new file mode 100644 index 00000000000..4932a5d0dd9 --- /dev/null +++ b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/state/jcache/JCacheSPStateManager.java @@ -0,0 +1,165 @@ +/** + * 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.cxf.rs.security.saml.sso.state.jcache; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; + +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.configuration.MutableConfiguration; +import javax.cache.spi.CachingProvider; + +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; +import org.apache.cxf.jaxrs.utils.ResourceUtils; +import org.apache.cxf.rs.security.saml.sso.state.RequestState; +import org.apache.cxf.rs.security.saml.sso.state.ResponseState; +import org.apache.cxf.rs.security.saml.sso.state.SPStateManager; +import org.apache.wss4j.common.util.Loader; + +/** + * An in-memory JCache based implementation of the SPStateManager interface. + * The default TTL is 5 minutes. + */ +public class JCacheSPStateManager implements SPStateManager { + + public static final String REQUEST_CACHE_KEY = "cxf.samlp.request.state.cache"; + public static final String RESPONSE_CACHE_KEY = "cxf.samlp.response.state.cache"; + private static final String DEFAULT_CONFIG_URL = "/cxf-samlp-jcache.xml"; + private static final org.slf4j.Logger LOG = + org.slf4j.LoggerFactory.getLogger(JCacheSPStateManager.class); + + private final Cache requestCache; + private final Cache responseCache; + private final CacheManager cacheManager; + + public JCacheSPStateManager() throws URISyntaxException { + this(DEFAULT_CONFIG_URL, null); + } + + public JCacheSPStateManager(Bus bus) throws URISyntaxException { + this(DEFAULT_CONFIG_URL, bus); + } + + public JCacheSPStateManager(String configFileURL) throws URISyntaxException { + this(configFileURL, null); + } + + public JCacheSPStateManager(String configFile, Bus bus) throws URISyntaxException { + if (bus == null) { + bus = BusFactory.getThreadDefaultBus(true); + } + + URL configFileURL = null; + try { + configFileURL = + ResourceUtils.getClasspathResourceURL(configFile, JCacheSPStateManager.class, bus); + } catch (Exception ex) { + // ignore + } + + final CachingProvider cachingProvider = Caching.getCachingProvider(); + + cacheManager = cachingProvider.getCacheManager( + getConfigFileURL(configFileURL).toURI(), + getClass().getClassLoader()); + + requestCache = getOrCreate(cacheManager, REQUEST_CACHE_KEY, String.class, RequestState.class); + responseCache = getOrCreate(cacheManager, RESPONSE_CACHE_KEY, String.class, ResponseState.class); + } + + private static Cache getOrCreate(CacheManager cacheManager, String name, + Class kclass, Class vclass) { + + final Cache cache = cacheManager.getCache(name, kclass, vclass); + if (cache != null) { + return cache; + } + + final MutableConfiguration cacheConfiguration = new MutableConfiguration<>(); + cacheConfiguration.setTypes(kclass, vclass); + + return cacheManager.createCache(name, cacheConfiguration); + } + + private URL getConfigFileURL(URL suppliedConfigFileURL) { + if (suppliedConfigFileURL == null) { + //using the default + try { + URL configFileURL = Loader.getResource(DEFAULT_CONFIG_URL); + if (configFileURL == null) { + configFileURL = new URL(DEFAULT_CONFIG_URL); + } + return configFileURL; + } catch (IOException e) { + // Do nothing + LOG.debug(e.getMessage()); + } + } + return suppliedConfigFileURL; + } + + public ResponseState getResponseState(String securityContextKey) { + return responseCache.get(securityContextKey); + } + + public ResponseState removeResponseState(String securityContextKey) { + ResponseState responseState = getResponseState(securityContextKey); + if (responseState != null) { + responseCache.remove(securityContextKey); + } + return responseState; + } + + public void setResponseState(String securityContextKey, ResponseState state) { + if (securityContextKey == null || "".equals(securityContextKey)) { + return; + } + + responseCache.put(securityContextKey, state); + } + + public void setRequestState(String relayState, RequestState state) { + if (relayState == null || "".equals(relayState)) { + return; + } + + requestCache.put(relayState, state); + } + + public RequestState removeRequestState(String relayState) { + RequestState state = requestCache.get(relayState); + if (state != null) { + requestCache.remove(relayState); + } + return state; + } + + public synchronized void close() throws IOException { + if (!cacheManager.isClosed()) { + cacheManager.destroyCache(REQUEST_CACHE_KEY); + cacheManager.destroyCache(RESPONSE_CACHE_KEY); + cacheManager.close(); + } + } + +} diff --git a/rt/rs/security/sso/saml/src/main/resources/cxf-samlp-ehcache.xml b/rt/rs/security/sso/saml/src/main/resources/cxf-samlp-ehcache.xml index f3b73551e4c..3991aa4f91d 100644 --- a/rt/rs/security/sso/saml/src/main/resources/cxf-samlp-ehcache.xml +++ b/rt/rs/security/sso/saml/src/main/resources/cxf-samlp-ehcache.xml @@ -1,4 +1,22 @@ + + + + + + + + + + + + + + + + java.lang.String + org.apache.wss4j.common.cache.EHCacheValue + + org.apache.wss4j.common.cache.EHCacheExpiry + + + 5000 + 10 + + + + + java.lang.String + org.apache.cxf.rs.security.saml.sso.state.RequestState + + 300 + + + 5000 + 10 + + + + + java.lang.String + org.apache.cxf.rs.security.saml.sso.state.ResponseState + + 300 + + + 5000 + 10 + + + + + diff --git a/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/SPStateManagerTest.java b/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/SPStateManagerTest.java index 802b46da6fa..73e588a18bb 100644 --- a/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/SPStateManagerTest.java +++ b/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/SPStateManagerTest.java @@ -30,6 +30,7 @@ import org.apache.cxf.rs.security.saml.sso.state.RequestState; import org.apache.cxf.rs.security.saml.sso.state.ResponseState; import org.apache.cxf.rs.security.saml.sso.state.SPStateManager; +import org.apache.cxf.rs.security.saml.sso.state.jcache.JCacheSPStateManager; import org.junit.After; import org.junit.Before; @@ -55,7 +56,7 @@ public SPStateManagerTest(Class stateManagerClass) { @Parameterized.Parameters(name = "{0}") public static Collection> data() { - return Arrays.asList(MemorySPStateManager.class, EHCacheSPStateManager.class); + return Arrays.asList(MemorySPStateManager.class, EHCacheSPStateManager.class, JCacheSPStateManager.class); } @Before diff --git a/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/TokenReplayCacheTest.java b/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/TokenReplayCacheTest.java index 66c8d9ced86..0b3731366b8 100644 --- a/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/TokenReplayCacheTest.java +++ b/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/TokenReplayCacheTest.java @@ -21,9 +21,15 @@ import java.time.Instant; import java.time.temporal.ChronoUnit; +import java.util.Arrays; +import java.util.Collection; import java.util.UUID; +import org.apache.cxf.rs.security.saml.sso.jcache.JCacheTokenReplayCache; + import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -31,12 +37,23 @@ /** * Some unit tests for the TokenReplayCache implementations */ +@RunWith(value = org.junit.runners.Parameterized.class) public class TokenReplayCacheTest { + private final Class> tokenReplayCacheClass; + + public TokenReplayCacheTest(Class> tokenReplayCacheClass) { + this.tokenReplayCacheClass = tokenReplayCacheClass; + } + + @Parameterized.Parameters(name = "{0}") + public static Collection>> data() { + return Arrays.asList(EHCacheTokenReplayCache.class, JCacheTokenReplayCache.class); + } @Test - public void testEhCacheTokenReplayCache() throws Exception { + public void testTokenReplayCacheTokenReplayCache() throws Exception { - TokenReplayCache replayCache = new EHCacheTokenReplayCache(); + TokenReplayCache replayCache = createCache(); testTokenReplayCacheInstance(replayCache); @@ -44,16 +61,16 @@ public void testEhCacheTokenReplayCache() throws Exception { } @Test - public void testEhCacheCloseCacheTwice() throws Exception { - TokenReplayCache replayCache = new EHCacheTokenReplayCache(); + public void testTokenReplayCacheCloseCacheTwice() throws Exception { + TokenReplayCache replayCache = createCache(); replayCache.close(); replayCache.close(); } // No expiry specified so it falls back to the default @Test - public void testEhCacheTokenReplayCacheNoExpirySpecified() throws Exception { - TokenReplayCache replayCache = new EHCacheTokenReplayCache(); + public void testTokenReplayCacheNoExpirySpecified() throws Exception { + TokenReplayCache replayCache = createCache(); String id = UUID.randomUUID().toString(); replayCache.putId(id); @@ -64,8 +81,8 @@ public void testEhCacheTokenReplayCacheNoExpirySpecified() throws Exception { // The negative expiry is rejected and it falls back to the default @Test - public void testEhCacheTokenReplayCacheNegativeExpiry() throws Exception { - TokenReplayCache replayCache = new EHCacheTokenReplayCache(); + public void testTokenReplayCacheNegativeExpiry() throws Exception { + TokenReplayCache replayCache = createCache(); String id = UUID.randomUUID().toString(); replayCache.putId(id, Instant.now().minusSeconds(100L)); @@ -76,8 +93,8 @@ public void testEhCacheTokenReplayCacheNegativeExpiry() throws Exception { // The huge expiry is rejected and it falls back to the default @Test - public void testEhCacheTokenReplayCacheHugeExpiry() throws Exception { - TokenReplayCache replayCache = new EHCacheTokenReplayCache(); + public void testTokenReplayCacheHugeExpiry() throws Exception { + TokenReplayCache replayCache = createCache(); String id = UUID.randomUUID().toString(); replayCache.putId(id, Instant.now().plus(14, ChronoUnit.HOURS)); @@ -105,4 +122,8 @@ private void testTokenReplayCacheInstance(TokenReplayCache replayCache) assertFalse(replayCache.contains(id)); } -} \ No newline at end of file + + private TokenReplayCache createCache() throws Exception { + return tokenReplayCacheClass.getDeclaredConstructor().newInstance(); + } +} diff --git a/rt/ws/security/pom.xml b/rt/ws/security/pom.xml index a806e4cecab..ac714c7dee3 100644 --- a/rt/ws/security/pom.xml +++ b/rt/ws/security/pom.xml @@ -97,6 +97,13 @@ jakarta compile + + org.ehcache.modules + ehcache-107 + ${cxf.ehcache3.version} + provided + true + org.apache.wss4j wss4j-ws-security-dom diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/jcache/CXFJCacheReplayCache.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/jcache/CXFJCacheReplayCache.java new file mode 100644 index 00000000000..e751ad8f39c --- /dev/null +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/jcache/CXFJCacheReplayCache.java @@ -0,0 +1,50 @@ +/** + * 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.cxf.ws.security.cache.jcache; + +import org.apache.cxf.Bus; +import org.apache.cxf.buslifecycle.BusLifeCycleListener; +import org.apache.cxf.buslifecycle.BusLifeCycleManager; +import org.apache.wss4j.common.ext.WSSecurityException; + +/** + * Wrap the default JCacheReplayCache in a BusLifeCycleListener, to make sure that + * the cache is shutdown correctly. + */ +public class CXFJCacheReplayCache extends JCacheReplayCache implements BusLifeCycleListener { + private final Bus bus; + + public CXFJCacheReplayCache(String key, Bus bus) throws WSSecurityException { + super(key); + this.bus = bus; + if (bus != null) { + bus.getExtension(BusLifeCycleManager.class).registerLifeCycleListener(this); + } + } + + @Override + public void close() { + super.close(); + + if (bus != null) { + bus.getExtension(BusLifeCycleManager.class).unregisterLifeCycleListener(this); + } + } +} diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/jcache/JCacheReplayCache.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/jcache/JCacheReplayCache.java new file mode 100644 index 00000000000..fca66a85512 --- /dev/null +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/cache/jcache/JCacheReplayCache.java @@ -0,0 +1,141 @@ +/** + * 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.cxf.ws.security.cache.jcache; + +import java.time.Instant; +import java.util.Objects; +import java.util.concurrent.TimeUnit; + +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.expiry.Duration; +import javax.cache.expiry.ExpiryPolicy; +import javax.cache.spi.CachingProvider; + +import org.apache.cxf.ws.security.utils.JCacheUtils; +import org.apache.wss4j.common.cache.EHCacheExpiry; +import org.apache.wss4j.common.cache.EHCacheValue; +import org.apache.wss4j.common.cache.ReplayCache; +import org.apache.wss4j.common.ext.WSSecurityException; + +/** + * An in-memory JCache based implementation of the ReplayCache interface. + * The default TTL is 60 minutes and the max TTL is 12 hours. + */ +class JCacheReplayCache implements ReplayCache { + private static final org.slf4j.Logger LOG = + org.slf4j.LoggerFactory.getLogger(JCacheReplayCache.class); + + private final Cache cache; + private final CacheManager cacheManager; + private final String key; + + JCacheReplayCache(String key) throws WSSecurityException { + this(key, 10000); + } + + JCacheReplayCache(String key, long heapEntries) throws WSSecurityException { + this.key = Objects.requireNonNull(key); + + // Do some checking on the arguments + try { + final CachingProvider cachingProvider = Caching.getCachingProvider(); + cacheManager = cachingProvider.getCacheManager(); + cache = JCacheUtils.getOrCreate(cacheManager, key, String.class, EHCacheValue.class, + cacheConfiguration -> cacheConfiguration.setExpiryPolicyFactory(() -> new ExpiryPolicy() { + @Override + public Duration getExpiryForCreation() { + return new Duration(TimeUnit.SECONDS, EHCacheExpiry.DEFAULT_TTL); + } + + @Override + public Duration getExpiryForAccess() { + return null; + } + + @Override + public Duration getExpiryForUpdate() { + return null; + } + })); + } catch (Exception ex) { + LOG.error("Error configuring JCacheReplayCache: {}", ex.getMessage()); + throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex, "replayCacheError"); + } + } + + /** + * Add the given identifier to the cache. It will be cached for a default amount of time. + * @param identifier The identifier to be added + */ + public void add(String identifier) { + add(identifier, null); + } + + /** + * Add the given identifier to the cache to be cached for the given time + * @param identifier The identifier to be added + * @param expiry A custom expiry time for the identifier. Can be null in which case, the default expiry is used. + */ + public void add(String identifier, Instant expiry) { + if (identifier == null || identifier.length() == 0) { + return; + } + + cache.put(identifier, new EHCacheValue(identifier, expiry)); + } + + /** + * Return true if the given identifier is contained in the cache + * @param identifier The identifier to check + */ + public boolean contains(String identifier) { + if (cache == null) { + return false; + } + EHCacheValue element = cache.get(identifier); + return element != null; + } + + // Only exposed for testing + EHCacheValue get(String identifier) { + return cache.get(identifier); + } + + @Override + public synchronized void close() { + if (!cacheManager.isClosed()) { + cacheManager.destroyCache(key); + cacheManager.close(); + } + } + + public void initComplete() { + } + + public void preShutdown() { + close(); + } + + public void postShutdown() { + close(); + } +} diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/TokenStoreFactory.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/TokenStoreFactory.java index 728fa3a5539..436508d79d1 100644 --- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/TokenStoreFactory.java +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/TokenStoreFactory.java @@ -20,36 +20,23 @@ package org.apache.cxf.ws.security.tokenstore; import org.apache.cxf.message.Message; +import org.apache.cxf.ws.security.tokenstore.jcache.JCacheTokenStoreFactory; +import org.apache.cxf.ws.security.utils.JCacheUtils; +import org.apache.wss4j.common.cache.WSS4JCacheUtil; /** * An abstract factory to return a TokenStore instance. It returns an EHCacheTokenStoreFactory * if EH-Cache is available. Otherwise it returns a MemoryTokenStoreFactory. */ public abstract class TokenStoreFactory { - - private static boolean ehCacheInstalled; - - static { - try { - Class cacheManagerClass = Class.forName("org.ehcache.CacheManager"); - if (cacheManagerClass != null) { - ehCacheInstalled = true; - } - } catch (Exception e) { - //ignore - } - } - - public static synchronized boolean isEhCacheInstalled() { - return ehCacheInstalled; - } - public static TokenStoreFactory newInstance() { - if (isEhCacheInstalled()) { + if (WSS4JCacheUtil.isEhCacheInstalled()) { return new EHCacheTokenStoreFactory(); + } else if (JCacheUtils.isJCacheInstalled()) { + return new JCacheTokenStoreFactory(); + } else { + return new MemoryTokenStoreFactory(); } - - return new MemoryTokenStoreFactory(); } public abstract TokenStore newTokenStore(String key, Message message) throws TokenStoreException; diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/jcache/JCacheTokenStore.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/jcache/JCacheTokenStore.java new file mode 100644 index 00000000000..a179c6ab302 --- /dev/null +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/jcache/JCacheTokenStore.java @@ -0,0 +1,131 @@ +/** + * 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.cxf.ws.security.tokenstore.jcache; + +import java.io.Closeable; +import java.net.URL; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.spi.CachingProvider; + +import org.apache.cxf.Bus; +import org.apache.cxf.buslifecycle.BusLifeCycleListener; +import org.apache.cxf.buslifecycle.BusLifeCycleManager; +import org.apache.cxf.common.util.StringUtils; +import org.apache.cxf.ws.security.tokenstore.SecurityToken; +import org.apache.cxf.ws.security.tokenstore.TokenStore; +import org.apache.cxf.ws.security.tokenstore.TokenStoreException; +import org.apache.cxf.ws.security.utils.JCacheUtils; + +/** + * An in-memory JCache implementation of the TokenStore interface. The default TTL is 60 minutes + * and the max TTL is 12 hours. + */ +public class JCacheTokenStore implements TokenStore, Closeable, BusLifeCycleListener { + private final Bus bus; + private final Cache cache; + private final CacheManager cacheManager; + private final String key; + + public JCacheTokenStore(String key, Bus b, URL configFileURL) throws TokenStoreException { + bus = b; + if (bus != null) { + b.getExtension(BusLifeCycleManager.class).registerLifeCycleListener(this); + } + + this.key = key; + try { + // Exclude the endpoint info bit added in TokenStoreUtils when getting the template name + String template = key; + if (template.contains("-")) { + template = key.substring(0, key.lastIndexOf('-')); + } + + final CachingProvider cachingProvider = Caching.getCachingProvider(); + cacheManager = cachingProvider.getCacheManager(configFileURL.toURI(), + SecurityToken.class.getClassLoader()); + cache = JCacheUtils.getOrCreate(cacheManager, key, String.class, SecurityToken.class); + } catch (Exception e) { + throw new TokenStoreException(e); + } + } + + public void add(SecurityToken token) { + if (token != null && !StringUtils.isEmpty(token.getId())) { + cache.put(token.getId(), token); + } + } + + public void add(String identifier, SecurityToken token) { + if (token != null && !StringUtils.isEmpty(identifier)) { + cache.put(identifier, token); + } + } + + public void remove(String identifier) { + if (cache != null && !StringUtils.isEmpty(identifier)) { + cache.remove(identifier); + } + } + + public Collection getTokenIdentifiers() { + if (cache == null) { + return null; + } + + // Not very efficient, but we are only using this method for testing + Set keys = new HashSet<>(); + for (Cache.Entry entry : cache) { + keys.add(entry.getKey()); + } + + return keys; + } + + public SecurityToken getToken(String identifier) { + if (cache == null) { + return null; + } + return cache.get(identifier); + } + + public synchronized void close() { + if (!cacheManager.isClosed()) { + cacheManager.destroyCache(key); + cacheManager.close(); + } + } + + public void initComplete() { + } + + public void preShutdown() { + close(); + } + + public void postShutdown() { + close(); + } +} diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/jcache/JCacheTokenStoreFactory.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/jcache/JCacheTokenStoreFactory.java new file mode 100644 index 00000000000..039b94912bb --- /dev/null +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/tokenstore/jcache/JCacheTokenStoreFactory.java @@ -0,0 +1,51 @@ +/** + * 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.cxf.ws.security.tokenstore.jcache; + +import java.net.URL; + +import org.apache.cxf.message.Message; +import org.apache.cxf.rt.security.utils.SecurityUtils; +import org.apache.cxf.ws.security.SecurityConstants; +import org.apache.cxf.ws.security.tokenstore.TokenStore; +import org.apache.cxf.ws.security.tokenstore.TokenStoreException; +import org.apache.cxf.ws.security.tokenstore.TokenStoreFactory; +import org.apache.wss4j.common.util.Loader; + + +/** + * A factory to return an JCacheTokenStore instance. + */ +public class JCacheTokenStoreFactory extends TokenStoreFactory { + + private static final String DEFAULT_CONFIG_FILE = "cxf-jcache.xml"; + + @Override + public TokenStore newTokenStore(String key, Message message) throws TokenStoreException { + URL configFileURL = SecurityUtils.getConfigFileURL(message, SecurityConstants.CACHE_CONFIG_FILE, + DEFAULT_CONFIG_FILE); + if (configFileURL == null) { + configFileURL = Loader.getResource(this.getClass().getClassLoader(), + DEFAULT_CONFIG_FILE); + } + return new JCacheTokenStore(key, message.getExchange().getBus(), configFileURL); + } + +} diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/utils/JCacheUtils.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/utils/JCacheUtils.java new file mode 100644 index 00000000000..223207695e8 --- /dev/null +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/utils/JCacheUtils.java @@ -0,0 +1,73 @@ +/** + * 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.cxf.ws.security.utils; + +import java.util.function.Function; +import java.util.logging.Logger; + +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.configuration.MutableConfiguration; + +import org.apache.cxf.common.logging.LogUtils; + +public final class JCacheUtils { + private static final Logger LOG = LogUtils.getL7dLogger(JCacheUtils.class); + private static final boolean JCACHE_INSTALLED; + + static { + boolean jcacheInstalled = false; + try { + final Class caching = Class.forName("javax.cache.Caching"); + if (caching != null) { + jcacheInstalled = true; + } + } catch (Exception e) { + LOG.fine("No JCache SPIs detected on classpath: " + e.getMessage()); + } + JCACHE_INSTALLED = jcacheInstalled; + } + + private JCacheUtils() { + } + + public static Cache getOrCreate(CacheManager cacheManager, String name, Class kclass, + Class vclass) { + return getOrCreate(cacheManager, name, kclass, vclass, Function.identity()); + } + + public static Cache getOrCreate(CacheManager cacheManager, String name, Class kclass, + Class vclass, Function, MutableConfiguration> customizer) { + + final Cache cache = cacheManager.getCache(name, kclass, vclass); + if (cache != null) { + return cache; + } + + MutableConfiguration cacheConfiguration = new MutableConfiguration<>(); + cacheConfiguration = customizer.apply(cacheConfiguration.setTypes(kclass, vclass)); + + return cacheManager.createCache(name, cacheConfiguration); + } + + public static boolean isJCacheInstalled() { + return JCACHE_INSTALLED; + } + +} diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java index b2eda68c502..df6f1b7f1f4 100644 --- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/wss4j/WSS4JUtils.java @@ -47,9 +47,11 @@ import org.apache.cxf.service.model.EndpointInfo; import org.apache.cxf.ws.security.SecurityConstants; import org.apache.cxf.ws.security.cache.CXFEHCacheReplayCache; +import org.apache.cxf.ws.security.cache.jcache.CXFJCacheReplayCache; import org.apache.cxf.ws.security.tokenstore.SecurityToken; import org.apache.cxf.ws.security.tokenstore.TokenStoreException; import org.apache.cxf.ws.security.tokenstore.TokenStoreUtils; +import org.apache.cxf.ws.security.utils.JCacheUtils; import org.apache.wss4j.common.cache.MemoryReplayCache; import org.apache.wss4j.common.cache.ReplayCache; import org.apache.wss4j.common.cache.WSS4JCacheUtil; @@ -146,6 +148,9 @@ public static ReplayCache getReplayCache( throw new WSSecurityException(WSSecurityException.ErrorCode.FAILURE, ex); } replayCache = new CXFEHCacheReplayCache(cacheKey, bus, diskstoreParent); + } else if (JCacheUtils.isJCacheInstalled()) { + Bus bus = message.getExchange().getBus(); + replayCache = new CXFJCacheReplayCache(cacheKey, bus); } else { replayCache = new MemoryReplayCache(); } diff --git a/rt/ws/security/src/main/resources/cxf-ehcache.xml b/rt/ws/security/src/main/resources/cxf-ehcache.xml index eedfa20f139..c8238c712d0 100644 --- a/rt/ws/security/src/main/resources/cxf-ehcache.xml +++ b/rt/ws/security/src/main/resources/cxf-ehcache.xml @@ -1,4 +1,22 @@ + + + + + + + + + + + + + java.lang.String + org.apache.cxf.ws.security.tokenstore.SecurityToken + + 3600 + + + 10000 + + + + diff --git a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/tokenstore/TokenStoreTest.java b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/tokenstore/TokenStoreTest.java index 506bb78a676..44707bb1471 100644 --- a/rt/ws/security/src/test/java/org/apache/cxf/ws/security/tokenstore/TokenStoreTest.java +++ b/rt/ws/security/src/test/java/org/apache/cxf/ws/security/tokenstore/TokenStoreTest.java @@ -25,11 +25,14 @@ import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageImpl; import org.apache.cxf.ws.security.SecurityConstants; +import org.apache.cxf.ws.security.tokenstore.jcache.JCacheTokenStoreFactory; import org.apache.xml.security.utils.ClassLoaderUtils; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.collection.IsCollectionWithSize.hasSize; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -46,14 +49,13 @@ public TokenStoreTest(TokenStore store) { @Parameterized.Parameters(name = "{0}") public static Collection data() throws TokenStoreException { Message message = new MessageImpl(); - message.put( - SecurityConstants.CACHE_CONFIG_FILE, - ClassLoaderUtils.getResource("cxf-ehcache.xml", TokenStoreTest.class) - ); message.setExchange(new ExchangeImpl()); return Arrays.asList( new MemoryTokenStoreFactory().newTokenStore(SecurityConstants.TOKEN_STORE_CACHE_INSTANCE, message), - new EHCacheTokenStoreFactory().newTokenStore(SecurityConstants.TOKEN_STORE_CACHE_INSTANCE, message) + new EHCacheTokenStoreFactory().newTokenStore(SecurityConstants.TOKEN_STORE_CACHE_INSTANCE, + withConfigFile(message, "cxf-ehcache.xml")), + new JCacheTokenStoreFactory().newTokenStore(SecurityConstants.TOKEN_STORE_CACHE_INSTANCE, + withConfigFile(message, "cxf-jcache.xml")) ); } @@ -84,7 +86,7 @@ public void testTokenRemove() { store.add(token1); store.add(token2); store.add(token3); - assertTrue(store.getTokenIdentifiers().size() == 3); + assertThat(store.getTokenIdentifiers(), hasSize(3)); store.remove(token3.getId()); assertNull(store.getToken("test3")); store.remove(token1.getId()); @@ -92,4 +94,11 @@ public void testTokenRemove() { assertTrue(store.getTokenIdentifiers().isEmpty()); } + private static Message withConfigFile(Message message, String configFile) { + message.put( + SecurityConstants.CACHE_CONFIG_FILE, + ClassLoaderUtils.getResource(configFile, TokenStoreTest.class) + ); + return message; + } } diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/jcache/JCacheIdentityCache.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/jcache/JCacheIdentityCache.java new file mode 100644 index 00000000000..cf58dde1cec --- /dev/null +++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/cache/jcache/JCacheIdentityCache.java @@ -0,0 +1,182 @@ +/** + * 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.cxf.sts.cache.jcache; + +import java.io.Closeable; +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; + +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.spi.CachingProvider; +import javax.management.JMException; +import javax.management.ObjectName; + +import org.apache.cxf.Bus; +import org.apache.cxf.buslifecycle.BusLifeCycleListener; +import org.apache.cxf.buslifecycle.BusLifeCycleManager; +import org.apache.cxf.common.classloader.ClassLoaderUtils; +import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.management.InstrumentationManager; +import org.apache.cxf.management.ManagementConstants; +import org.apache.cxf.management.annotation.ManagedOperation; +import org.apache.cxf.management.annotation.ManagedResource; +import org.apache.cxf.resource.ResourceManager; +import org.apache.cxf.sts.IdentityMapper; +import org.apache.cxf.sts.cache.AbstractIdentityCache; +import org.apache.cxf.sts.cache.EHCacheIdentityValue; +import org.apache.cxf.ws.security.tokenstore.TokenStoreFactory; +import org.apache.cxf.ws.security.utils.JCacheUtils; + +/** + * A JCache based cache to cache identities in different realms where + * the relationship is of type FederateIdentity. + */ +@ManagedResource() +public class JCacheIdentityCache extends AbstractIdentityCache + implements Closeable, BusLifeCycleListener { + + private static final Logger LOG = LogUtils.getL7dLogger(JCacheIdentityCache.class); + private static final String KEY = "org.apache.cxf.sts.cache.EHCacheIdentityCache"; + private Cache cache; + private final CacheManager cacheManager; + + + public JCacheIdentityCache( + IdentityMapper identityMapper, Bus b + ) { + this(identityMapper, JCacheIdentityCache.class.getName(), b, null); + } + + public JCacheIdentityCache(IdentityMapper identityMapper, String key, Bus b, URL configFileURL) { + this(Caching.getCachingProvider(), identityMapper, key, b, configFileURL); + } + + JCacheIdentityCache(CachingProvider cachingProvider, IdentityMapper identityMapper, + String key, Bus b, URL configFileURL) { + super(b, identityMapper); + if (b != null) { + b.getExtension(BusLifeCycleManager.class).registerLifeCycleListener(this); + InstrumentationManager im = b.getExtension(InstrumentationManager.class); + if (im != null) { + try { + im.register(this); + } catch (JMException e) { + LOG.log(Level.WARNING, "Registering JCacheIdentityCache failed.", e); + } + } + } + + final URL xmlConfigURL = configFileURL != null ? configFileURL : getDefaultConfigFileURL(); + try { + cacheManager = cachingProvider.getCacheManager(xmlConfigURL.toURI(), getClass().getClassLoader()); + cache = JCacheUtils.getOrCreate(cacheManager, KEY, String.class, EHCacheIdentityValue.class); + } catch (final URISyntaxException ex) { + throw new IllegalStateException("Unable to convert " + xmlConfigURL + " to URI", ex); + } + } + + @Override + public void add(String user, String realm, Map identities) { + cache.put(user + "@" + realm, new EHCacheIdentityValue(identities)); + } + + @ManagedOperation() + @Override + public Map get(String user, String realm) { + EHCacheIdentityValue value = cache.get(user + "@" + realm); + if (value != null) { + return value.getValue(); + } + + return null; + } + + @Override + public void remove(String user, String realm) { + cache.remove(user + "@" + realm); + } + + @ManagedOperation() + public String getContent() { + return this.cache.toString(); + } + + public synchronized void close() { + if (!cacheManager.isClosed()) { + cacheManager.destroyCache(KEY); + cacheManager.close(); + + if (super.getBus() != null) { + super.getBus().getExtension(BusLifeCycleManager.class).unregisterLifeCycleListener(this); + } + } + } + + public void initComplete() { + } + + public void preShutdown() { + close(); + } + + public void postShutdown() { + close(); + } + + private URL getDefaultConfigFileURL() { + URL url = null; + if (super.getBus() != null) { + ResourceManager rm = super.getBus().getExtension(ResourceManager.class); + url = rm.resolveResource("sts-jcache.xml", URL.class); + } + try { + if (url == null) { + url = ClassLoaderUtils.getResource("sts-jcache.xml", TokenStoreFactory.class); + } + if (url == null) { + url = new URL("sts-jcache.xml"); + } + return url; + } catch (IOException e) { + // Do nothing + } + return null; + } + + public ObjectName getObjectName() throws JMException { + StringBuilder buffer = new StringBuilder(128); + buffer.append(ManagementConstants.DEFAULT_DOMAIN_NAME).append(':'); + if (super.getBus() != null) { + buffer.append( + ManagementConstants.BUS_ID_PROP).append('=').append(super.getBus().getId()).append(','); + } + buffer.append(ManagementConstants.TYPE_PROP).append('=').append("EHCacheIdentityCache").append(','); + buffer.append(ManagementConstants.NAME_PROP).append('=') + .append("EHCacheIdentityCache-").append(System.identityHashCode(this)); + return new ObjectName(buffer.toString()); + } +} + diff --git a/services/sts/sts-core/src/main/resources/sts-ehcache.xml b/services/sts/sts-core/src/main/resources/sts-ehcache.xml index c1a307f44a7..b5409540fca 100644 --- a/services/sts/sts-core/src/main/resources/sts-ehcache.xml +++ b/services/sts/sts-core/src/main/resources/sts-ehcache.xml @@ -1,4 +1,22 @@ + + + + + + + + java.lang.String + org.apache.cxf.sts.cache.EHCacheIdentityValue + + 3600 + + + 5000 + 10 + + + + + diff --git a/services/sts/sts-core/src/test/java/org/apache/cxf/sts/cache/jcache/JCacheIdentityCacheTest.java b/services/sts/sts-core/src/test/java/org/apache/cxf/sts/cache/jcache/JCacheIdentityCacheTest.java new file mode 100644 index 00000000000..c69dee6163f --- /dev/null +++ b/services/sts/sts-core/src/test/java/org/apache/cxf/sts/cache/jcache/JCacheIdentityCacheTest.java @@ -0,0 +1,37 @@ +/** + * 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.cxf.sts.cache.jcache; + +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; +import org.apache.cxf.sts.IdentityMapper; +import org.apache.cxf.sts.cache.AbstractIdentityCache; +import org.apache.cxf.sts.cache.MemoryIdentityCacheTest; +import org.ehcache.jsr107.EhcacheCachingProvider; + +public class JCacheIdentityCacheTest extends MemoryIdentityCacheTest { + + @Override + protected AbstractIdentityCache getIdentityCache(IdentityMapper mapper) { + Bus bus = BusFactory.getDefaultBus(); + return new JCacheIdentityCache(new EhcacheCachingProvider(), mapper, + JCacheIdentityCache.class.getName(), bus, null); + } + +} diff --git a/services/xkms/xkms-client/src/main/java/org/apache/cxf/xkms/cache/jcache/JCacheXKMSClientCache.java b/services/xkms/xkms-client/src/main/java/org/apache/cxf/xkms/cache/jcache/JCacheXKMSClientCache.java new file mode 100644 index 00000000000..c1c078d139a --- /dev/null +++ b/services/xkms/xkms-client/src/main/java/org/apache/cxf/xkms/cache/jcache/JCacheXKMSClientCache.java @@ -0,0 +1,124 @@ +/** + * 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.cxf.xkms.cache.jcache; + +import java.util.UUID; +import java.util.concurrent.TimeUnit; + +import javax.cache.Cache; +import javax.cache.CacheManager; +import javax.cache.Caching; +import javax.cache.expiry.Duration; +import javax.cache.expiry.ExpiryPolicy; +import javax.cache.spi.CachingProvider; + +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; +import org.apache.cxf.buslifecycle.BusLifeCycleListener; +import org.apache.cxf.buslifecycle.BusLifeCycleManager; +import org.apache.cxf.ws.security.utils.JCacheUtils; +import org.apache.cxf.xkms.cache.XKMSCacheToken; +import org.apache.cxf.xkms.cache.XKMSClientCache; +import org.apache.cxf.xkms.cache.XKMSClientCacheException; + +/** + * An in-memory JCache implementation of the XKMSClientCache interface. + */ +public class JCacheXKMSClientCache implements XKMSClientCache, BusLifeCycleListener { + private final Cache cache; + private final CacheManager cacheManager; + private final Bus bus; + private final String cacheKey; + + public JCacheXKMSClientCache() throws XKMSClientCacheException { + this(null); + } + + public JCacheXKMSClientCache(Bus cxfBus) throws XKMSClientCacheException { + if (cxfBus == null) { + cxfBus = BusFactory.getThreadDefaultBus(true); + } + if (cxfBus != null) { + cxfBus.getExtension(BusLifeCycleManager.class).registerLifeCycleListener(this); + } + + this.bus = cxfBus; + this.cacheKey = UUID.randomUUID().toString(); + + final CachingProvider cachingProvider = Caching.getCachingProvider(); + cacheManager = cachingProvider.getCacheManager(); + + cache = JCacheUtils.getOrCreate(cacheManager, cacheKey, String.class, XKMSCacheToken.class, + cacheConfiguration -> cacheConfiguration.setExpiryPolicyFactory(() -> new ExpiryPolicy() { + @Override + public Duration getExpiryForCreation() { + return new Duration(TimeUnit.SECONDS, 3600); + } + + @Override + public Duration getExpiryForAccess() { + return null; + } + + @Override + public Duration getExpiryForUpdate() { + return new Duration(TimeUnit.SECONDS, 3600); + } + }).setStoreByValue(false)); + + } + + /** + * Store an XKMSCacheToken in the Cache using the given key + */ + public void put(String key, XKMSCacheToken cacheToken) { + cache.put(key, cacheToken); + } + + /** + * Get an XKMSCacheToken from the cache matching the given key. Returns null if there + * is no such XKMSCacheToken in the cache. + */ + public XKMSCacheToken get(String key) { + return cache.get(key); + } + + public synchronized void close() { + if (!cacheManager.isClosed()) { + cacheManager.destroyCache(cacheKey); + cacheManager.close(); + + if (bus != null) { + bus.getExtension(BusLifeCycleManager.class).unregisterLifeCycleListener(this); + } + } + } + + public void initComplete() { + } + + public void preShutdown() { + close(); + } + + public void postShutdown() { + close(); + } +} diff --git a/services/xkms/xkms-client/src/test/java/org/apache/cxf/xkms/cache/XKMSClientCacheTest.java b/services/xkms/xkms-client/src/test/java/org/apache/cxf/xkms/cache/XKMSClientCacheTest.java index e5dcabab6e1..b9ea506e4a7 100644 --- a/services/xkms/xkms-client/src/test/java/org/apache/cxf/xkms/cache/XKMSClientCacheTest.java +++ b/services/xkms/xkms-client/src/test/java/org/apache/cxf/xkms/cache/XKMSClientCacheTest.java @@ -22,8 +22,14 @@ import java.math.BigInteger; import java.security.KeyStore; import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Collection; import org.apache.cxf.common.classloader.ClassLoaderUtils; +import org.apache.cxf.xkms.cache.jcache.JCacheXKMSClientCache; + +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -33,14 +39,15 @@ /** * A test for the XKMSClientCache */ +@RunWith(value = org.junit.runners.Parameterized.class) public class XKMSClientCacheTest { private final XKMSClientCache cache; - private final X509Certificate alice; - private final X509Certificate bob; + private X509Certificate alice; + private X509Certificate bob; - public XKMSClientCacheTest() throws Exception { - cache = new EHCacheXKMSClientCache(); + public XKMSClientCacheTest(XKMSClientCache cache) throws Exception { + this.cache = cache; KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); keystore.load(ClassLoaderUtils.getResourceAsStream("keys/alice.jks", @@ -55,6 +62,11 @@ public XKMSClientCacheTest() throws Exception { bob = (X509Certificate)keystore.getCertificate("bob"); } + @Parameterized.Parameters(name = "{0}") + public static Collection cache() throws XKMSClientCacheException { + return Arrays.asList(new EHCacheXKMSClientCache(), new JCacheXKMSClientCache()); + } + @org.junit.Test public void testCache() { assertNotNull(alice); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookCxfContinuationStore.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookCxfContinuationStore.java index 1dae72a693d..fc20076fcfa 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookCxfContinuationStore.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/BookCxfContinuationStore.java @@ -24,6 +24,7 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.ArrayBlockingQueue; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executor; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -40,7 +41,6 @@ import org.apache.cxf.jaxrs.impl.UriInfoImpl; import org.apache.cxf.message.Message; import org.apache.cxf.phase.PhaseInterceptorChain; -import org.ehcache.impl.internal.concurrent.ConcurrentHashMap; @Path("/bookstore") public class BookCxfContinuationStore { diff --git a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/cache/CachingTest.java b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/cache/CachingTest.java index e15fa649acb..fbe3cbc640c 100644 --- a/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/cache/CachingTest.java +++ b/systests/ws-security/src/test/java/org/apache/cxf/systest/ws/cache/CachingTest.java @@ -20,8 +20,6 @@ package org.apache.cxf.systest.ws.cache; import java.net.URL; -import java.util.Arrays; -import java.util.Collection; import java.util.Random; import javax.xml.namespace.QName; @@ -40,6 +38,8 @@ import org.apache.cxf.ws.security.SecurityConstants; import org.apache.cxf.ws.security.tokenstore.EHCacheTokenStore; import org.apache.cxf.ws.security.tokenstore.TokenStore; +import org.apache.cxf.ws.security.tokenstore.TokenStoreException; +import org.apache.cxf.ws.security.tokenstore.jcache.JCacheTokenStore; import org.example.contract.doubleit.DoubleItPortType; import org.junit.BeforeClass; @@ -59,11 +59,18 @@ public class CachingTest extends AbstractBusClientServerTestBase { private static final String NAMESPACE = "http://www.example.org/contract/DoubleIt"; private static final QName SERVICE_QNAME = new QName(NAMESPACE, "DoubleItService"); + + @FunctionalInterface + private interface TokenStoreCacheFactory { + TokenStore create(String key, Bus b) throws TokenStoreException; + } - final TestParam test; + private final TestParam test; + private final TokenStoreCacheFactory factory; - public CachingTest(TestParam type) { + public CachingTest(TestParam type, TokenStoreCacheFactory factory) { this.test = type; + this.factory = factory; } @BeforeClass @@ -76,12 +83,18 @@ public static void startServers() throws Exception { ); } - @Parameters(name = "{0}") - public static Collection data() { - - return Arrays.asList(new TestParam[] {new TestParam(PORT, false), - new TestParam(PORT, true), - }); + @Parameters(name = "{0},{1}") + public static Object[][] data() { + return new Object[][] { + {new TestParam(PORT, false), (TokenStoreCacheFactory) (String key, Bus b) -> + new EHCacheTokenStore(key, b, ClassLoaderUtils.getResource("cxf-ehcache.xml", CachingTest.class))}, + {new TestParam(PORT, false), (TokenStoreCacheFactory) (String key, Bus b) -> + new JCacheTokenStore(key, b, ClassLoaderUtils.getResource("cxf-jcache.xml", CachingTest.class))}, + {new TestParam(PORT, true), (TokenStoreCacheFactory) (String key, Bus b) -> + new EHCacheTokenStore(key, b, ClassLoaderUtils.getResource("cxf-ehcache.xml", CachingTest.class))}, + {new TestParam(PORT, true), (TokenStoreCacheFactory) (String key, Bus b) -> + new JCacheTokenStore(key, b, ClassLoaderUtils.getResource("cxf-jcache.xml", CachingTest.class))} + }; } @org.junit.AfterClass @@ -174,8 +187,7 @@ public void testSymmetricSharedCache() throws Exception { // Create shared cache String cacheKey = SecurityConstants.TOKEN_STORE_CACHE_INSTANCE + '-' + Math.abs(new Random().nextInt()); - TokenStore tokenStore = new EHCacheTokenStore(cacheKey, bus, - ClassLoaderUtils.getResource("cxf-ehcache.xml", this.getClass())); + TokenStore tokenStore = factory.create(cacheKey, bus); Client client = ClientProxy.getClient(port); client.getEndpoint().getEndpointInfo().setProperty(SecurityConstants.TOKEN_STORE_CACHE_INSTANCE, tokenStore); From dd3ce33c2ccbec205c06b44f8886710561e272ec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:30:54 -0500 Subject: [PATCH 355/430] Bump cxf.hibernate.em.version from 6.6.4.Final to 6.6.5.Final (#2230) Bumps `cxf.hibernate.em.version` from 6.6.4.Final to 6.6.5.Final. Updates `org.hibernate.orm:hibernate-core` from 6.6.4.Final to 6.6.5.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.5/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.4...6.6.5) Updates `org.hibernate.orm:hibernate-jcache` from 6.6.4.Final to 6.6.5.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.5/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.4...6.6.5) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.hibernate.orm:hibernate-jcache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 4b9f58be579..06d4fad9278 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -120,7 +120,7 @@ 2.0.1 3.0 5.5.0 - 6.6.4.Final + 6.6.5.Final 8.0.2.Final 2.7.4 [4.0,4.2) From f4e2acbd708bfd38f2d9efa8ecfdad15d3e07352 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 20 Jan 2025 09:31:09 -0500 Subject: [PATCH 356/430] Bump org.assertj:assertj-core from 3.27.2 to 3.27.3 (#2229) Bumps [org.assertj:assertj-core](https://github.com/assertj/assertj) from 3.27.2 to 3.27.3. - [Release notes](https://github.com/assertj/assertj/releases) - [Commits](https://github.com/assertj/assertj/compare/assertj-build-3.27.2...assertj-build-3.27.3) --- updated-dependencies: - dependency-name: org.assertj:assertj-core dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 06d4fad9278..82fa75fcf1a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -92,7 +92,7 @@ 1.8.1.Final 3.0.2.Final 1.9.22.1 - 3.27.2 + 3.27.3 [3.0, 4.0) 3.0.13 1.77 From 0623a227b1000e4d93ba41d894df37dc591942e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 21 Jan 2025 07:39:03 -0500 Subject: [PATCH 357/430] Bump org.owasp:dependency-check-maven from 12.0.0 to 12.0.1 (#2231) Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 12.0.0 to 12.0.1. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v12.0.0...v12.0.1) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f6da86dda0c..38b422ada7e 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 17 UTF-8 scp://people.apache.org/www/cxf.apache.org/maven-site - 12.0.0 + 12.0.1 clean install From b82c4bb038477427f4516bb6ffc9271c6ca8e517 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 20 Jan 2025 21:02:50 -0500 Subject: [PATCH 358/430] CXF-8765: Option to remove Ehcache (enhance JCache API and providers presence detection in JCacheUtils) --- .../org/apache/cxf/ws/security/utils/JCacheUtils.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/utils/JCacheUtils.java b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/utils/JCacheUtils.java index 223207695e8..dcbe901b516 100644 --- a/rt/ws/security/src/main/java/org/apache/cxf/ws/security/utils/JCacheUtils.java +++ b/rt/ws/security/src/main/java/org/apache/cxf/ws/security/utils/JCacheUtils.java @@ -18,6 +18,8 @@ */ package org.apache.cxf.ws.security.utils; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; import java.util.function.Function; import java.util.logging.Logger; @@ -35,10 +37,14 @@ public final class JCacheUtils { boolean jcacheInstalled = false; try { final Class caching = Class.forName("javax.cache.Caching"); + final Class cachingProvider = Class.forName("javax.cache.spi.CachingProvider"); if (caching != null) { - jcacheInstalled = true; + jcacheInstalled = MethodHandles + .publicLookup() + .findStatic(caching, "getCachingProvider", MethodType.methodType(cachingProvider)) + .invoke() != null; } - } catch (Exception e) { + } catch (Throwable e) { LOG.fine("No JCache SPIs detected on classpath: " + e.getMessage()); } JCACHE_INSTALLED = jcacheInstalled; From c6e08c3e9d51c777ddd1ec16434d4903850cf0e7 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Wed, 22 Jan 2025 13:49:55 -0500 Subject: [PATCH 359/430] [CXF-9101]Invalid api visibility in CXFHttpRequest --- .../http/asyncclient/AsyncWrappedOutputStreamBase.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java index 66e5b241982..4335fe036a9 100644 --- a/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java +++ b/rt/transports/http-hc/src/main/java/org/apache/cxf/transport/http/asyncclient/AsyncWrappedOutputStreamBase.java @@ -24,7 +24,7 @@ import org.apache.cxf.io.CopyingOutputStream; import org.apache.http.HttpResponse; -interface AsyncWrappedOutputStreamBase +public interface AsyncWrappedOutputStreamBase extends CopyingOutputStream, WritableByteChannel { boolean retransmitable(); From 16f424fa4cafb6f0adb0feb25220888538ab1bff Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 22 Jan 2025 18:51:31 -0500 Subject: [PATCH 360/430] Bump org.jruby:jruby from 9.4.9.0 to 9.4.10.0 (#2232) Bumps org.jruby:jruby from 9.4.9.0 to 9.4.10.0. --- updated-dependencies: - dependency-name: org.jruby:jruby dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../src/main/release/samples/ruby_spring_support/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/ruby_spring_support/pom.xml b/distribution/src/main/release/samples/ruby_spring_support/pom.xml index 6ae694339cf..a9558a46a96 100644 --- a/distribution/src/main/release/samples/ruby_spring_support/pom.xml +++ b/distribution/src/main/release/samples/ruby_spring_support/pom.xml @@ -124,7 +124,7 @@ org.jruby jruby - 9.4.9.0 + 9.4.10.0 org.springframework From d3e9380d315a8dd4ecc2cc6800596b4ac217c245 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Jan 2025 08:58:20 -0500 Subject: [PATCH 361/430] Bump cxf.spring.boot.version from 3.4.1 to 3.4.2 (#2233) Bumps `cxf.spring.boot.version` from 3.4.1 to 3.4.2. Updates `org.springframework.boot:spring-boot` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-autoconfigure` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-autoconfigure-processor` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-configuration-processor` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-starter` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-starter-web` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-starter-validation` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-starter-actuator` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-test` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-starter-logging` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-starter-test` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) Updates `org.springframework.boot:spring-boot-actuator-autoconfigure` from 3.4.1 to 3.4.2 - [Release notes](https://github.com/spring-projects/spring-boot/releases) - [Commits](https://github.com/spring-projects/spring-boot/compare/v3.4.1...v3.4.2) --- updated-dependencies: - dependency-name: org.springframework.boot:spring-boot dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-autoconfigure dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-autoconfigure-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-configuration-processor dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-starter dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-starter-web dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-starter-validation dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-starter-actuator dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-test dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-starter-logging dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-starter-test dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.boot:spring-boot-actuator-autoconfigure dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index eb904263e98..977a5728b80 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -31,7 +31,7 @@ true UTF-8 - 3.4.1 + 3.4.2 4.2.0 12.0.16 4.1.117.Final diff --git a/parent/pom.xml b/parent/pom.xml index 82fa75fcf1a..dfe728b01a0 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -210,7 +210,7 @@ 2.0.16 2.3 2.3_2 - 3.4.1 + 3.4.2 3.2.10 spring-test 6.4.2 From e4fb9d2be13fd1a2824a645a23a8e18242fd6b66 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Mon, 27 Jan 2025 13:17:28 -0500 Subject: [PATCH 362/430] [CXF-9095]Connection Leak in HttpClientWrappedOutputStream due to Unreleased Resources on IOException --- .../transport/http/HttpClientHTTPConduit.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java index f3190348d92..82d469e86e7 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HttpClientHTTPConduit.java @@ -821,17 +821,30 @@ class HttpClientWrappedOutputStream extends WrappedOutputStream { @Override public void close() throws IOException { - super.close(); - if (pout != null) { - pout.close(); - pout = null; - } - if (publisher != null) { - publisher.close(); - publisher = null; + try { + super.close(); + } finally { + if (pout != null) { + try { + pout.close(); + } catch (IOException e) { + logStackTrace(e); + } + pout = null; + } + if (publisher != null) { + try { + publisher.close(); + } catch (IOException e) { + logStackTrace(e); + } + publisher = null; + } + request = null; + subscribers = null; } - request = null; - subscribers = null; + + } void addSubscriber(Flow.Subscriber subscriber) { subscribers.add(subscriber); From 7a2b328a83cbf10ddf8f0d9c7aafd29d8fbc3b89 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 14:47:21 -0500 Subject: [PATCH 363/430] Bump github/codeql-action from 3.28.1 to 3.28.5 (#2235) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.1 to 3.28.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/b6a472f63d85b9c78a3ac5e89422239fc15e9b3c...f6091c0113d1dcf9b98e269ee48e8a7e51b7bdd4) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index bb2fc3ff544..76e9ac8708a 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 + uses: github/codeql-action/init@f6091c0113d1dcf9b98e269ee48e8a7e51b7bdd4 # v3.28.5 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c # v3.28.1 + uses: github/codeql-action/analyze@f6091c0113d1dcf9b98e269ee48e8a7e51b7bdd4 # v3.28.5 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 774ec89aaef..cdef2741f00 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@b6a472f63d85b9c78a3ac5e89422239fc15e9b3c #tag=v2 + uses: github/codeql-action/upload-sarif@f6091c0113d1dcf9b98e269ee48e8a7e51b7bdd4 #tag=v2 with: sarif_file: results.sarif From eff3da72bd62ec0298252b729e1d310579c4f844 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 27 Jan 2025 14:47:34 -0500 Subject: [PATCH 364/430] Bump com.puppycrawl.tools:checkstyle from 10.21.1 to 10.21.2 (#2236) Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.21.1 to 10.21.2. - [Release notes](https://github.com/checkstyle/checkstyle/releases) - [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.21.1...checkstyle-10.21.2) --- updated-dependencies: - dependency-name: com.puppycrawl.tools:checkstyle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index dfe728b01a0..425a20fe092 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -392,7 +392,7 @@ com.puppycrawl.tools checkstyle - 10.21.1 + 10.21.2 From d2db1163335edfa5805042e3cc78a100fb41963a Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 28 Jan 2025 21:11:42 -0500 Subject: [PATCH 365/430] Fix GraalVM reflect-config.json for samples --- .../jaxws_graalvm_dynamic_client/reflect-config.json | 3 +++ .../jaxws_graalvm_dynamic_server/reflect-config.json | 3 +++ 2 files changed, 6 insertions(+) diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/src/main/resources/META-INF/native-image/org.apache.cxf.samples/jaxws_graalvm_dynamic_client/reflect-config.json b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/src/main/resources/META-INF/native-image/org.apache.cxf.samples/jaxws_graalvm_dynamic_client/reflect-config.json index a4a14883f30..22e7e4d30d6 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/src/main/resources/META-INF/native-image/org.apache.cxf.samples/jaxws_graalvm_dynamic_client/reflect-config.json +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/src/main/resources/META-INF/native-image/org.apache.cxf.samples/jaxws_graalvm_dynamic_client/reflect-config.json @@ -692,5 +692,8 @@ { "name":"sun.security.provider.SHA", "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"org.apache.cxf.io.DelayedCachedOutputStreamCleaner" } ] diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/src/main/resources/META-INF/native-image/org.apache.cxf.samples/jaxws_graalvm_dynamic_server/reflect-config.json b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/src/main/resources/META-INF/native-image/org.apache.cxf.samples/jaxws_graalvm_dynamic_server/reflect-config.json index 31b014f11b9..fdbe8f67a94 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/src/main/resources/META-INF/native-image/org.apache.cxf.samples/jaxws_graalvm_dynamic_server/reflect-config.json +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/src/main/resources/META-INF/native-image/org.apache.cxf.samples/jaxws_graalvm_dynamic_server/reflect-config.json @@ -1005,5 +1005,8 @@ { "name":"sun.security.provider.SHA", "methods":[{"name":"","parameterTypes":[] }] +}, +{ + "name":"org.apache.cxf.io.DelayedCachedOutputStreamCleaner" } ] From f3c8a562692171d86f0b6ca12628fc62313491f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 12:15:51 -0500 Subject: [PATCH 366/430] Bump org.jruby:jruby from 9.4.10.0 to 9.4.11.0 (#2239) Bumps org.jruby:jruby from 9.4.10.0 to 9.4.11.0. --- updated-dependencies: - dependency-name: org.jruby:jruby dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../src/main/release/samples/ruby_spring_support/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/ruby_spring_support/pom.xml b/distribution/src/main/release/samples/ruby_spring_support/pom.xml index a9558a46a96..54c544a0873 100644 --- a/distribution/src/main/release/samples/ruby_spring_support/pom.xml +++ b/distribution/src/main/release/samples/ruby_spring_support/pom.xml @@ -124,7 +124,7 @@ org.jruby jruby - 9.4.10.0 + 9.4.11.0 org.springframework From 444e480e92412407e2c17f60b5ab6c493157a9f3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Jan 2025 12:16:08 -0500 Subject: [PATCH 367/430] Bump com.google.code.gson:gson from 2.11.0 to 2.12.0 (#2238) Bumps [com.google.code.gson:gson](https://github.com/google/gson) from 2.11.0 to 2.12.0. - [Release notes](https://github.com/google/gson/releases) - [Changelog](https://github.com/google/gson/blob/main/CHANGELOG.md) - [Commits](https://github.com/google/gson/compare/gson-parent-2.11.0...gson-parent-2.12.0) --- updated-dependencies: - dependency-name: com.google.code.gson:gson dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 977a5728b80..43654a2ebc7 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -40,7 +40,7 @@ 3.0.0 10.1.34 5.1.2.Final - 2.11.0 + 2.12.0 9.12.1 5.0.0 1.9.22.1 From d6cc841dc0ec1f8c6ef6ca28aaf983740c22c60f Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 30 Jan 2025 19:11:59 -0500 Subject: [PATCH 368/430] Update Jakarta RESTful Web Services 3.1 TCK versions --- tck/Jenkinsfile | 12 +----------- tck/cxf-tck/pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/tck/Jenkinsfile b/tck/Jenkinsfile index 8d4d41f44f4..9da5af9a096 100644 --- a/tck/Jenkinsfile +++ b/tck/Jenkinsfile @@ -33,17 +33,7 @@ pipeline { ''' } } - - stage('Download JakartaEE Restful Services TCK') { - steps { - checkout([$class: 'GitSCM', - branches: [[name: 'refs/tags/tck-3.1.2']], - userRemoteConfigs: [[url: 'https://github.com/jakartaee/rest/']], - extensions: [[$class: 'RelativeTargetDirectory', relativeTargetDir: 'rest']] - ]) - } - } - + stage('Build JAX-RS TCK') { steps { echo "Using Apache CXF version: " + params.Version diff --git a/tck/cxf-tck/pom.xml b/tck/cxf-tck/pom.xml index 472e7edd9ec..1954404ec3e 100644 --- a/tck/cxf-tck/pom.xml +++ b/tck/cxf-tck/pom.xml @@ -42,7 +42,7 @@ 5.11.0 3.1.0 jakarta-restful-ws-tck - 1.8.0.Final + 1.8.1.Final @@ -100,7 +100,7 @@ jakarta.ws.rs ${tck.artifactId} - ${project.version} + 3.1.5 test From 69c1adcd867090399f3d2ac09fa0a94aa6699d8e Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 31 Jan 2025 07:59:10 -0500 Subject: [PATCH 369/430] CXF-9039: Run Jakarta RESTful Web Services 3.1 TCK. Fixing test failures (#2242) --- .../provider/jsrjsonb/JsrJsonbProvider.java | 18 ++++++++++++++++-- tck/Jenkinsfile | 7 ------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java index f8be63e7a5c..38c1bcf9c4b 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java @@ -22,6 +22,8 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.io.Reader; +import java.io.Writer; import java.lang.annotation.Annotation; import java.lang.reflect.Type; @@ -36,6 +38,8 @@ import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.StreamingOutput; import jakarta.ws.rs.ext.ContextResolver; import jakarta.ws.rs.ext.MessageBodyReader; import jakarta.ws.rs.ext.MessageBodyWriter; @@ -77,7 +81,13 @@ public JsrJsonbProvider(Jsonb jsonb) { @Override public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return isSupportedMediaType(mediaType); + return isSupportedMediaType(mediaType) + && !InputStream.class.isAssignableFrom(type) + && !OutputStream.class.isAssignableFrom(type) + && !Writer.class.isAssignableFrom(type) + && !StreamingOutput.class.isAssignableFrom(type) + && !CharSequence.class.isAssignableFrom(type) + && !Response.class.isAssignableFrom(type); } @Override @@ -89,7 +99,11 @@ public void writeTo(Object t, Class type, Type genericType, Annotation[] anno @Override public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { - return isSupportedMediaType(mediaType); + return isSupportedMediaType(mediaType) + && !InputStream.class.isAssignableFrom(type) + && !Reader.class.isAssignableFrom(type) + && !Response.class.isAssignableFrom(type) + && !CharSequence.class.isAssignableFrom(type); } @Override diff --git a/tck/Jenkinsfile b/tck/Jenkinsfile index 9da5af9a096..33525f75c01 100644 --- a/tck/Jenkinsfile +++ b/tck/Jenkinsfile @@ -32,13 +32,6 @@ pipeline { echo "WORKSPACE = ${PWD}" ''' } - } - - stage('Build JAX-RS TCK') { - steps { - echo "Using Apache CXF version: " + params.Version - sh "mvn clean install -f rest -DskipTests=true" - } } stage('Checkout Apache CXF') { From ede817377fe63ead7c13618ee3d7f6b1c7d72e3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 Jan 2025 07:59:24 -0500 Subject: [PATCH 370/430] Bump org.owasp:dependency-check-maven from 12.0.1 to 12.0.2 (#2240) Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 12.0.1 to 12.0.2. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v12.0.1...v12.0.2) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 38b422ada7e..862585c11da 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 17 UTF-8 scp://people.apache.org/www/cxf.apache.org/maven-site - 12.0.1 + 12.0.2 clean install From 283c8616ddfe26dd38906fd3a7451f33a03fb950 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 31 Jan 2025 07:59:44 -0500 Subject: [PATCH 371/430] Bump com.google.code.gson:gson from 2.12.0 to 2.12.1 (#2241) Bumps [com.google.code.gson:gson](https://github.com/google/gson) from 2.12.0 to 2.12.1. - [Release notes](https://github.com/google/gson/releases) - [Changelog](https://github.com/google/gson/blob/main/CHANGELOG.md) - [Commits](https://github.com/google/gson/compare/gson-parent-2.12.0...gson-parent-2.12.1) --- updated-dependencies: - dependency-name: com.google.code.gson:gson dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 43654a2ebc7..f1cc70b521b 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -40,7 +40,7 @@ 3.0.0 10.1.34 5.1.2.Final - 2.12.0 + 2.12.1 9.12.1 5.0.0 1.9.22.1 From 96aca2ebaece9348c9e3a7538e4d45b66537c22c Mon Sep 17 00:00:00 2001 From: sstremler Date: Sat, 1 Feb 2025 15:33:35 +0100 Subject: [PATCH 372/430] [CXF-9105] add synchronized to the principal iteration (#2245) --- .../logging/event/DefaultLogEventMapper.java | 37 ++++++++++++------- .../logging/DefaultLogEventMapperTest.java | 29 +++++++++++++++ 2 files changed, 53 insertions(+), 13 deletions(-) diff --git a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/event/DefaultLogEventMapper.java b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/event/DefaultLogEventMapper.java index 2e77c8df649..6140201fee9 100644 --- a/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/event/DefaultLogEventMapper.java +++ b/rt/features/logging/src/main/java/org/apache/cxf/ext/logging/event/DefaultLogEventMapper.java @@ -19,6 +19,7 @@ package org.apache.cxf.ext.logging.event; import java.security.AccessController; +import java.security.Principal; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -109,7 +110,7 @@ public LogEvent map(final Message message, final Set sensitiveProtocolHe } private String getPrincipal(Message message) { - String principal = getJAASPrincipal(); + String principal = getConcatenatedJAASPrincipals(); if (principal != null) { return principal; } @@ -125,31 +126,41 @@ private String getPrincipal(Message message) { return null; } - private String getJAASPrincipal() { - StringBuilder principals = new StringBuilder(); - Iterator principalIt = getJAASPrincipals(); - while (principalIt.hasNext()) { - principals.append(principalIt.next()); - if (principalIt.hasNext()) { - principals.append(','); + private String getConcatenatedJAASPrincipals() { + StringBuilder principalsStringBuilder = new StringBuilder(); + Set principals = getJAASPrincipals(); + + if (principals.isEmpty()) { + return null; + } + + synchronized (principals) { + Iterator principalIt = principals.iterator(); + while (principalIt.hasNext()) { + principalsStringBuilder.append(principalIt.next()); + if (principalIt.hasNext()) { + principalsStringBuilder.append(','); + } } } - if (principals.length() == 0) { + + if (principalsStringBuilder.length() == 0) { return null; } - return principals.toString(); + + return principalsStringBuilder.toString(); } - private Iterator getJAASPrincipals() { + private Set getJAASPrincipals() { try { Subject subject = Subject.getSubject(AccessController.getContext()); return subject != null && subject.getPrincipals() != null - ? subject.getPrincipals().iterator() : Collections.emptyIterator(); + ? subject.getPrincipals() : Collections.emptySet(); } catch (UnsupportedOperationException e) { // JDK 23: The terminally deprecated method Subject.getSubject(AccessControlContext) has been re-specified // to throw UnsupportedOperationException if invoked when a Security Manager is not allowed. // see https://jdk.java.net/23/release-notes#JDK-8296244 - return Collections.emptyIterator(); + return Collections.emptySet(); } } diff --git a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/DefaultLogEventMapperTest.java b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/DefaultLogEventMapperTest.java index 9df839e6b68..f7c2a765c1f 100644 --- a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/DefaultLogEventMapperTest.java +++ b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/DefaultLogEventMapperTest.java @@ -18,13 +18,20 @@ */ package org.apache.cxf.ext.logging; +import java.security.Principal; +import java.security.PrivilegedAction; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.IntStream; +import javax.security.auth.Subject; + +import org.apache.cxf.common.security.SimplePrincipal; import org.apache.cxf.ext.logging.event.DefaultLogEventMapper; import org.apache.cxf.ext.logging.event.EventType; import org.apache.cxf.ext.logging.event.LogEvent; @@ -147,4 +154,26 @@ public void testMap() { assertEquals("PUT[test]", event.getOperationName()); } + @Test + public void testMultiplePrincipalsReturnedByAccessControllerContext() { + DefaultLogEventMapper mapper = new DefaultLogEventMapper(); + Message message = new MessageImpl(); + message.put(Message.HTTP_REQUEST_METHOD, "GET"); + message.put(Message.REQUEST_URI, "test"); + Exchange exchange = new ExchangeImpl(); + message.setExchange(exchange); + + Set principals = IntStream.range(0, 3) + .mapToObj(i -> new SimplePrincipal("principal-" + i)) + .collect(Collectors.toSet()); + + Subject subject = new Subject(false, principals, Set.of(), Set.of()); + + LogEvent event = Subject.doAs(subject, (PrivilegedAction) () -> mapper.map(message)); + String[] splitPrincipals = event.getPrincipal().split(","); + Set expected = Set.of("principal-0", "principal-1", "principal-2"); + + assertEquals(expected, Arrays.stream(splitPrincipals).collect(Collectors.toSet())); + } + } From 9aa8c12da8ecaeb34dcc6bd740d75d8ce73bea46 Mon Sep 17 00:00:00 2001 From: Tom Cunningham Date: Sat, 1 Feb 2025 09:33:59 -0500 Subject: [PATCH 373/430] If is unnecessary - return value is same with or without the if (#2243) --- .../java/org/apache/cxf/tools/validator/internal/Stax2DOM.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java b/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java index 3bb20866b06..ad182952472 100644 --- a/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java +++ b/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/Stax2DOM.java @@ -43,9 +43,6 @@ public Stax2DOM() { public Document getDocument(String wsdl) throws ToolException { try { URI wsdlURI = new URI(URIParserUtil.getAbsoluteURI(wsdl)); - if (wsdlURI.toString().startsWith("http")) { - return getDocument(wsdlURI.toURL()); - } return getDocument(wsdlURI.toURL()); } catch (ToolException e) { throw e; From 9b2ad3e96cd723cebb66d08b7bbd534148c3a999 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 1 Feb 2025 10:53:46 -0500 Subject: [PATCH 374/430] [CXF-9105] add synchronized to the principal iteration. Fix DefaultLogEventMapperTest for JDK-23 and above --- .../logging/DefaultLogEventMapperTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/DefaultLogEventMapperTest.java b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/DefaultLogEventMapperTest.java index f7c2a765c1f..f502d8e8de0 100644 --- a/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/DefaultLogEventMapperTest.java +++ b/rt/features/logging/src/test/java/org/apache/cxf/ext/logging/DefaultLogEventMapperTest.java @@ -43,7 +43,13 @@ import org.junit.Test; import static org.apache.cxf.ext.logging.event.DefaultLogEventMapper.MASKED_HEADER_VALUE; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import static org.hamcrest.Matchers.lessThanOrEqualTo; import static org.junit.Assert.assertEquals; +import static org.junit.Assume.assumeThat; public class DefaultLogEventMapperTest { @@ -156,6 +162,9 @@ public void testMap() { @Test public void testMultiplePrincipalsReturnedByAccessControllerContext() { + assumeThat("Subject::getSubject is not supported in JDK-23 and above", + Runtime.version().feature(), lessThanOrEqualTo(22)); + DefaultLogEventMapper mapper = new DefaultLogEventMapper(); Message message = new MessageImpl(); message.put(Message.HTTP_REQUEST_METHOD, "GET"); @@ -176,4 +185,25 @@ public void testMultiplePrincipalsReturnedByAccessControllerContext() { assertEquals(expected, Arrays.stream(splitPrincipals).collect(Collectors.toSet())); } + @Test + public void testNoSubjectReturned() { + assumeThat("Subject::getSubject is not supported in JDK-23 and above", + Runtime.version().feature(), greaterThanOrEqualTo(23)); + + DefaultLogEventMapper mapper = new DefaultLogEventMapper(); + Message message = new MessageImpl(); + message.put(Message.HTTP_REQUEST_METHOD, "GET"); + message.put(Message.REQUEST_URI, "test"); + Exchange exchange = new ExchangeImpl(); + message.setExchange(exchange); + + Set principals = IntStream.range(0, 3) + .mapToObj(i -> new SimplePrincipal("principal-" + i)) + .collect(Collectors.toSet()); + + Subject subject = new Subject(false, principals, Set.of(), Set.of()); + + LogEvent event = Subject.doAs(subject, (PrivilegedAction) () -> mapper.map(message)); + assertThat(event.getPrincipal(), is(nullValue())); + } } From 5612e135d1ec7f1a6b36b75f598d6212c3f9ba37 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 2 Feb 2025 10:53:24 -0500 Subject: [PATCH 375/430] CXF-9039: Run Jakarta RESTful Web Services 3.1 TCK. Fixing test failures --- .../jaxrs/provider/jsrjsonb/JsrJsonbProvider.java | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java index 38c1bcf9c4b..fbf3b3218f1 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java @@ -22,7 +22,6 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -import java.io.Reader; import java.io.Writer; import java.lang.annotation.Annotation; import java.lang.reflect.Type; @@ -39,13 +38,13 @@ import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MultivaluedMap; import jakarta.ws.rs.core.Response; -import jakarta.ws.rs.core.StreamingOutput; import jakarta.ws.rs.ext.ContextResolver; import jakarta.ws.rs.ext.MessageBodyReader; import jakarta.ws.rs.ext.MessageBodyWriter; import jakarta.ws.rs.ext.Provider; import jakarta.ws.rs.ext.Providers; import org.apache.cxf.jaxrs.utils.ExceptionUtils; +import org.apache.cxf.jaxrs.utils.JAXRSUtils; /** * 11.2.7 Java API for JSON Binding (JSR-370) @@ -82,12 +81,11 @@ public JsrJsonbProvider(Jsonb jsonb) { @Override public boolean isWriteable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { return isSupportedMediaType(mediaType) - && !InputStream.class.isAssignableFrom(type) && !OutputStream.class.isAssignableFrom(type) && !Writer.class.isAssignableFrom(type) - && !StreamingOutput.class.isAssignableFrom(type) && !CharSequence.class.isAssignableFrom(type) - && !Response.class.isAssignableFrom(type); + && !Response.class.isAssignableFrom(type) + && !JAXRSUtils.isStreamingLikeOutType(type, genericType); } @Override @@ -100,10 +98,9 @@ public void writeTo(Object t, Class type, Type genericType, Annotation[] anno @Override public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { return isSupportedMediaType(mediaType) - && !InputStream.class.isAssignableFrom(type) - && !Reader.class.isAssignableFrom(type) && !Response.class.isAssignableFrom(type) - && !CharSequence.class.isAssignableFrom(type); + && !CharSequence.class.isAssignableFrom(type) + && !JAXRSUtils.isStreamingLikeOutType(type, genericType); } @Override From b23cfc83f102b93fbc34f1e5022b5c134cd168fd Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 08:58:17 -0500 Subject: [PATCH 376/430] Bump actions/setup-java from 4.6.0 to 4.7.0 (#2247) Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.6.0 to 4.7.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/7a6d8a8234af8eb26422e24e3006232cccaa061b...3a4f6e1af504cf6a31855fa899c6aa5355ba6c12) --- updated-dependencies: - dependency-name: actions/setup-java dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- .github/workflows/pull-request-build.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 76e9ac8708a..07d3064f7ff 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -31,7 +31,7 @@ jobs: uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Setup JDK 17 - uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0 + uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: distribution: 'temurin' java-version: '17' diff --git a/.github/workflows/pull-request-build.yml b/.github/workflows/pull-request-build.yml index 0776f494e4e..cab5e7f8434 100644 --- a/.github/workflows/pull-request-build.yml +++ b/.github/workflows/pull-request-build.yml @@ -20,7 +20,7 @@ jobs: steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v3.6.0 - name: Set up JDK 17 - uses: actions/setup-java@7a6d8a8234af8eb26422e24e3006232cccaa061b # v4.6.0 + uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12 # v4.7.0 with: java-version: '17' distribution: 'temurin' From 9db8e320b95fa79b13f5b43c5a3bebf822044a60 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 08:58:40 -0500 Subject: [PATCH 377/430] Bump github/codeql-action from 3.28.5 to 3.28.8 (#2246) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.5 to 3.28.8. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/f6091c0113d1dcf9b98e269ee48e8a7e51b7bdd4...dd746615b3b9d728a6a37ca2045b68ca76d4841a) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 07d3064f7ff..9099e297e55 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@f6091c0113d1dcf9b98e269ee48e8a7e51b7bdd4 # v3.28.5 + uses: github/codeql-action/init@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@f6091c0113d1dcf9b98e269ee48e8a7e51b7bdd4 # v3.28.5 + uses: github/codeql-action/analyze@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index cdef2741f00..4a2cb1c1172 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@f6091c0113d1dcf9b98e269ee48e8a7e51b7bdd4 #tag=v2 + uses: github/codeql-action/upload-sarif@dd746615b3b9d728a6a37ca2045b68ca76d4841a #tag=v2 with: sarif_file: results.sarif From 483957af1f066d6393b7184035e6cf0502013d16 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 08:58:55 -0500 Subject: [PATCH 378/430] Bump cxf.hibernate.em.version from 6.6.5.Final to 6.6.6.Final (#2249) Bumps `cxf.hibernate.em.version` from 6.6.5.Final to 6.6.6.Final. Updates `org.hibernate.orm:hibernate-core` from 6.6.5.Final to 6.6.6.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.6/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.5...6.6.6) Updates `org.hibernate.orm:hibernate-jcache` from 6.6.5.Final to 6.6.6.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.6/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.5...6.6.6) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.hibernate.orm:hibernate-jcache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 425a20fe092..c5916dddf5f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -120,7 +120,7 @@ 2.0.1 3.0 5.5.0 - 6.6.5.Final + 6.6.6.Final 8.0.2.Final 2.7.4 [4.0,4.2) From 5b3dba1f46a22f85dae194dea8a14e2ad43cb4b5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 3 Feb 2025 08:59:21 -0500 Subject: [PATCH 379/430] Bump cxf.wiremock.version from 3.10.0 to 3.11.0 (#2248) Bumps `cxf.wiremock.version` from 3.10.0 to 3.11.0. Updates `org.wiremock:wiremock-standalone` from 3.10.0 to 3.11.0 - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.10.0...3.11.0) Updates `org.wiremock:wiremock-jetty12` from 3.10.0 to 3.11.0 - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.10.0...3.11.0) --- updated-dependencies: - dependency-name: org.wiremock:wiremock-standalone dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.wiremock:wiremock-jetty12 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index c5916dddf5f..8dbf68cd037 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -230,7 +230,7 @@ 3.0.2 2.3 2.0.1 - 3.10.0 + 3.11.0 7.1.0 4.2.1 1.6.3 From 3d4d21ea84fc686b19f1978acc63f10ecb29e089 Mon Sep 17 00:00:00 2001 From: Peter Palaga Date: Mon, 3 Feb 2025 15:37:42 +0100 Subject: [PATCH 380/430] CXF-9003: Name clash when two SEIs have a same name method in the same (#2237) Java package --- .../cxf/jaxws/WrapperClassGenerator.java | 22 ++- .../cxf/jaxws/spi/WrapperClassLoader.java | 14 +- .../spi/WrapperClassNamingConvention.java | 148 +++++++++++++++++ .../resources/META-INF/cxf/bus-extensions.txt | 3 +- .../cxf/jaxws/spi/WrapperClassLoaderTest.java | 88 +++++++++- .../apache/cxf/systest/jaxws/CXF9003Test.java | 155 ++++++++++++++++++ 6 files changed, 403 insertions(+), 27 deletions(-) create mode 100644 rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassNamingConvention.java create mode 100644 systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/CXF9003Test.java diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java index c47338e4e56..ec36e6af0dc 100644 --- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java +++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/WrapperClassGenerator.java @@ -47,10 +47,11 @@ import org.apache.cxf.common.spi.ClassGeneratorClassLoader; import org.apache.cxf.common.util.ASMHelper; import org.apache.cxf.common.util.OpcodesProxy; -import org.apache.cxf.common.util.PackageUtils; import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.helpers.JavaUtils; import org.apache.cxf.jaxws.spi.WrapperClassCreator; +import org.apache.cxf.jaxws.spi.WrapperClassNamingConvention; +import org.apache.cxf.jaxws.spi.WrapperClassNamingConvention.DefaultWrapperClassNamingConvention; import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; import org.apache.cxf.service.model.InterfaceInfo; import org.apache.cxf.service.model.MessageInfo; @@ -60,19 +61,22 @@ import org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean; public final class WrapperClassGenerator extends ClassGeneratorClassLoader implements WrapperClassCreator { - public static final String DEFAULT_PACKAGE_NAME = "defaultnamespace"; + /** + * Kept for backwards compatibility only + * + * @deprecated use {@link WrapperClassNamingConvention#DEFAULT_PACKAGE_NAME} instead + */ + @Deprecated + public static final String DEFAULT_PACKAGE_NAME = DefaultWrapperClassNamingConvention.DEFAULT_PACKAGE_NAME; private static final Logger LOG = LogUtils.getL7dLogger(WrapperClassGenerator.class); private final ASMHelper helper; + private final WrapperClassNamingConvention wrapperClassNaming; public WrapperClassGenerator(Bus bus) { super(bus); - helper = bus.getExtension(ASMHelper.class); - } - - private String getPackageName(Method method) { - String pkg = PackageUtils.getPackageName(method.getDeclaringClass()); - return pkg.length() == 0 ? DEFAULT_PACKAGE_NAME : pkg; + this.helper = bus.getExtension(ASMHelper.class); + this.wrapperClassNaming = bus.getExtension(WrapperClassNamingConvention.class); } private Annotation[] getMethodParameterAnnotations(final MessagePartInfo mpi) { @@ -169,7 +173,7 @@ private void createWrapperClass(MessagePartInfo wrapperPart, QName wrapperElement = messageInfo.getName(); boolean anonymous = factory.getAnonymousWrapperTypes(); - String pkg = getPackageName(method) + ".jaxws_asm" + (anonymous ? "_an" : ""); + String pkg = wrapperClassNaming.getWrapperClassPackageName(method.getDeclaringClass(), anonymous); String className = pkg + "." + StringUtils.capitalize(op.getName().getLocalPart()); if (!isRequest) { diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassLoader.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassLoader.java index dfaf1959963..9a993272ac8 100644 --- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassLoader.java +++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassLoader.java @@ -24,9 +24,7 @@ import org.apache.cxf.Bus; import org.apache.cxf.common.spi.GeneratedClassClassLoader; -import org.apache.cxf.common.util.PackageUtils; import org.apache.cxf.common.util.StringUtils; -import org.apache.cxf.jaxws.WrapperClassGenerator; import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; import org.apache.cxf.service.model.InterfaceInfo; import org.apache.cxf.service.model.MessageInfo; @@ -41,8 +39,11 @@ * @author olivier dufour */ public class WrapperClassLoader extends GeneratedClassClassLoader implements WrapperClassCreator { + private final WrapperClassNamingConvention wrapperClassNaming; + public WrapperClassLoader(Bus bus) { super(bus); + wrapperClassNaming = bus.getExtension(WrapperClassNamingConvention.class); } @Override @@ -87,9 +88,10 @@ private Class createWrapperClass(MessagePartInfo wrapperPart, Method method, boolean isRequest, JaxWsServiceFactoryBean factory) { - boolean anonymous = factory.getAnonymousWrapperTypes(); - String pkg = getPackageName(method) + ".jaxws_asm" + (anonymous ? "_an" : ""); + String pkg = wrapperClassNaming.getWrapperClassPackageName( + method.getDeclaringClass(), + factory.getAnonymousWrapperTypes()); String className = pkg + "." + StringUtils.capitalize(op.getName().getLocalPart()); if (!isRequest) { @@ -112,8 +114,4 @@ private Class createWrapperClass(MessagePartInfo wrapperPart, //throw new ClassNotFoundException(origClassName); return null; } - private String getPackageName(Method method) { - String pkg = PackageUtils.getPackageName(method.getDeclaringClass()); - return pkg.length() == 0 ? WrapperClassGenerator.DEFAULT_PACKAGE_NAME : pkg; - } } diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassNamingConvention.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassNamingConvention.java new file mode 100644 index 00000000000..ae1b544c549 --- /dev/null +++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/WrapperClassNamingConvention.java @@ -0,0 +1,148 @@ +/** + * 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.cxf.jaxws.spi; + +import java.util.Locale; +import java.util.regex.Pattern; + +import org.apache.cxf.common.util.PackageUtils; +/** + * Provides names for storing generated wrapper classes. + * + * @since 4.1.1 + */ +public interface WrapperClassNamingConvention { + + /** + * Returns a package name unique for the given {@code sei} and {@code anonymous} + * parameters suitable for storing generated wrapper classes. + * + * @param sei the service endpoint interface for which the package name should be created + * @param anonymous whether the generated wrapper types are anonymous + * @return a valid Java package name + */ + String getWrapperClassPackageName(Class sei, boolean anonymous); + + /** + * Default naming scheme since CXF 4.2.0. + *

+ * The package name returned by {@link #getWrapperClassPackageName(Class, boolean)} are unique + * per given {@code sei}. + *

+ * Examples: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
SEIanonymous{@code getWrapperClassPackageName()} return value
{@code org.example.Service}{@code false}{@code org.example.jaxws_asm.service}
{@code org.example.OuterClass$Service}{@code false}{@code org.example.jaxws_asm.outerclass_service}
{@code org.example.Service}{@code true}{@code org.example.jaxws_asm_an.service}
+ * + * @since 4.1.1 + */ + class DefaultWrapperClassNamingConvention implements WrapperClassNamingConvention { + public static final String DEFAULT_PACKAGE_NAME = "defaultnamespace"; + private static final Pattern JAVA_PACKAGE_NAME_SANITIZER_PATTERN = Pattern.compile("[^a-zA-Z0-9_]"); + + @Override + public String getWrapperClassPackageName(Class sei, boolean anonymous) { + final String className = sei.getName(); + final int start = className.startsWith("[L") ? 2 : 0; + final int end = className.lastIndexOf('.'); + final String pkg; + final String cl; + if (end >= 0) { + pkg = className.substring(start, end); + cl = className.substring(end + 1); + } else { + pkg = DefaultWrapperClassNamingConvention.DEFAULT_PACKAGE_NAME; + cl = className; + } + + return pkg + + (anonymous ? ".jaxws_asm_an." : ".jaxws_asm.") + + JAVA_PACKAGE_NAME_SANITIZER_PATTERN.matcher(cl).replaceAll("_").toLowerCase(Locale.ROOT); + } + + } + + /** + * An implementation restoring the behavior of CXF before version 4.2.0. + *

+ * Unlike with {@link DefaultWrapperClassNamingConvention}, this implementation's + * {@link #getWrapperClassPackageName(Class, boolean)} takes only package name + * of the given {@code sei} into account. + * Therefore naming clashes may occur if two SEIs are in the same package + * and both of them have a method with the same name but possibly different signature. + *

+ * Examples: + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + *
SEIanonymous{@code getWrapperClassPackageName()} return value
{@code org.example.Service}{@code false}{@code org.example.jaxws_asm}
{@code org.example.OuterClass$Service}{@code false}{@code org.example.jaxws_asm}
{@code org.example.Service}{@code true}{@code org.example.jaxws_asm_an}
+ * + * @since 4.1.1 + */ + class LegacyWrapperClassNamingConvention implements WrapperClassNamingConvention { + + @Override + public String getWrapperClassPackageName(Class sei, boolean anonymous) { + return getPackageName(sei) + ".jaxws_asm" + (anonymous ? "_an" : ""); + } + + private String getPackageName(Class sei) { + String pkg = PackageUtils.getPackageName(sei); + return pkg.length() == 0 ? DefaultWrapperClassNamingConvention.DEFAULT_PACKAGE_NAME : pkg; + } + + } + +} diff --git a/rt/frontend/jaxws/src/main/resources/META-INF/cxf/bus-extensions.txt b/rt/frontend/jaxws/src/main/resources/META-INF/cxf/bus-extensions.txt index ea4dc9d2bc1..f91f28cf0f7 100644 --- a/rt/frontend/jaxws/src/main/resources/META-INF/cxf/bus-extensions.txt +++ b/rt/frontend/jaxws/src/main/resources/META-INF/cxf/bus-extensions.txt @@ -1,2 +1,3 @@ org.apache.cxf.jaxws.context.WebServiceContextResourceResolver::true -org.apache.cxf.jaxws.spi.WrapperClassCreatorProxyService:org.apache.cxf.jaxws.spi.WrapperClassCreator:true \ No newline at end of file +org.apache.cxf.jaxws.spi.WrapperClassCreatorProxyService:org.apache.cxf.jaxws.spi.WrapperClassCreator:true +org.apache.cxf.jaxws.spi.WrapperClassNamingConvention$DefaultWrapperClassNamingConvention:org.apache.cxf.jaxws.spi.WrapperClassNamingConvention:true diff --git a/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spi/WrapperClassLoaderTest.java b/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spi/WrapperClassLoaderTest.java index 16ba943bf2f..c2a2a4083e3 100644 --- a/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spi/WrapperClassLoaderTest.java +++ b/rt/frontend/jaxws/src/test/java/org/apache/cxf/jaxws/spi/WrapperClassLoaderTest.java @@ -21,8 +21,12 @@ import java.lang.reflect.Method; import java.util.Arrays; +import java.util.HashMap; import java.util.HashSet; +import java.util.List; +import java.util.Map; import java.util.Set; +import java.util.stream.Collectors; import javax.xml.namespace.QName; @@ -31,6 +35,8 @@ import org.apache.cxf.binding.soap.SoapBindingFactory; import org.apache.cxf.binding.soap.SoapTransportFactory; import org.apache.cxf.common.spi.GeneratedClassClassLoader; +import org.apache.cxf.common.spi.GeneratedClassClassLoaderCapture; +import org.apache.cxf.jaxws.WrapperClassGenerator; import org.apache.cxf.jaxws.service.SayHi; import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean; import org.apache.cxf.service.model.DescriptionInfo; @@ -59,10 +65,8 @@ public class WrapperClassLoaderTest extends AbstractCXFTest { public void setUpBus() throws Exception { super.setUpBus(); - GeneratedClassClassLoader.TypeHelperClassLoader mockClassLoader = - Mockito.mock(GeneratedClassClassLoader.TypeHelperClassLoader.class); - doReturn(SayHi.class).when(mockClassLoader).loadClass("org.apache.cxf.jaxws.service.jaxws_asm.SayHi"); - bus.setExtension(mockClassLoader, GeneratedClassClassLoader.TypeHelperClassLoader.class); + Capture c = new Capture(); + bus.setExtension(c, GeneratedClassClassLoaderCapture.class); SoapBindingFactory bindingFactory = new SoapBindingFactory(); bindingFactory.setBus(bus); @@ -115,8 +119,31 @@ public void testWrapperClassLoaderWhenNoWrappedOperations() throws Exception { } @org.junit.Test - public void testWrapperClassLoaderWithWrappedOperations() throws Exception { - WrapperClassLoader wrapperClassLoader = new WrapperClassLoader(bus); + public void testWrapperClassLoaderWithWrappedOperationsAndDefaultConvention() throws Exception { + final List loadedClassNames = testWrapperClassLoaderWithNamingConvention( + new WrapperClassNamingConvention.DefaultWrapperClassNamingConvention()); + assertEquals( + List.of( + "org.apache.cxf.jaxws.service.jaxws_asm.sayhi.SayHi", + "org.apache.cxf.jaxws.service.jaxws_asm.sayhi.SayHiResponse"), + loadedClassNames); + } + + @org.junit.Test + public void testWrapperClassLoaderWithWrappedOperationsAndLegacyConvention() throws Exception { + final List loadedClassNames = testWrapperClassLoaderWithNamingConvention( + new WrapperClassNamingConvention.LegacyWrapperClassNamingConvention()); + assertEquals( + List.of( + "org.apache.cxf.jaxws.service.jaxws_asm.SayHi", + "org.apache.cxf.jaxws.service.jaxws_asm.SayHiResponse"), + loadedClassNames); + } + + private List testWrapperClassLoaderWithNamingConvention(WrapperClassNamingConvention convention) + throws Exception { + bus.setExtension(convention, WrapperClassNamingConvention.class); + WrapperClassGenerator wrapperClassGenerator = new WrapperClassGenerator(bus); JaxWsServiceFactoryBean factory = new JaxWsServiceFactoryBean(); QName serviceName = new QName( @@ -153,10 +180,53 @@ public void testWrapperClassLoaderWithWrappedOperations() throws Exception { outputInfo.addMessagePart(sayHi); operationInfo.setOutput("sayHi", outputInfo); - Set> result = wrapperClassLoader.generate(factory, interfaceInfo, false); - //Both Input and Output Messages will be found on Classpath //org.apache.cxf.jaxws.service.jaxws_asm.SayHi - assertEquals(2, result.size()); + Set> generatedClasses = wrapperClassGenerator.generate(factory, interfaceInfo, false); + assertEquals(2, generatedClasses.size()); + + + operationInfo.getInput().getFirstMessagePart().setTypeClass(null); + operationInfo.getOutput().getFirstMessagePart().setTypeClass(null); + + WrapperClassLoader wrapperClassLoader = new WrapperClassLoader(bus); + GeneratedClassClassLoader.TypeHelperClassLoader cl = wrapperClassLoader.getClassLoader(); + Capture c = (Capture)bus.getExtension(GeneratedClassClassLoaderCapture.class); + c.restore(cl); + + Set> loadedClasses = wrapperClassLoader.generate(factory, interfaceInfo, false); + assertEquals(2, loadedClasses.size()); + + // The class names must match, but the classes themselves are different because they were loaded + // using different class loaders + final List generatedClassNames = generatedClasses.stream() + .map(Class::getName) + .collect(Collectors.toList()); + final List loadedClassNames = loadedClasses.stream() + .map(Class::getName) + .collect(Collectors.toList()); + assertEquals( + generatedClassNames, + loadedClassNames); + return loadedClassNames; } + + static class Capture implements GeneratedClassClassLoaderCapture { + + private final Map sources = new HashMap<>(); + + public void capture(String className, byte[] bytes) { + if (sources.containsKey(className)) { + throw new IllegalStateException("Class " + className + " defined twice"); + } + sources.put(className, bytes); + } + + public void restore(org.apache.cxf.common.spi.GeneratedClassClassLoader.TypeHelperClassLoader cl) { + for (Map.Entry cls : sources.entrySet()) { + cl.defineClass(cls.getKey(), cls.getValue()); + } + } + } + } diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/CXF9003Test.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/CXF9003Test.java new file mode 100644 index 00000000000..907c43ea2c7 --- /dev/null +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/CXF9003Test.java @@ -0,0 +1,155 @@ +/** + * 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.cxf.systest.jaxws; + +import java.net.URL; +import java.util.HashMap; +import java.util.Map; + +import javax.xml.namespace.QName; + +import jakarta.jws.WebMethod; +import jakarta.jws.WebService; +import jakarta.xml.ws.Endpoint; +import jakarta.xml.ws.Service; +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; +import org.apache.cxf.common.spi.GeneratedClassClassLoaderCapture; +import org.apache.cxf.testutil.common.AbstractBusTestServerBase; +import org.apache.cxf.testutil.common.AbstractClientServerTestBase; + +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +public class CXF9003Test extends AbstractClientServerTestBase { + static final String PORT = allocatePort(Server9003.class); + + @WebService(targetNamespace = "urn:hello") + interface Hello1Service { + @WebMethod + String hello(String name); + } + + @WebService(targetNamespace = "urn:hello") + public static class Hello1ServiceImpl implements Hello1Service { + @Override + public String hello(String person) { + return "Hello " + person; + } + } + + @WebService(targetNamespace = "urn:hello") + interface Hello2Service { + @WebMethod + String hello(Name name); + } + + @WebService(targetNamespace = "urn:hello") + public static class Hello2ServiceImpl implements Hello2Service { + @Override + public String hello(Name person) { + return "Hello " + person.getName(); + } + } + public static class Name { + private String name; + + public Name() { + + } + public Name(String name) { + super(); + this.name = name; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + } + + static class Capture implements GeneratedClassClassLoaderCapture { + + private final Map sources = new HashMap<>(); + + public void capture(String className, byte[] bytes) { + if (sources.containsKey(className)) { + throw new IllegalStateException("Class " + className + " defined twice"); + } + sources.put(className, bytes); + } + } + + + public static class Server9003 extends AbstractBusTestServerBase { + protected void run() { + Object implementor = new Hello1ServiceImpl(); + String address = "http://localhost:" + PORT + "/hello1/service"; + Endpoint.publish(address, implementor); + + Object proxyImpl = new Hello2ServiceImpl(); + String address2 = "http://localhost:" + PORT + "/hello2/service"; + Endpoint.publish(address2, proxyImpl); + } + + public static void main(String[] args) { + try { + Server9003 s = new Server9003(); + s.start(); + } catch (Exception ex) { + ex.printStackTrace(); + System.exit(-1); + } finally { + System.out.println("done!"); + } + } + } + + @BeforeClass + public static void startServers() throws Exception { + Bus bus = BusFactory.getDefaultBus(); + Capture c = new Capture(); + bus.setExtension(c, GeneratedClassClassLoaderCapture.class); + assertTrue("server did not launch correctly", launchServer(Server9003.class, true)); + } + + @Test + public void generatedNamingClash() throws Exception { + + QName serviceName1 = new QName("urn:hello", "Hello1ServiceImplService"); + URL wsdlURL1 = new URL("http://localhost:" + PORT + "/hello1/service?wsdl"); + Service service1 = Service.create(wsdlURL1, serviceName1); + Hello1Service helloService1 = service1.getPort(Hello1Service.class); + + QName serviceName2 = new QName("urn:hello", "Hello2ServiceImplService"); + URL wsdlURL2 = new URL("http://localhost:" + PORT + "/hello2/service?wsdl"); + Service service2 = Service.create(wsdlURL2, serviceName2); + Hello2Service helloService2 = service2.getPort(Hello2Service.class); + + assertEquals(helloService1.hello("Dolly"), "Hello Dolly"); + assertEquals(helloService2.hello(new Name("Joe")), "Hello Joe"); + } + +} From b39a7bd570f32b1b5298636bad48d925c33f1e35 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 3 Feb 2025 14:03:44 -0500 Subject: [PATCH 381/430] Update Apache HttpCore5 to 5.3.3 and Apache HttpClient5 to 5.4.2 (#2252) --- parent/pom.xml | 4 ++-- systests/transport-hc5/pom.xml | 4 ---- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index 8dbf68cd037..2f5f648d49b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -128,8 +128,8 @@ 4.5.14 [4.3,4.5.0) 4.4.16 - 5.4.1 - 5.3.2 + 5.4.2 + 5.3.3 2.18.2 2.18.2 3.9 diff --git a/systests/transport-hc5/pom.xml b/systests/transport-hc5/pom.xml index cf55be39753..065ffea4577 100644 --- a/systests/transport-hc5/pom.xml +++ b/systests/transport-hc5/pom.xml @@ -82,8 +82,6 @@ true - - true @@ -92,8 +90,6 @@ false - - true From 6a758ba651ff75d1d9ef1a4542671ec2e9e4e211 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 4 Feb 2025 07:54:51 -0500 Subject: [PATCH 382/430] Bump org.webjars:swagger-ui from 5.18.2 to 5.18.3 (#2254) Bumps [org.webjars:swagger-ui](https://github.com/swagger-api/swagger-ui) from 5.18.2 to 5.18.3. - [Release notes](https://github.com/swagger-api/swagger-ui/releases) - [Changelog](https://github.com/swagger-api/swagger-ui/blob/master/.releaserc) - [Commits](https://github.com/swagger-api/swagger-ui/compare/v5.18.2...v5.18.3) --- updated-dependencies: - dependency-name: org.webjars:swagger-ui dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index f1cc70b521b..c147480d6b9 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -36,7 +36,7 @@ 12.0.16 4.1.117.Final 4.5.14 - 5.18.2 + 5.18.3 3.0.0 10.1.34 5.1.2.Final diff --git a/parent/pom.xml b/parent/pom.xml index 2f5f648d49b..72fba1afd8f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -216,7 +216,7 @@ 6.4.2 6.2.2 1.8.3 - 5.18.2 + 5.18.3 2.2.28 3.0.0 10.1.34 From cec26b41b4275e35011194b8f4111e57bc67c83b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Feb 2025 09:16:14 -0500 Subject: [PATCH 383/430] Bump org.graalvm.buildtools:native-maven-plugin from 0.10.4 to 0.10.5 (#2257) Bumps [org.graalvm.buildtools:native-maven-plugin](https://github.com/graalvm/native-build-tools) from 0.10.4 to 0.10.5. - [Release notes](https://github.com/graalvm/native-build-tools/releases) - [Commits](https://github.com/graalvm/native-build-tools/commits) --- updated-dependencies: - dependency-name: org.graalvm.buildtools:native-maven-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../src/main/release/samples/jax_rs/graalvm_basic/pom.xml | 4 ++-- distribution/src/main/release/samples/jaxws_graalvm/pom.xml | 4 ++-- .../main/release/samples/jaxws_graalvm_dynamic/client/pom.xml | 2 +- .../main/release/samples/jaxws_graalvm_dynamic/server/pom.xml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml index 2902b07e2e8..0f37a23be4d 100644 --- a/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml +++ b/distribution/src/main/release/samples/jax_rs/graalvm_basic/pom.xml @@ -67,7 +67,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.4 + 0.10.5 @@ -125,7 +125,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.4 + 0.10.5 diff --git a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml index 5276dc34e1c..a49e0024a27 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm/pom.xml @@ -92,7 +92,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.4 + 0.10.5 @@ -146,7 +146,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.4 + 0.10.5 diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml index 83fc6f0e9c4..5779f80d187 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/client/pom.xml @@ -41,7 +41,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.4 + 0.10.5 diff --git a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml index 6ed0914af14..6c21793114a 100644 --- a/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml +++ b/distribution/src/main/release/samples/jaxws_graalvm_dynamic/server/pom.xml @@ -68,7 +68,7 @@ org.graalvm.buildtools native-maven-plugin - 0.10.4 + 0.10.5 From 51ad92012fbcfbdd77b722214631303850315799 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Wed, 5 Feb 2025 17:10:54 -0500 Subject: [PATCH 384/430] CXF-8629: AsyncHTTPConduit (hc5) should support chunked request / response. Add test cases with auto-redirect (#2202) --- .../asyncclient/hc5/AsyncHTTPConduit.java | 5 +- .../hc5/URLConnectionAsyncHTTPConduit.java | 5 +- .../http/netty/client/NettyHttpConduit.java | 5 +- .../cxf/systest/hc5/jaxrs/FileStore.java | 58 +++- .../jaxrs/JAXRSAsyncClientChunkingTest.java | 150 +++++++++- .../apache/cxf/systest/jaxrs/FileStore.java | 78 ++++- .../jaxrs/JAXRSAsyncClientChunkingTest.java | 273 ++++++++++++++++++ 7 files changed, 556 insertions(+), 18 deletions(-) create mode 100644 systests/transports/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientChunkingTest.java diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java index 52739f60991..c990ecf7197 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/AsyncHTTPConduit.java @@ -696,7 +696,10 @@ protected synchronized HttpResponse getHttpResponse() throws IOException { } protected void handleResponseAsync() throws IOException { - isAsync = true; + // The response hasn't been handled yet, should be handled asynchronously + if (httpResponse == null) { + isAsync = true; + } } protected void closeInputStream() throws IOException { diff --git a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java index 09c8dd2a459..900c778adad 100644 --- a/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java +++ b/rt/transports/http-hc5/src/main/java/org/apache/cxf/transport/http/asyncclient/hc5/URLConnectionAsyncHTTPConduit.java @@ -699,7 +699,10 @@ protected synchronized HttpResponse getHttpResponse() throws IOException { } protected void handleResponseAsync() throws IOException { - isAsync = true; + // The response hasn't been handled yet, should be handled asynchronously + if (httpResponse == null) { + isAsync = true; + } } protected void closeInputStream() throws IOException { diff --git a/rt/transports/http-netty/netty-client/src/main/java/org/apache/cxf/transport/http/netty/client/NettyHttpConduit.java b/rt/transports/http-netty/netty-client/src/main/java/org/apache/cxf/transport/http/netty/client/NettyHttpConduit.java index 5173c945d75..de55fdbd30a 100644 --- a/rt/transports/http-netty/netty-client/src/main/java/org/apache/cxf/transport/http/netty/client/NettyHttpConduit.java +++ b/rt/transports/http-netty/netty-client/src/main/java/org/apache/cxf/transport/http/netty/client/NettyHttpConduit.java @@ -591,7 +591,10 @@ private String readHeaders(Headers h) throws IOException { @Override protected void handleResponseAsync() throws IOException { - isAsync = true; + // The response hasn't been handled yet, should be handled asynchronously + if (httpResponse == null) { + isAsync = true; + } } @Override diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStore.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStore.java index 11e36a38135..5a0ebd76eae 100644 --- a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStore.java +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/FileStore.java @@ -29,6 +29,7 @@ import jakarta.activation.DataHandler; import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.QueryParam; @@ -38,8 +39,10 @@ import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.ResponseBuilder; import jakarta.ws.rs.core.Response.Status; import jakarta.ws.rs.core.StreamingOutput; +import jakarta.ws.rs.core.UriBuilder; import jakarta.ws.rs.core.UriInfo; import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.helpers.IOUtils; @@ -54,7 +57,7 @@ public class FileStore { @POST @Path("/stream") @Consumes("*/*") - public Response addBook(@QueryParam("chunked") boolean chunked, InputStream in) throws IOException { + public Response addFile(@QueryParam("chunked") boolean chunked, InputStream in) throws IOException { String transferEncoding = headers.getHeaderString("Transfer-Encoding"); if (chunked != Objects.equals("chunked", transferEncoding)) { @@ -75,11 +78,11 @@ public void write(OutputStream out) throws IOException, WebApplicationException return Response.ok(Arrays.copyOf(content, content.length / 10)).build(); } } - } + } @POST @Consumes("multipart/form-data") - public void addBook(@QueryParam("chunked") boolean chunked, + public void addFile(@QueryParam("chunked") boolean chunked, @Suspended final AsyncResponse response, @Context final UriInfo uri, final MultipartBody body) { String transferEncoding = headers.getHeaderString("Transfer-Encoding"); @@ -136,4 +139,53 @@ public void write(OutputStream os) throws IOException, WebApplicationException { } } } + + @GET + @Consumes("multipart/form-data") + public void getFile(@QueryParam("chunked") boolean chunked, @QueryParam("filename") String source, + @Suspended final AsyncResponse response) { + + if (StringUtils.isEmpty(source)) { + response.resume(Response.status(Status.BAD_REQUEST).build()); + return; + } + + try { + if (!store.containsKey(source)) { + response.resume(Response.status(Status.NOT_FOUND).build()); + return; + } + + final byte[] content = store.get(source); + if (response.isSuspended()) { + final StreamingOutput stream = new StreamingOutput() { + @Override + public void write(OutputStream os) throws IOException, WebApplicationException { + if (chunked) { + // Make sure we have enough data for chunking to kick in + for (int i = 0; i < 10; ++i) { + os.write(content); + } + } else { + os.write(content); + } + } + }; + response.resume(Response.ok().entity(stream).build()); + } + + } catch (final Exception ex) { + response.resume(Response.serverError().build()); + } + } + + @GET + @Path("/redirect") + public Response redirectFile(@Context UriInfo uriInfo) { + final UriBuilder builder = uriInfo.getBaseUriBuilder().path(getClass()); + uriInfo.getQueryParameters(true).forEach((p, v) -> builder.queryParam(p, v.get(0))); + + final ResponseBuilder response = Response.status(303).header("Location", builder.build()); + return response.build(); + } } diff --git a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientChunkingTest.java b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientChunkingTest.java index 0f687385345..53080752db4 100644 --- a/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientChunkingTest.java +++ b/systests/transport-hc5/src/test/java/org/apache/cxf/systest/hc5/jaxrs/JAXRSAsyncClientChunkingTest.java @@ -26,12 +26,20 @@ import java.util.Collection; import java.util.List; import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; import jakarta.ws.rs.client.Entity; import jakarta.ws.rs.core.MediaType; import jakarta.ws.rs.core.MultivaluedMap; import jakarta.ws.rs.core.Response; import org.apache.cxf.interceptor.LoggingInInterceptor; +import org.apache.cxf.interceptor.LoggingMessage; import org.apache.cxf.interceptor.LoggingOutInterceptor; import org.apache.cxf.jaxrs.client.ClientConfiguration; import org.apache.cxf.jaxrs.client.WebClient; @@ -40,6 +48,7 @@ import org.apache.cxf.jaxrs.impl.MetadataMap; import org.apache.cxf.jaxrs.model.AbstractResourceInfo; import org.apache.cxf.jaxrs.provider.MultipartProvider; +import org.apache.cxf.message.Message; import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; import org.apache.cxf.transport.http.asyncclient.hc5.AsyncHTTPConduit; @@ -50,6 +59,7 @@ import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.startsWith; import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; @@ -57,9 +67,12 @@ public class JAXRSAsyncClientChunkingTest extends AbstractBusClientServerTestBase { private static final String PORT = allocatePort(FileStoreServer.class); private final Boolean chunked; + private final Boolean autoRedirect; + private final ConcurrentMap ids = new ConcurrentHashMap<>(); - public JAXRSAsyncClientChunkingTest(Boolean chunked) { + public JAXRSAsyncClientChunkingTest(Boolean chunked, Boolean autoRedirect) { this.chunked = chunked; + this.autoRedirect = autoRedirect; } @BeforeClass @@ -69,9 +82,14 @@ public static void startServers() throws Exception { createStaticBus(); } - @Parameters(name = "{0}") - public static Collection data() { - return Arrays.asList(new Boolean[] {Boolean.FALSE, Boolean.TRUE}); + @Parameters(name = "chunked {0}, auto-redirect {1}") + public static Collection data() { + return Arrays.asList(new Boolean[][] { + {Boolean.FALSE /* chunked */, Boolean.FALSE /* autoredirect */}, + {Boolean.FALSE /* chunked */, Boolean.TRUE /* autoredirect */}, + {Boolean.TRUE /* chunked */, Boolean.FALSE /* autoredirect */}, + {Boolean.TRUE /* chunked */, Boolean.TRUE /* autoredirect */}, + }); } @Test @@ -82,17 +100,18 @@ public void testMultipartChunking() { final ClientConfiguration config = WebClient.getConfig(webClient); config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); configureLogging(config); + final String filename = "keymanagers.jks"; try { - final String filename = "keymanagers.jks"; final MultivaluedMap headers = new MetadataMap<>(); headers.add("Content-ID", filename); headers.add("Content-Type", "application/binary"); - headers.add("Content-Disposition", "attachment; filename=" + chunked + "_" + filename); + headers.add("Content-Disposition", "attachment; filename=" + chunked + "_" + autoRedirect + "_" + filename); final Attachment att = new Attachment(getClass().getResourceAsStream("/" + filename), headers); final MultipartBody entity = new MultipartBody(att); - try (Response response = webClient.header("Content-Type", "multipart/form-data").post(entity)) { + try (Response response = webClient.header("Content-Type", MediaType.MULTIPART_FORM_DATA).post(entity)) { assertThat(response.getStatus(), equalTo(201)); assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); assertThat(response.getEntity(), not(equalTo(null))); @@ -100,6 +119,42 @@ public void testMultipartChunking() { } finally { webClient.close(); } + + assertRedirect(chunked + "_" + autoRedirect + "_" + filename); + } + + @Test + public void testMultipartChunkingAsync() throws InterruptedException, ExecutionException, TimeoutException { + final String url = "http://localhost:" + PORT + "/file-store"; + final WebClient webClient = WebClient.create(url, List.of(new MultipartProvider())).query("chunked", chunked); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); + configureLogging(config); + + final String filename = "keymanagers.jks"; + try { + final MultivaluedMap headers = new MetadataMap<>(); + headers.add("Content-ID", filename); + headers.add("Content-Type", "application/binary"); + headers.add("Content-Disposition", "attachment; filename=" + chunked + + "_" + autoRedirect + "_async_" + filename); + final Attachment att = new Attachment(getClass().getResourceAsStream("/" + filename), headers); + final Entity entity = Entity.entity(new MultipartBody(att), + MediaType.MULTIPART_FORM_DATA_TYPE); + try (Response response = webClient.header("Content-Type", MediaType.MULTIPART_FORM_DATA).async() + .post(entity).get(10, TimeUnit.SECONDS)) { + assertThat(response.getStatus(), equalTo(201)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } + } finally { + webClient.close(); + } + + assertRedirect(chunked + "_" + autoRedirect + "_" + filename); } @Test @@ -110,6 +165,7 @@ public void testStreamChunking() throws IOException { final ClientConfiguration config = WebClient.getConfig(webClient); config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); configureLogging(config); final byte[] bytes = new byte [32 * 1024]; @@ -126,13 +182,89 @@ public void testStreamChunking() throws IOException { } finally { webClient.close(); } + + assertNoDuplicateLogging(); } - + + @Test + public void testStreamChunkingAsync() throws IOException, InterruptedException, + ExecutionException, TimeoutException { + final String url = "http://localhost:" + PORT + "/file-store/stream"; + final WebClient webClient = WebClient.create(url).query("chunked", chunked); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); + configureLogging(config); + + final byte[] bytes = new byte [32 * 1024]; + final Random random = new Random(); + random.nextBytes(bytes); + + try (InputStream in = new ByteArrayInputStream(bytes)) { + final Entity entity = Entity.entity(in, MediaType.APPLICATION_OCTET_STREAM); + try (Response response = webClient.async().post(entity).get(10, TimeUnit.SECONDS)) { + assertThat(response.getStatus(), equalTo(200)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } + } finally { + webClient.close(); + } + + assertNoDuplicateLogging(); + } + + private void assertRedirect(String filename) { + final String url = "http://localhost:" + PORT + "/file-store/redirect"; + + final WebClient webClient = WebClient.create(url, List.of(new MultipartProvider())) + .query("chunked", chunked) + .query("filename", filename); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); + configureLogging(config); + + try { + try (Response response = webClient.get()) { + if (autoRedirect) { + assertThat(response.getStatus(), equalTo(200)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } else { + assertThat(response.getStatus(), equalTo(303)); + assertThat(response.getHeaderString("Location"), + startsWith("http://localhost:" + PORT + "/file-store")); + } + } + } finally { + webClient.close(); + } + + assertNoDuplicateLogging(); + } + + private void assertNoDuplicateLogging() { + ids.forEach((id, counter) -> assertThat("Duplicate client logging for message " + id, + counter.get(), equalTo(1))); + } + private void configureLogging(final ClientConfiguration config) { final LoggingOutInterceptor out = new LoggingOutInterceptor(); out.setShowMultipartContent(false); - final LoggingInInterceptor in = new LoggingInInterceptor(); + final LoggingInInterceptor in = new LoggingInInterceptor() { + @Override + protected void logging(Logger logger, Message message) { + super.logging(logger, message); + final String id = (String) message.get(LoggingMessage.ID_KEY); + ids.computeIfAbsent(id, key -> new AtomicInteger()).incrementAndGet(); + } + }; in.setShowBinaryContent(false); config.getInInterceptors().add(in); diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/jaxrs/FileStore.java b/systests/transports/src/test/java/org/apache/cxf/systest/jaxrs/FileStore.java index fe64e82ffde..a1f7d336621 100644 --- a/systests/transports/src/test/java/org/apache/cxf/systest/jaxrs/FileStore.java +++ b/systests/transports/src/test/java/org/apache/cxf/systest/jaxrs/FileStore.java @@ -29,6 +29,7 @@ import jakarta.activation.DataHandler; import jakarta.ws.rs.Consumes; +import jakarta.ws.rs.GET; import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.QueryParam; @@ -38,8 +39,10 @@ import jakarta.ws.rs.core.Context; import jakarta.ws.rs.core.HttpHeaders; import jakarta.ws.rs.core.Response; +import jakarta.ws.rs.core.Response.ResponseBuilder; import jakarta.ws.rs.core.Response.Status; import jakarta.ws.rs.core.StreamingOutput; +import jakarta.ws.rs.core.UriBuilder; import jakarta.ws.rs.core.UriInfo; import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.helpers.IOUtils; @@ -54,7 +57,7 @@ public class FileStore { @POST @Path("/stream") @Consumes("*/*") - public Response addBook(@QueryParam("chunked") boolean chunked, InputStream in) throws IOException { + public Response addFile(@QueryParam("chunked") boolean chunked, InputStream in) throws IOException { String transferEncoding = headers.getHeaderString("Transfer-Encoding"); if (chunked != Objects.equals("chunked", transferEncoding)) { @@ -79,9 +82,9 @@ public void write(OutputStream out) throws IOException, WebApplicationException @POST @Consumes("multipart/form-data") - public void addBook(@QueryParam("chunked") boolean chunked, + public void addFile(@QueryParam("chunked") boolean chunked, @Suspended final AsyncResponse response, @Context final UriInfo uri, final MultipartBody body) { - + String transferEncoding = headers.getHeaderString("Transfer-Encoding"); if (chunked != Objects.equals("chunked", transferEncoding)) { response.resume(Response.status(Status.EXPECTATION_FAILED).build()); @@ -109,6 +112,26 @@ public void addBook(@QueryParam("chunked") boolean chunked, response.resume(Response.status(Status.CONFLICT).build()); return; } + + if (response.isSuspended()) { + final StreamingOutput stream = new StreamingOutput() { + @Override + public void write(OutputStream os) throws IOException, WebApplicationException { + if (chunked) { + // Make sure we have enough data for chunking to kick in + for (int i = 0; i < 10; ++i) { + os.write(content); + } + } else { + os.write(content); + } + } + }; + response.resume(Response.created(uri.getRequestUriBuilder() + .path(source).build()).entity(stream) + .build()); + } + } catch (final Exception ex) { response.resume(Response.serverError().build()); } @@ -124,4 +147,53 @@ public void addBook(@QueryParam("chunked") boolean chunked, response.resume(Response.status(Status.BAD_REQUEST).build()); } } + + @GET + @Consumes("multipart/form-data") + public void getFile(@QueryParam("chunked") boolean chunked, @QueryParam("filename") String source, + @Suspended final AsyncResponse response) { + + if (StringUtils.isEmpty(source)) { + response.resume(Response.status(Status.BAD_REQUEST).build()); + return; + } + + try { + if (!store.containsKey(source)) { + response.resume(Response.status(Status.NOT_FOUND).build()); + return; + } + + final byte[] content = store.get(source); + if (response.isSuspended()) { + final StreamingOutput stream = new StreamingOutput() { + @Override + public void write(OutputStream os) throws IOException, WebApplicationException { + if (chunked) { + // Make sure we have enough data for chunking to kick in + for (int i = 0; i < 10; ++i) { + os.write(content); + } + } else { + os.write(content); + } + } + }; + response.resume(Response.ok().entity(stream).build()); + } + + } catch (final Exception ex) { + response.resume(Response.serverError().build()); + } + } + + @GET + @Path("/redirect") + public Response redirectFile(@Context UriInfo uriInfo) { + final UriBuilder builder = uriInfo.getBaseUriBuilder().path(getClass()); + uriInfo.getQueryParameters(true).forEach((p, v) -> builder.queryParam(p, v.get(0))); + + final ResponseBuilder response = Response.status(303).header("Location", builder.build()); + return response.build(); + } } diff --git a/systests/transports/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientChunkingTest.java b/systests/transports/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientChunkingTest.java new file mode 100644 index 00000000000..8d754780d5a --- /dev/null +++ b/systests/transports/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSAsyncClientChunkingTest.java @@ -0,0 +1,273 @@ +/** + * 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.cxf.systest.jaxrs; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; +import java.util.Random; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; +import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; + +import jakarta.ws.rs.client.Entity; +import jakarta.ws.rs.core.MediaType; +import jakarta.ws.rs.core.MultivaluedMap; +import jakarta.ws.rs.core.Response; +import org.apache.cxf.interceptor.LoggingInInterceptor; +import org.apache.cxf.interceptor.LoggingMessage; +import org.apache.cxf.interceptor.LoggingOutInterceptor; +import org.apache.cxf.jaxrs.client.ClientConfiguration; +import org.apache.cxf.jaxrs.client.WebClient; +import org.apache.cxf.jaxrs.ext.multipart.Attachment; +import org.apache.cxf.jaxrs.ext.multipart.MultipartBody; +import org.apache.cxf.jaxrs.impl.MetadataMap; +import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.jaxrs.provider.MultipartProvider; +import org.apache.cxf.message.Message; +import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; +import org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized.Parameters; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.startsWith; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +@RunWith(value = org.junit.runners.Parameterized.class) +public class JAXRSAsyncClientChunkingTest extends AbstractBusClientServerTestBase { + private static final String PORT = allocatePort(FileStoreServer.class); + private final Boolean chunked; + private final Boolean autoRedirect; + private final ConcurrentMap ids = new ConcurrentHashMap<>(); + + public JAXRSAsyncClientChunkingTest(Boolean chunked, Boolean autoRedirect) { + this.chunked = chunked; + this.autoRedirect = autoRedirect; + } + + @BeforeClass + public static void startServers() throws Exception { + AbstractResourceInfo.clearAllMaps(); + assertTrue("server did not launch correctly", launchServer(new FileStoreServer(PORT))); + createStaticBus(); + } + + @Parameters(name = "chunked {0}, auto-redirect {1}") + public static Collection data() { + return Arrays.asList(new Boolean[][] { + {Boolean.FALSE /* chunked */, Boolean.FALSE /* autoredirect */}, + {Boolean.FALSE /* chunked */, Boolean.TRUE /* autoredirect */}, + {Boolean.TRUE /* chunked */, Boolean.FALSE /* autoredirect */}, + {Boolean.TRUE /* chunked */, Boolean.TRUE /* autoredirect */}, + }); + } + + @Test + public void testMultipartChunking() { + final String url = "http://localhost:" + PORT + "/file-store"; + final WebClient webClient = WebClient.create(url, List.of(new MultipartProvider())).query("chunked", chunked); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); + configureLogging(config); + + final String filename = "keymanagers.jks"; + try { + final MultivaluedMap headers = new MetadataMap<>(); + headers.add("Content-ID", filename); + headers.add("Content-Type", "application/binary"); + headers.add("Content-Disposition", "attachment; filename=" + chunked + "_" + autoRedirect + "_" + filename); + final Attachment att = new Attachment(getClass().getResourceAsStream("/" + filename), headers); + final MultipartBody entity = new MultipartBody(att); + try (Response response = webClient.header("Content-Type", MediaType.MULTIPART_FORM_DATA).post(entity)) { + assertThat(response.getStatus(), equalTo(201)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } + } finally { + webClient.close(); + } + + assertRedirect(chunked + "_" + autoRedirect + "_" + filename); + } + + @Test + public void testMultipartChunkingAsync() throws InterruptedException, ExecutionException, TimeoutException { + final String url = "http://localhost:" + PORT + "/file-store"; + final WebClient webClient = WebClient.create(url, List.of(new MultipartProvider())).query("chunked", chunked); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); + configureLogging(config); + + final String filename = "keymanagers.jks"; + try { + final MultivaluedMap headers = new MetadataMap<>(); + headers.add("Content-ID", filename); + headers.add("Content-Type", "application/binary"); + headers.add("Content-Disposition", "attachment; filename=" + chunked + + "_" + autoRedirect + "_async_" + filename); + final Attachment att = new Attachment(getClass().getResourceAsStream("/" + filename), headers); + final Entity entity = Entity.entity(new MultipartBody(att), + MediaType.MULTIPART_FORM_DATA_TYPE); + try (Response response = webClient.header("Content-Type", MediaType.MULTIPART_FORM_DATA).async() + .post(entity).get(10, TimeUnit.SECONDS)) { + assertThat(response.getStatus(), equalTo(201)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } + } finally { + webClient.close(); + } + + assertRedirect(chunked + "_" + autoRedirect + "_" + filename); + } + + @Test + public void testStreamChunking() throws IOException { + final String url = "http://localhost:" + PORT + "/file-store/stream"; + final WebClient webClient = WebClient.create(url).query("chunked", chunked); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); + configureLogging(config); + + final byte[] bytes = new byte [32 * 1024]; + final Random random = new Random(); + random.nextBytes(bytes); + + try (InputStream in = new ByteArrayInputStream(bytes)) { + final Entity entity = Entity.entity(in, MediaType.APPLICATION_OCTET_STREAM); + try (Response response = webClient.post(entity)) { + assertThat(response.getStatus(), equalTo(200)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } + } finally { + webClient.close(); + } + + assertNoDuplicateLogging(); + } + + @Test + public void testStreamChunkingAsync() throws IOException, InterruptedException, + ExecutionException, TimeoutException { + final String url = "http://localhost:" + PORT + "/file-store/stream"; + final WebClient webClient = WebClient.create(url).query("chunked", chunked); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); + configureLogging(config); + + final byte[] bytes = new byte [32 * 1024]; + final Random random = new Random(); + random.nextBytes(bytes); + + try (InputStream in = new ByteArrayInputStream(bytes)) { + final Entity entity = Entity.entity(in, MediaType.APPLICATION_OCTET_STREAM); + try (Response response = webClient.async().post(entity).get(10, TimeUnit.SECONDS)) { + assertThat(response.getStatus(), equalTo(200)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } + } finally { + webClient.close(); + } + + assertNoDuplicateLogging(); + } + + private void assertRedirect(String filename) { + final String url = "http://localhost:" + PORT + "/file-store/redirect"; + + final WebClient webClient = WebClient.create(url, List.of(new MultipartProvider())) + .query("chunked", chunked) + .query("filename", filename); + + final ClientConfiguration config = WebClient.getConfig(webClient); + config.getBus().setProperty(AsyncHTTPConduit.USE_ASYNC, true); + config.getHttpConduit().getClient().setAllowChunking(chunked); + config.getHttpConduit().getClient().setAutoRedirect(autoRedirect); + configureLogging(config); + + try { + try (Response response = webClient.get()) { + if (autoRedirect) { + assertThat(response.getStatus(), equalTo(200)); + assertThat(response.getHeaderString("Transfer-Encoding"), equalTo(chunked ? "chunked" : null)); + assertThat(response.getEntity(), not(equalTo(null))); + } else { + assertThat(response.getStatus(), equalTo(303)); + assertThat(response.getHeaderString("Location"), + startsWith("http://localhost:" + PORT + "/file-store")); + } + } + } finally { + webClient.close(); + } + + assertNoDuplicateLogging(); + } + + private void assertNoDuplicateLogging() { + ids.forEach((id, counter) -> assertThat("Duplicate client logging for message " + id, + counter.get(), equalTo(1))); + } + + private void configureLogging(final ClientConfiguration config) { + final LoggingOutInterceptor out = new LoggingOutInterceptor(); + out.setShowMultipartContent(false); + + final LoggingInInterceptor in = new LoggingInInterceptor() { + @Override + protected void logging(Logger logger, Message message) { + super.logging(logger, message); + final String id = (String) message.get(LoggingMessage.ID_KEY); + ids.computeIfAbsent(id, key -> new AtomicInteger()).incrementAndGet(); + } + }; + in.setShowBinaryContent(false); + + config.getInInterceptors().add(in); + config.getOutInterceptors().add(out); + } +} From 1c1d687f8e295f433a3592a3bc0b0a63c432bfde Mon Sep 17 00:00:00 2001 From: MAUGIN Thomas Date: Thu, 6 Feb 2025 19:27:09 +0100 Subject: [PATCH 385/430] fix: do not log complete stream. (#2258) Log the hashCode instead of toString to avoid dumping all the file content in memory and in log because of https://github.com/apache/cxf/blob/main/core/src/main/java/org/apache/cxf/io/CachedOutputStream.java#L423 This cause OOM on our app. --- .../org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java b/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java index cb4f9ba8807..5c8a1768146 100644 --- a/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java +++ b/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java @@ -119,7 +119,7 @@ private void clean(Collection closeables) { final DelayedCloseable next = iterator.next(); try { iterator.remove(); - LOG.warning("Unclosed (leaked?) stream detected: " + next.closeable); + LOG.warning("Unclosed (leaked?) stream detected: " + next.closeable.hashCode()); next.closeable.close(); } catch (final IOException | RuntimeException ex) { LOG.warning("Unable to close (leaked?) stream: " + ex.getMessage()); From acac7951a48c60bcc36de45a96b1a7a26d418aee Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 8 Feb 2025 13:49:55 -0500 Subject: [PATCH 386/430] Update OpenTelemetry to 1.47.0 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 72fba1afd8f..1055c57bb33 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -189,7 +189,7 @@ 2.0.69.Final 2.0.12 3.2.2 - 1.46.0 + 1.47.0 1.29.0-alpha 0.33.0 2.0.27 From 5246612ae4efd39a78c5b7128f70d64449f70d43 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 8 Feb 2025 19:16:25 -0500 Subject: [PATCH 387/430] CXF-9039: Run Jakarta RESTful Web Services 3.1 TCK. Fixing more test failures --- .../cxf/jaxrs/provider/json/JSONProvider.java | 4 ++-- .../provider/jsrjsonb/JsrJsonbProvider.java | 16 +++++++++++----- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java index 55896e93cd5..f7ff20b9995 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java @@ -81,8 +81,8 @@ import org.codehaus.jettison.mapped.TypeConverter; import org.codehaus.jettison.util.StringIndenter; -@Produces({"application/json", "application/*+json" }) -@Consumes({"application/json", "application/*+json" }) +@Produces({"application/json", "application/*+json", "text/json" /* deprecated */ }) +@Consumes({"application/json", "application/*+json", "text/json"/* deprecated */ }) @Provider public class JSONProvider extends AbstractJAXBProvider { diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java index fbf3b3218f1..df064752ea5 100644 --- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java +++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/jsrjsonb/JsrJsonbProvider.java @@ -19,6 +19,7 @@ package org.apache.cxf.jaxrs.provider.jsrjsonb; +import java.io.File; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -83,8 +84,7 @@ public boolean isWriteable(Class type, Type genericType, Annotation[] annotat return isSupportedMediaType(mediaType) && !OutputStream.class.isAssignableFrom(type) && !Writer.class.isAssignableFrom(type) - && !CharSequence.class.isAssignableFrom(type) - && !Response.class.isAssignableFrom(type) + && !isKnownUnsupportedInOutType(type) && !JAXRSUtils.isStreamingLikeOutType(type, genericType); } @@ -98,11 +98,10 @@ public void writeTo(Object t, Class type, Type genericType, Annotation[] anno @Override public boolean isReadable(Class type, Type genericType, Annotation[] annotations, MediaType mediaType) { return isSupportedMediaType(mediaType) - && !Response.class.isAssignableFrom(type) - && !CharSequence.class.isAssignableFrom(type) + && !isKnownUnsupportedInOutType(type) && !JAXRSUtils.isStreamingLikeOutType(type, genericType); } - + @Override public Object readFrom(Class type, Type genericType, Annotation[] annotations, MediaType mediaType, MultivaluedMap httpHeaders, InputStream entityStream) @@ -143,4 +142,11 @@ private Jsonb jsonbFor(Class type) { return DefaultJsonbSupplier.INSTANCE; } } + + private static boolean isKnownUnsupportedInOutType(Class type) { + return Response.class.isAssignableFrom(type) + || CharSequence.class.isAssignableFrom(type) + || File.class.isAssignableFrom(type) + || byte[].class.isAssignableFrom(type); + } } From 59e917fcc3e61a892ef1f9a2cad5a7d631dddd91 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 10 Feb 2025 07:53:38 -0500 Subject: [PATCH 388/430] Bump github/codeql-action from 3.28.8 to 3.28.9 (#2264) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.8 to 3.28.9. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/dd746615b3b9d728a6a37ca2045b68ca76d4841a...9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9099e297e55..db48e01c7f2 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/init@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8 + uses: github/codeql-action/analyze@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 4a2cb1c1172..cd24f6f2f61 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@dd746615b3b9d728a6a37ca2045b68ca76d4841a #tag=v2 + uses: github/codeql-action/upload-sarif@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 #tag=v2 with: sarif_file: results.sarif From 4888c634ddbed09bd8cf332ed527565b82cb1423 Mon Sep 17 00:00:00 2001 From: Manuel <48989438+mash-sap@users.noreply.github.com> Date: Tue, 11 Feb 2025 21:50:57 +0100 Subject: [PATCH 389/430] CXF-9091: Cache payload for oneway (#2262) (cherry picked from commit 914fe0beca548dd8e98b562cead142b20640ebde) --- .../org/apache/cxf/ws/addressing/impl/InternalContextUtils.java | 1 + 1 file changed, 1 insertion(+) diff --git a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java index c89108f796a..343213bee62 100644 --- a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java +++ b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/impl/InternalContextUtils.java @@ -274,6 +274,7 @@ public static void rebaseResponse(EndpointReferenceType reference, DelegatingInputStream in = inMessage.getContent(DelegatingInputStream.class); if (in != null) { in.cacheInput(); + inMessage.put("cxf.io.cacheinput", Boolean.TRUE); } } if (chain != null && !chain.doIntercept(partialResponse) From d475d3642bfe17cfd3733a9f4df8380c9f511b07 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 17:19:54 -0500 Subject: [PATCH 390/430] Bump cxf.micrometer-tracing.version from 1.4.2 to 1.4.3 (#2265) Bumps `cxf.micrometer-tracing.version` from 1.4.2 to 1.4.3. Updates `io.micrometer:micrometer-tracing-bridge-brave` from 1.4.2 to 1.4.3 - [Release notes](https://github.com/micrometer-metrics/tracing/releases) - [Commits](https://github.com/micrometer-metrics/tracing/compare/v1.4.2...v1.4.3) Updates `io.micrometer:micrometer-tracing-bridge-otel` from 1.4.2 to 1.4.3 - [Release notes](https://github.com/micrometer-metrics/tracing/releases) - [Commits](https://github.com/micrometer-metrics/tracing/compare/v1.4.2...v1.4.3) Updates `io.micrometer:micrometer-tracing-test` from 1.4.2 to 1.4.3 - [Release notes](https://github.com/micrometer-metrics/tracing/releases) - [Commits](https://github.com/micrometer-metrics/tracing/compare/v1.4.2...v1.4.3) Updates `io.micrometer:micrometer-tracing-integration-test` from 1.4.2 to 1.4.3 - [Release notes](https://github.com/micrometer-metrics/tracing/releases) - [Commits](https://github.com/micrometer-metrics/tracing/compare/v1.4.2...v1.4.3) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-tracing-bridge-brave dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-tracing-bridge-otel dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-tracing-test dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-tracing-integration-test dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 1055c57bb33..2b60644155d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -176,7 +176,7 @@ 9.12.1 3.9.8 1.14.3 - 1.4.2 + 1.4.3 3.1 3.0.1 3.1.2 From dde8e84f03e25858f1d7ed48714a8ad2eabfaf2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 11 Feb 2025 19:58:09 -0500 Subject: [PATCH 391/430] Bump cxf.micrometer.version from 1.14.3 to 1.14.4 (#2266) Bumps `cxf.micrometer.version` from 1.14.3 to 1.14.4. Updates `io.micrometer:micrometer-core` from 1.14.3 to 1.14.4 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.14.3...v1.14.4) Updates `io.micrometer:micrometer-observation` from 1.14.3 to 1.14.4 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.14.3...v1.14.4) Updates `io.micrometer:micrometer-test` from 1.14.3 to 1.14.4 - [Release notes](https://github.com/micrometer-metrics/micrometer/releases) - [Commits](https://github.com/micrometer-metrics/micrometer/compare/v1.14.3...v1.14.4) --- updated-dependencies: - dependency-name: io.micrometer:micrometer-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-observation dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.micrometer:micrometer-test dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 2b60644155d..16def98fc14 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -175,7 +175,7 @@ 1.5.16 9.12.1 3.9.8 - 1.14.3 + 1.14.4 1.4.3 3.1 3.0.1 From 160f9708fd9ad62965e22c5106284ecd2a9bf4c3 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Tue, 11 Feb 2025 21:22:42 -0500 Subject: [PATCH 392/430] Update Project Reactor to 3.7.3 --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 16def98fc14..1e4c602408d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -198,7 +198,7 @@ 4.10.0 3.5.1 1.0.4 - 3.7.2 + 3.7.3 1.7.15 1.3.8 2.2.21 From ae53e58f4924d53ef22e73175232b08a160bae25 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 11:32:25 -0500 Subject: [PATCH 393/430] Bump cxf.netty.version from 4.1.117.Final to 4.1.118.Final (#2267) Bumps `cxf.netty.version` from 4.1.117.Final to 4.1.118.Final. Updates `io.netty:netty-codec-http` from 4.1.117.Final to 4.1.118.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.117.Final...netty-4.1.118.Final) Updates `io.netty:netty-codec-http2` from 4.1.117.Final to 4.1.118.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.117.Final...netty-4.1.118.Final) Updates `io.netty:netty-codec-socks` from 4.1.117.Final to 4.1.118.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.117.Final...netty-4.1.118.Final) Updates `io.netty:netty-handler-proxy` from 4.1.117.Final to 4.1.118.Final - [Commits](https://github.com/netty/netty/compare/netty-4.1.117.Final...netty-4.1.118.Final) --- updated-dependencies: - dependency-name: io.netty:netty-codec-http dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: io.netty:netty-codec-http2 dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.netty:netty-codec-socks dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: io.netty:netty-handler-proxy dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index c147480d6b9..0453d47bb5f 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -34,7 +34,7 @@ 3.4.2 4.2.0 12.0.16 - 4.1.117.Final + 4.1.118.Final 4.5.14 5.18.3 3.0.0 diff --git a/parent/pom.xml b/parent/pom.xml index 1e4c602408d..6b96968875d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -185,7 +185,7 @@ 2022.7 3.2.1 [4,5) - 4.1.117.Final + 4.1.118.Final 2.0.69.Final 2.0.12 3.2.2 From 48273320cb6eecc5310926f16161294374260afa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 11:32:45 -0500 Subject: [PATCH 394/430] Bump cxf.hibernate.em.version from 6.6.6.Final to 6.6.7.Final (#2268) Bumps `cxf.hibernate.em.version` from 6.6.6.Final to 6.6.7.Final. Updates `org.hibernate.orm:hibernate-core` from 6.6.6.Final to 6.6.7.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.7/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.6...6.6.7) Updates `org.hibernate.orm:hibernate-jcache` from 6.6.6.Final to 6.6.7.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.7/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.6...6.6.7) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.hibernate.orm:hibernate-jcache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 6b96968875d..bc04fb096c1 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -120,7 +120,7 @@ 2.0.1 3.0 5.5.0 - 6.6.6.Final + 6.6.7.Final 8.0.2.Final 2.7.4 [4.0,4.2) From 6c789ecfff9fadf32d60fc57a7495b0206fad408 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:05:20 -0500 Subject: [PATCH 395/430] Bump cxf.wiremock.version from 3.11.0 to 3.12.0 (#2270) Bumps `cxf.wiremock.version` from 3.11.0 to 3.12.0. Updates `org.wiremock:wiremock-standalone` from 3.11.0 to 3.12.0 - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.11.0...3.12.0) Updates `org.wiremock:wiremock-jetty12` from 3.11.0 to 3.12.0 - [Release notes](https://github.com/wiremock/wiremock/releases) - [Commits](https://github.com/wiremock/wiremock/compare/3.11.0...3.12.0) --- updated-dependencies: - dependency-name: org.wiremock:wiremock-standalone dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.wiremock:wiremock-jetty12 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index bc04fb096c1..0e1fdc0077d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -230,7 +230,7 @@ 3.0.2 2.3 2.0.1 - 3.11.0 + 3.12.0 7.1.0 4.2.1 1.6.3 From 3a9341afe994db1e445204b06cd4f08357b3d01f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 13 Feb 2025 10:05:32 -0500 Subject: [PATCH 396/430] Bump org.apache.camel.springboot:camel-spring-boot-dependencies (#2269) Bumps org.apache.camel.springboot:camel-spring-boot-dependencies from 4.9.0 to 4.10.0. --- updated-dependencies: - dependency-name: org.apache.camel.springboot:camel-spring-boot-dependencies dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 0453d47bb5f..ef722a156c8 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -51,7 +51,7 @@ 2.3.232 5.13.1.Final 2.6.7 - 4.9.0 + 4.10.0 13.5 From 8ac8218c93415b996ff32b38cb6064f930e05262 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 07:55:04 -0500 Subject: [PATCH 397/430] Bump cxf.spring.version from 6.2.2 to 6.2.3 (#2271) Bumps `cxf.spring.version` from 6.2.2 to 6.2.3. Updates `org.springframework:spring-tx` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) Updates `org.springframework:spring-core` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) Updates `org.springframework:spring-beans` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) Updates `org.springframework:spring-context` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) Updates `org.springframework:spring-web` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) Updates `org.springframework:spring-webmvc` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) Updates `org.springframework:spring-aop` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) Updates `org.springframework:spring-test` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) Updates `org.springframework:spring-orm` from 6.2.2 to 6.2.3 - [Release notes](https://github.com/spring-projects/spring-framework/releases) - [Commits](https://github.com/spring-projects/spring-framework/compare/v6.2.2...v6.2.3) --- updated-dependencies: - dependency-name: org.springframework:spring-tx dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework:spring-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework:spring-beans dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework:spring-context dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework:spring-web dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework:spring-webmvc dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework:spring-aop dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework:spring-test dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework:spring-orm dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 0e1fdc0077d..8595336f83f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -214,7 +214,7 @@ 3.2.10 spring-test 6.4.2 - 6.2.2 + 6.2.3 1.8.3 5.18.3 2.2.28 From d6e2f4d1f515e4e248c8e5994a42110f2a74cca8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 14 Feb 2025 07:55:19 -0500 Subject: [PATCH 398/430] Bump org.testng:testng from 7.10.2 to 7.11.0 (#2272) Bumps [org.testng:testng](https://github.com/testng-team/testng) from 7.10.2 to 7.11.0. - [Release notes](https://github.com/testng-team/testng/releases) - [Changelog](https://github.com/testng-team/testng/blob/master/CHANGES.txt) - [Commits](https://github.com/testng-team/testng/compare/7.10.2...7.11.0) --- updated-dependencies: - dependency-name: org.testng:testng dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- systests/microprofile/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/systests/microprofile/pom.xml b/systests/microprofile/pom.xml index cf63132d41a..720b2afec38 100644 --- a/systests/microprofile/pom.xml +++ b/systests/microprofile/pom.xml @@ -40,7 +40,7 @@ org.testng testng - 7.10.2 + 7.11.0 test From 0cff320bb0bd4a50624a266b07247f2f35d0400a Mon Sep 17 00:00:00 2001 From: Colm O hEigeartaigh Date: Fri, 14 Feb 2025 13:38:32 +0000 Subject: [PATCH 399/430] Updating to WSS4J 4.0.0 (#1476) --- parent/pom.xml | 2 +- .../cxf/rs/security/oauth2/saml/SamlOAuthValidator.java | 2 +- .../rs/security/saml/sso/SAMLSSOResponseValidator.java | 2 +- .../security/saml/sso/SamlpRequestComponentBuilder.java | 2 +- .../rs/security/saml/sso/SAMLResponseValidatorTest.java | 8 ++++++-- .../security/saml/xacml2/DefaultXACMLRequestBuilder.java | 2 +- .../security/saml/xacml2/RequestComponentBuilderTest.java | 2 +- .../cxf/sts/token/delegation/SAMLDelegationHandler.java | 4 ++-- .../apache/cxf/sts/token/renewer/SAMLTokenRenewer.java | 4 ++-- 9 files changed, 16 insertions(+), 12 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index 8595336f83f..a737a934d9f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -234,7 +234,7 @@ 7.1.0 4.2.1 1.6.3 - 3.0.4 + 4.0.0 2.3.1 3.8.16.Final 2.1 diff --git a/rt/rs/security/oauth-parent/oauth2-saml/src/main/java/org/apache/cxf/rs/security/oauth2/saml/SamlOAuthValidator.java b/rt/rs/security/oauth-parent/oauth2-saml/src/main/java/org/apache/cxf/rs/security/oauth2/saml/SamlOAuthValidator.java index 9da501b2d07..27ccf9ebfb7 100644 --- a/rt/rs/security/oauth-parent/oauth2-saml/src/main/java/org/apache/cxf/rs/security/oauth2/saml/SamlOAuthValidator.java +++ b/rt/rs/security/oauth-parent/oauth2-saml/src/main/java/org/apache/cxf/rs/security/oauth2/saml/SamlOAuthValidator.java @@ -98,7 +98,7 @@ private void validateAudience(Message message, Conditions cs) { for (AudienceRestriction ar : restrictions) { List audiences = ar.getAudiences(); for (Audience a : audiences) { - if (absoluteAddress.equals(a.getAudienceURI())) { + if (absoluteAddress.equals(a.getURI())) { return; } } diff --git a/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/SAMLSSOResponseValidator.java b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/SAMLSSOResponseValidator.java index dbc9b32d04a..85c0e0ede96 100644 --- a/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/SAMLSSOResponseValidator.java +++ b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/SAMLSSOResponseValidator.java @@ -295,7 +295,7 @@ private boolean matchSaml2AudienceRestriction( if (audienceRestriction.getAudiences() != null) { boolean matchFound = false; for (org.opensaml.saml.saml2.core.Audience audience : audienceRestriction.getAudiences()) { - if (appliesTo.equals(audience.getAudienceURI())) { + if (appliesTo.equals(audience.getURI())) { matchFound = true; oneMatchFound = true; break; diff --git a/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/SamlpRequestComponentBuilder.java b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/SamlpRequestComponentBuilder.java index 415aedb3bec..9e9bbad53d5 100644 --- a/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/SamlpRequestComponentBuilder.java +++ b/rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/SamlpRequestComponentBuilder.java @@ -192,7 +192,7 @@ public static AuthnContextClassRef createAuthnCtxClassRef( builderFactory.getBuilder(AuthnContextClassRef.DEFAULT_ELEMENT_NAME); } AuthnContextClassRef authnCtxClassRef = requestedAuthnCtxClassRefBuilder.buildObject(); - authnCtxClassRef.setAuthnContextClassRef(authnCtxClassRefValue); + authnCtxClassRef.setURI(authnCtxClassRefValue); return authnCtxClassRef; } diff --git a/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/SAMLResponseValidatorTest.java b/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/SAMLResponseValidatorTest.java index 52e90f32dd0..1b4bb80b52b 100644 --- a/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/SAMLResponseValidatorTest.java +++ b/rt/rs/security/sso/saml/src/test/java/org/apache/cxf/rs/security/saml/sso/SAMLResponseValidatorTest.java @@ -286,7 +286,9 @@ public void testResponseModifiedSignedAssertion() throws Exception { DOMUtils.findAllElementsByTagNameNS(policyElement, SAMLConstants.SAML20_NS, "Assertion"); assertNotNull(assertions); assertTrue(assertions.size() == 1); - assertions.get(0).setAttributeNS(null, "newattr", "http://apache.org"); + Thread.sleep(1000L); + Instant issueInstant = Instant.now(); + assertions.get(0).setAttributeNS(null, "IssueInstant", issueInstant.toString()); Response marshalledResponse = (Response)OpenSAMLUtil.fromDom(policyElement); @@ -395,7 +397,9 @@ public void testModifiedSignedResponse() throws Exception { doc.appendChild(policyElement); assertNotNull(policyElement); - policyElement.setAttributeNS(null, "newattr", "http://apache.org"); + Thread.sleep(1000L); + Instant issueInstant = Instant.now(); + policyElement.setAttributeNS(null, "IssueInstant", issueInstant.toString()); Response marshalledResponse = (Response)OpenSAMLUtil.fromDom(policyElement); diff --git a/rt/security-saml/src/main/java/org/apache/cxf/rt/security/saml/xacml2/DefaultXACMLRequestBuilder.java b/rt/security-saml/src/main/java/org/apache/cxf/rt/security/saml/xacml2/DefaultXACMLRequestBuilder.java index bf03f55c794..75a345ec104 100644 --- a/rt/security-saml/src/main/java/org/apache/cxf/rt/security/saml/xacml2/DefaultXACMLRequestBuilder.java +++ b/rt/security-saml/src/main/java/org/apache/cxf/rt/security/saml/xacml2/DefaultXACMLRequestBuilder.java @@ -27,7 +27,7 @@ import javax.xml.namespace.QName; -import net.shibboleth.utilities.java.support.xml.DOMTypeSupport; +import net.shibboleth.shared.xml.DOMTypeSupport; import org.apache.cxf.message.Message; import org.apache.cxf.rt.security.saml.xacml.CXFMessageParser; import org.apache.cxf.rt.security.saml.xacml.XACMLConstants; diff --git a/rt/security-saml/src/test/java/org/apache/cxf/rt/security/saml/xacml2/RequestComponentBuilderTest.java b/rt/security-saml/src/test/java/org/apache/cxf/rt/security/saml/xacml2/RequestComponentBuilderTest.java index de3f660ad1a..3c100181000 100644 --- a/rt/security-saml/src/test/java/org/apache/cxf/rt/security/saml/xacml2/RequestComponentBuilderTest.java +++ b/rt/security-saml/src/test/java/org/apache/cxf/rt/security/saml/xacml2/RequestComponentBuilderTest.java @@ -31,7 +31,7 @@ import org.w3c.dom.Document; import org.w3c.dom.Element; -import net.shibboleth.utilities.java.support.xml.DOMTypeSupport; +import net.shibboleth.shared.xml.DOMTypeSupport; import org.apache.cxf.rt.security.saml.xacml.XACMLConstants; import org.apache.wss4j.common.saml.OpenSAMLUtil; import org.opensaml.xacml.ctx.ActionType; diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/delegation/SAMLDelegationHandler.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/delegation/SAMLDelegationHandler.java index 796b3013b0d..d377361389f 100644 --- a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/delegation/SAMLDelegationHandler.java +++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/delegation/SAMLDelegationHandler.java @@ -124,14 +124,14 @@ protected List getAudienceRestrictions(SamlAssertionWrapper assertion) { for (AudienceRestrictionCondition restriction : assertion.getSaml1().getConditions().getAudienceRestrictionConditions()) { for (org.opensaml.saml.saml1.core.Audience audience : restriction.getAudiences()) { - addresses.add(audience.getUri()); + addresses.add(audience.getURI()); } } } else if (assertion.getSaml2() != null) { for (org.opensaml.saml.saml2.core.AudienceRestriction restriction : assertion.getSaml2().getConditions().getAudienceRestrictions()) { for (org.opensaml.saml.saml2.core.Audience audience : restriction.getAudiences()) { - addresses.add(audience.getAudienceURI()); + addresses.add(audience.getURI()); } } } diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/renewer/SAMLTokenRenewer.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/renewer/SAMLTokenRenewer.java index 7a7d740f1c1..d7d0d3cdfa5 100644 --- a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/renewer/SAMLTokenRenewer.java +++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/renewer/SAMLTokenRenewer.java @@ -390,7 +390,7 @@ private boolean matchSaml1AudienceRestriction( for (AudienceRestrictionCondition restrCondition : restrConditions) { if (restrCondition.getAudiences() != null) { for (Audience audience : restrCondition.getAudiences()) { - if (appliesTo.equals(audience.getUri())) { + if (appliesTo.equals(audience.getURI())) { return true; } } @@ -409,7 +409,7 @@ private boolean matchSaml2AudienceRestriction( for (AudienceRestriction audienceRestriction : audienceRestrictions) { if (audienceRestriction.getAudiences() != null) { for (org.opensaml.saml.saml2.core.Audience audience : audienceRestriction.getAudiences()) { - if (appliesTo.equals(audience.getAudienceURI())) { + if (appliesTo.equals(audience.getURI())) { return true; } } From e28d4a77a7ee59d03219ff4767eae1d7bedeb207 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 15 Feb 2025 10:42:30 -0500 Subject: [PATCH 400/430] CXF-9057: Chunked Stream is closed regularly when Exception is thrown (MTOM) (#2234) --- .../cxf/phase/AbortedInvocationException.java | 48 +++++++ .../cxf/phase/PhaseInterceptorChain.java | 3 + .../Soap11FaultOutInterceptor.java | 8 +- .../Soap12FaultOutInterceptor.java | 8 +- .../http/AbstractHTTPDestination.java | 29 +++- .../jaxws/AbstractAttachmentChunkingTest.java | 128 ++++++++++++++++++ .../systest/jaxws/AttachmentChunkingTest.java | 101 ++------------ .../jaxws/AttachmentMtomChunkingTest.java | 117 ++++++++++++++++ .../test/resources/attachments/cxf9057.wsdl | 1 + 9 files changed, 347 insertions(+), 96 deletions(-) create mode 100644 core/src/main/java/org/apache/cxf/phase/AbortedInvocationException.java create mode 100644 systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AbstractAttachmentChunkingTest.java create mode 100644 systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AttachmentMtomChunkingTest.java diff --git a/core/src/main/java/org/apache/cxf/phase/AbortedInvocationException.java b/core/src/main/java/org/apache/cxf/phase/AbortedInvocationException.java new file mode 100644 index 00000000000..ee2553d1af1 --- /dev/null +++ b/core/src/main/java/org/apache/cxf/phase/AbortedInvocationException.java @@ -0,0 +1,48 @@ +/** + * 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.cxf.phase; + +/** + * Represents transport-specific exceptions which are used to indicate that + * a given invocation was suspended + */ +public class AbortedInvocationException extends RuntimeException { + + private static final long serialVersionUID = 6889545463301144757L; + + + public AbortedInvocationException(Throwable cause) { + super(cause); + } + + public AbortedInvocationException() { + } + + + /** + * Returns a transport-specific runtime exception + * @return RuntimeException the transport-specific runtime exception, + * can be null for asynchronous transports + */ + public RuntimeException getRuntimeException() { + Throwable ex = getCause(); + return ex instanceof RuntimeException ? (RuntimeException)ex : null; + } +} diff --git a/core/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java b/core/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java index c8a52a8e95c..316e58d26f3 100644 --- a/core/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java +++ b/core/src/main/java/org/apache/cxf/phase/PhaseInterceptorChain.java @@ -325,6 +325,9 @@ public synchronized boolean doIntercept(Message message) { } pause(); throw ex; + } catch (AbortedInvocationException ex) { + abort(); + throw ex; } catch (RuntimeException ex) { if (!faultOccurred) { faultOccurred = true; diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap11FaultOutInterceptor.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap11FaultOutInterceptor.java index 5e612a59326..95ebee9f7c4 100644 --- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap11FaultOutInterceptor.java +++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap11FaultOutInterceptor.java @@ -37,6 +37,7 @@ import org.apache.cxf.interceptor.Fault; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageUtils; +import org.apache.cxf.phase.AbortedInvocationException; import org.apache.cxf.phase.Phase; import org.apache.cxf.staxutils.StaxUtils; @@ -69,7 +70,12 @@ public void handleMessage(SoapMessage message) throws Fault { // have been streaming some data already and may not be able to inject a fault in the middle // of the data transfer. if (MessageUtils.getContextualBoolean(message, Message.PARTIAL_ATTACHMENTS_MESSAGE, false)) { - throw f; + // Signal that response has to be aborted midway + if (MessageUtils.getContextualBoolean(message, Message.MTOM_ENABLED, false)) { + throw new AbortedInvocationException(f); + } else { + throw f; + } } XMLStreamWriter writer = message.getContent(XMLStreamWriter.class); diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java index 35cd7498a63..e766282c028 100644 --- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java +++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/Soap12FaultOutInterceptor.java @@ -38,6 +38,7 @@ import org.apache.cxf.interceptor.Fault; import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageUtils; +import org.apache.cxf.phase.AbortedInvocationException; import org.apache.cxf.phase.Phase; import org.apache.cxf.staxutils.StaxUtils; @@ -71,7 +72,12 @@ public void handleMessage(SoapMessage message) throws Fault { // have been streaming some data already and may not be able to inject a fault in the middle // of the data transfer. if (MessageUtils.getContextualBoolean(message, Message.PARTIAL_ATTACHMENTS_MESSAGE, false)) { - throw f; + // Signal that response has to be aborted midway + if (MessageUtils.getContextualBoolean(message, Message.MTOM_ENABLED, false)) { + throw new AbortedInvocationException(f); + } else { + throw f; + } } XMLStreamWriter writer = message.getContent(XMLStreamWriter.class); diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java index 566e05a1b3c..3433fa91a42 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/AbstractHTTPDestination.java @@ -63,6 +63,7 @@ import org.apache.cxf.message.Message; import org.apache.cxf.message.MessageImpl; import org.apache.cxf.message.MessageUtils; +import org.apache.cxf.phase.AbortedInvocationException; import org.apache.cxf.policy.PolicyDataEngine; import org.apache.cxf.security.SecurityContext; import org.apache.cxf.security.transport.TLSSessionInfo; @@ -262,8 +263,17 @@ public void invoke(final ServletConfig config, copyKnownRequestAttributes(req, inMessage); try { - incomingObserver.onMessage(inMessage); - invokeComplete(context, req, resp, inMessage); + try { + incomingObserver.onMessage(inMessage); + invokeComplete(context, req, resp, inMessage); + } catch (AbortedInvocationException ex) { + maybeResetAndCloseResponseOutputStream(resp); + if (ex.getRuntimeException() != null) { + throw ex.getRuntimeException(); + } else { + throw ex; + } + } } catch (SuspendedInvocationException ex) { if (ex.getRuntimeException() != null) { throw ex.getRuntimeException(); @@ -692,6 +702,21 @@ protected OutputStream flushHeaders(Message outMessage, boolean getStream) throw return responseStream; } + private void maybeResetAndCloseResponseOutputStream(HttpServletResponse response) throws IOException { + try { + // The Servlet API does not provide means to abort the response, the best + // we could do is reset buffers (only partial data is going to be sent) and close + // the connection. + if (!response.isCommitted()) { + response.setHeader(HttpHeaderHelper.CONNECTION, HttpHeaderHelper.CLOSE); + response.resetBuffer(); + response.getOutputStream().close(); + } + } catch (IllegalStateException ex) { + // response.getWriter() has already been called + } + } + private void closeResponseOutputStream(HttpServletResponse response) throws IOException { try { response.getOutputStream().close(); diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AbstractAttachmentChunkingTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AbstractAttachmentChunkingTest.java new file mode 100644 index 00000000000..2c01e081f0b --- /dev/null +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AbstractAttachmentChunkingTest.java @@ -0,0 +1,128 @@ +/** + * 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.cxf.systest.jaxws; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.Arrays; +import java.util.concurrent.ThreadLocalRandom; + +import jakarta.activation.DataHandler; +import jakarta.activation.DataSource; +import jakarta.xml.ws.Binding; +import jakarta.xml.ws.BindingProvider; +import jakarta.xml.ws.soap.SOAPBinding; +import org.apache.cxf.Download; +import org.apache.cxf.DownloadFault_Exception; +import org.apache.cxf.DownloadNextResponseType; +import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; +import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; + +import org.junit.Test; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; + +abstract class AbstractAttachmentChunkingTest extends AbstractBusClientServerTestBase { + protected static final class DownloadImpl implements Download { + @Override + public DownloadNextResponseType downloadNext(Integer minNumberOfChunks, Boolean simulate) { + final DownloadNextResponseType responseType = new DownloadNextResponseType(); + responseType.setDataContent(new DataHandler(new DataSource() { + @Override + public InputStream getInputStream() { + if (simulate) { + return simulate((minNumberOfChunks == null) ? 1 : minNumberOfChunks); + } else { + return generate(100000); + } + } + + @Override + public OutputStream getOutputStream() { + return null; + } + + @Override + public String getContentType() { + return ""; + } + + @Override + public String getName() { + return ""; + } + })); + + return responseType; + } + } + + @Test + public void testChunking() throws IOException, DownloadFault_Exception { + final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); + factory.setServiceClass(Download.class); + + final Download client = (Download) factory.create(); + final BindingProvider bindingProvider = (BindingProvider) client; + final Binding binding = bindingProvider.getBinding(); + + final String address = String.format("http://localhost:%s/SoapContext/SoapPort/DownloadPort", getPort()); + bindingProvider.getRequestContext().put("jakarta.xml.ws.service.endpoint.address", address); + ((SOAPBinding) binding).setMTOMEnabled(true); + + final DownloadNextResponseType response = client.downloadNext(1, false); + assertThat(response.getDataContent().getInputStream().readAllBytes().length, equalTo(100000)); + } + + protected abstract String getPort(); + + private static InputStream generate(int size) { + final byte[] buf = new byte[size]; + Arrays.fill(buf, (byte) 'x'); + return new ByteArrayInputStream(buf); + } + + private static InputStream simulate(final int minNumberOfChunks) { + return new InputStream() { + private int chunk; + + @Override + public int read() { + return (byte) 'x'; + } + + @Override + public int read(byte[] b, int off, int len) { + if (chunk++ >= minNumberOfChunks && ThreadLocalRandom.current().nextBoolean()) { + throw new IllegalArgumentException("simulated error during stream processing"); + } + + for (int i = off; i < off + len; i++) { + b[i] = (byte) 'x'; + } + + return len; + } + }; + } +} diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AttachmentChunkingTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AttachmentChunkingTest.java index fb1e00a607f..dcb3ea4c7c1 100644 --- a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AttachmentChunkingTest.java +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AttachmentChunkingTest.java @@ -19,76 +19,32 @@ package org.apache.cxf.systest.jaxws; -import java.io.ByteArrayInputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.Arrays; -import java.util.concurrent.ThreadLocalRandom; +import java.util.List; import java.util.logging.Logger; -import jakarta.activation.DataHandler; -import jakarta.activation.DataSource; import jakarta.xml.ws.Binding; import jakarta.xml.ws.BindingProvider; import jakarta.xml.ws.Endpoint; import jakarta.xml.ws.soap.SOAPBinding; import jakarta.xml.ws.soap.SOAPFaultException; import org.apache.cxf.Download; -import org.apache.cxf.DownloadFault_Exception; -import org.apache.cxf.DownloadNextResponseType; import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.ext.logging.LoggingFeature; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; -import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase; import org.apache.cxf.testutil.common.AbstractBusTestServerBase; import org.junit.BeforeClass; import org.junit.Test; import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertThrows; import static org.junit.Assert.assertTrue; -public class AttachmentChunkingTest extends AbstractBusClientServerTestBase { +public class AttachmentChunkingTest extends AbstractAttachmentChunkingTest { private static final String PORT = allocatePort(DownloadServer.class); private static final Logger LOG = LogUtils.getLogger(AttachmentChunkingTest.class); - private static final class DownloadImpl implements Download { - @Override - public DownloadNextResponseType downloadNext(Boolean simulate) { - final DownloadNextResponseType responseType = new DownloadNextResponseType(); - responseType.setDataContent(new DataHandler(new DataSource() { - @Override - public InputStream getInputStream() { - if (simulate) { - return simulate(); - } else { - return generate(100000); - } - } - - @Override - public OutputStream getOutputStream() { - return null; - } - - @Override - public String getContentType() { - return ""; - } - - @Override - public String getName() { - return ""; - } - })); - - return responseType; - } - } - public static class DownloadServer extends AbstractBusTestServerBase { protected void run() { Object implementor = new DownloadImpl(); @@ -117,63 +73,24 @@ public static void startServers() throws Exception { @Test public void testChunkingPartialFailure() { final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); + factory.setFeatures(List.of(new LoggingFeature())); factory.setServiceClass(Download.class); final Download client = (Download) factory.create(); final BindingProvider bindingProvider = (BindingProvider) client; final Binding binding = bindingProvider.getBinding(); - final String address = String.format("http://localhost:%s/SoapContext/SoapPort/DownloadPort", PORT); + final String address = String.format("http://localhost:%s/SoapContext/SoapPort/DownloadPort", getPort()); bindingProvider.getRequestContext().put("jakarta.xml.ws.service.endpoint.address", address); ((SOAPBinding) binding).setMTOMEnabled(true); // See please https://issues.apache.org/jira/browse/CXF-9057 - SOAPFaultException ex = assertThrows(SOAPFaultException.class, () -> client.downloadNext(true)); + SOAPFaultException ex = assertThrows(SOAPFaultException.class, () -> client.downloadNext(1, true)); assertThat(ex.getMessage(), containsString("simulated error during stream processing")); } - - @Test - public void testChunking() throws IOException, DownloadFault_Exception { - final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); - factory.setServiceClass(Download.class); - - final Download client = (Download) factory.create(); - final BindingProvider bindingProvider = (BindingProvider) client; - final Binding binding = bindingProvider.getBinding(); - - final String address = String.format("http://localhost:%s/SoapContext/SoapPort/DownloadPort", PORT); - bindingProvider.getRequestContext().put("jakarta.xml.ws.service.endpoint.address", address); - ((SOAPBinding) binding).setMTOMEnabled(true); - - final DownloadNextResponseType response = client.downloadNext(false); - assertThat(response.getDataContent().getInputStream().readAllBytes().length, equalTo(100000)); - } - - private static InputStream generate(int size) { - final byte[] buf = new byte[size]; - Arrays.fill(buf, (byte) 'x'); - return new ByteArrayInputStream(buf); - } - - private static InputStream simulate() { - return new InputStream() { - @Override - public int read() { - return (byte) 'x'; - } - @Override - public int read(byte[] b, int off, int len) { - if (ThreadLocalRandom.current().nextBoolean()) { - throw new IllegalArgumentException("simulated error during stream processing"); - } - - for (int i = off; i < off + len; i++) { - b[i] = (byte) 'x'; - } - - return len; - } - }; + @Override + protected String getPort() { + return PORT; } } diff --git a/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AttachmentMtomChunkingTest.java b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AttachmentMtomChunkingTest.java new file mode 100644 index 00000000000..c4da85e9003 --- /dev/null +++ b/systests/jaxws/src/test/java/org/apache/cxf/systest/jaxws/AttachmentMtomChunkingTest.java @@ -0,0 +1,117 @@ +/** + * 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.cxf.systest.jaxws; + +import java.io.IOException; +import java.util.List; +import java.util.logging.Logger; + +import jakarta.xml.ws.Binding; +import jakarta.xml.ws.BindingProvider; +import jakarta.xml.ws.Endpoint; +import jakarta.xml.ws.WebServiceException; +import jakarta.xml.ws.soap.SOAPBinding; +import org.apache.cxf.Download; +import org.apache.cxf.DownloadFault_Exception; +import org.apache.cxf.DownloadNextResponseType; +import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.ext.logging.LoggingFeature; +import org.apache.cxf.helpers.IOUtils; +import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; +import org.apache.cxf.testutil.common.AbstractBusTestServerBase; + +import org.junit.BeforeClass; +import org.junit.Test; + +import static org.junit.Assert.assertThrows; +import static org.junit.Assert.assertTrue; + +public class AttachmentMtomChunkingTest extends AbstractAttachmentChunkingTest { + private static final String PORT = allocatePort(DownloadServer.class); + private static final Logger LOG = LogUtils.getLogger(AttachmentMtomChunkingTest.class); + + public static class DownloadServer extends AbstractBusTestServerBase { + protected void run() { + Object implementor = new DownloadImpl(); + String address = "http://localhost:" + PORT + "/SoapContext/SoapPort"; + final Endpoint endpoint = Endpoint.publish(address, implementor, new LoggingFeature()); + ((SOAPBinding)endpoint.getBinding()).setMTOMEnabled(true); + } + + public static void main(String[] args) { + try { + DownloadServer s = new DownloadServer(); + s.start(); + } catch (Exception ex) { + ex.printStackTrace(); + System.exit(-1); + } finally { + LOG.info("done!"); + } + } + } + + @BeforeClass + public static void startServers() throws Exception { + assertTrue("server did not launch correctly", launchServer(DownloadServer.class, true)); + } + + @Test + public void testChunkingPartialEarlyFailure() throws IOException, DownloadFault_Exception { + final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); + factory.setFeatures(List.of(new LoggingFeature())); + factory.setServiceClass(Download.class); + + final Download client = (Download) factory.create(); + final BindingProvider bindingProvider = (BindingProvider) client; + final Binding binding = bindingProvider.getBinding(); + + final String address = String.format("http://localhost:%s/SoapContext/SoapPort/DownloadPort", getPort()); + bindingProvider.getRequestContext().put("jakarta.xml.ws.service.endpoint.address", address); + ((SOAPBinding) binding).setMTOMEnabled(true); + + // See please https://issues.apache.org/jira/browse/CXF-9057 + assertThrows(WebServiceException.class, () -> client.downloadNext(1, true)); + } + + @Test + public void testChunkingPartialLateFailure() throws IOException, DownloadFault_Exception { + final JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); + factory.setFeatures(List.of(new LoggingFeature())); + factory.setServiceClass(Download.class); + + final Download client = (Download) factory.create(); + final BindingProvider bindingProvider = (BindingProvider) client; + final Binding binding = bindingProvider.getBinding(); + + final String address = String.format("http://localhost:%s/SoapContext/SoapPort/DownloadPort", getPort()); + bindingProvider.getRequestContext().put("jakarta.xml.ws.service.endpoint.address", address); + ((SOAPBinding) binding).setMTOMEnabled(true); + + // See please https://issues.apache.org/jira/browse/CXF-9057 + final DownloadNextResponseType response = client.downloadNext(10, true); + assertThrows(IOException.class, () -> IOUtils.readBytesFromStream(response.getDataContent().getInputStream())); + } + + @Override + protected String getPort() { + return PORT; + } +} diff --git a/systests/jaxws/src/test/resources/attachments/cxf9057.wsdl b/systests/jaxws/src/test/resources/attachments/cxf9057.wsdl index 721fa08bb44..9a83f31a96e 100644 --- a/systests/jaxws/src/test/resources/attachments/cxf9057.wsdl +++ b/systests/jaxws/src/test/resources/attachments/cxf9057.wsdl @@ -21,6 +21,7 @@ + From 3966ff65ceb47231b79e58e584f1840e389a20e6 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 16 Feb 2025 14:26:52 -0500 Subject: [PATCH 401/430] Update Apache Tomcat to 10.1.35 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index ef722a156c8..62c72cf73c6 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -38,7 +38,7 @@ 4.5.14 5.18.3 3.0.0 - 10.1.34 + 10.1.35 5.1.2.Final 2.12.1 9.12.1 diff --git a/parent/pom.xml b/parent/pom.xml index a737a934d9f..004f797a7e1 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -219,7 +219,7 @@ 5.18.3 2.2.28 3.0.0 - 10.1.34 + 10.1.35 1.8 2.3.18.Final 3.0.4 From 0929bc5b6938403f7469c5016be2fcb62a67324d Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 16 Feb 2025 15:57:57 -0500 Subject: [PATCH 402/430] Update Brave to 6.1.0 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 62c72cf73c6..f9989d734ac 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -44,7 +44,7 @@ 9.12.1 5.0.0 1.9.22.1 - 6.0.3 + 6.1.0 3.4.3 2.1 2.31.0 diff --git a/parent/pom.xml b/parent/pom.xml index 004f797a7e1..1b35263a487 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -96,7 +96,7 @@ [3.0, 4.0) 3.0.13 1.77 - 6.0.3 + 6.1.0 4.0.1 4.8.25 1.5.1 From 84a53f9c81fcbb87e0286c9e6df75853c09cd93b Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sun, 16 Feb 2025 16:10:25 -0500 Subject: [PATCH 403/430] Update Zipkin Reporter to 3.5.0 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index f9989d734ac..2581f9a972a 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -45,7 +45,7 @@ 5.0.0 1.9.22.1 6.1.0 - 3.4.3 + 3.5.0 2.1 2.31.0 2.3.232 diff --git a/parent/pom.xml b/parent/pom.xml index 1b35263a487..313c3b654d7 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -238,7 +238,7 @@ 2.3.1 3.8.16.Final 2.1 - 3.4.3 + 3.5.0 1.0.1 From 74c25d6d555af06a44c6365d43dcd6e93f8aec13 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Mon, 17 Feb 2025 11:32:24 -0500 Subject: [PATCH 404/430] Fix Tomcat-related test cases (need --add-opens java.base/java.io=ALL-UNNAMED) --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 313c3b654d7..a673584d90c 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -2294,7 +2294,7 @@ - -ea --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.https=ALL-UNNAMED + -ea --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.net=ALL-UNNAMED --add-opens java.base/sun.net.www.protocol.https=ALL-UNNAMED --add-opens java.base/java.io=ALL-UNNAMED From fbc3d28f0f8f1c22896a483d6727352fd0c99fd2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 17 Feb 2025 22:08:54 -0500 Subject: [PATCH 405/430] Bump org.springframework.ldap:spring-ldap-core from 3.2.10 to 3.2.11 (#2273) Bumps [org.springframework.ldap:spring-ldap-core](https://github.com/spring-projects/spring-ldap) from 3.2.10 to 3.2.11. - [Release notes](https://github.com/spring-projects/spring-ldap/releases) - [Changelog](https://github.com/spring-projects/spring-ldap/blob/main/changelog.txt) - [Commits](https://github.com/spring-projects/spring-ldap/compare/3.2.10...3.2.11) --- updated-dependencies: - dependency-name: org.springframework.ldap:spring-ldap-core dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index a673584d90c..6c6dd62195d 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -211,7 +211,7 @@ 2.3 2.3_2 3.4.2 - 3.2.10 + 3.2.11 spring-test 6.4.2 6.2.3 From 3efe2deba4086aae0b9ebd6f7ee16253decc7c82 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 18 Feb 2025 13:25:49 -0500 Subject: [PATCH 406/430] Bump org.owasp:dependency-check-maven from 12.0.2 to 12.1.0 (#2274) Bumps [org.owasp:dependency-check-maven](https://github.com/jeremylong/DependencyCheck) from 12.0.2 to 12.1.0. - [Release notes](https://github.com/jeremylong/DependencyCheck/releases) - [Changelog](https://github.com/jeremylong/DependencyCheck/blob/main/CHANGELOG.md) - [Commits](https://github.com/jeremylong/DependencyCheck/compare/v12.0.2...v12.1.0) --- updated-dependencies: - dependency-name: org.owasp:dependency-check-maven dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 862585c11da..414f3d8d80b 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 17 UTF-8 scp://people.apache.org/www/cxf.apache.org/maven-site - 12.0.2 + 12.1.0 clean install From 65c4e43d7c33a926bea2c493b7f9fb652c04baa0 Mon Sep 17 00:00:00 2001 From: Freeman Fang Date: Thu, 20 Feb 2025 10:16:10 -0500 Subject: [PATCH 407/430] [CXF-9112]OAuthRequestFilter: Better to use CXF StringUtils to check if servletPath|pathInfo isEmpty or not --- .../cxf/rs/security/oauth2/filters/OAuthRequestFilter.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/filters/OAuthRequestFilter.java b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/filters/OAuthRequestFilter.java index f9595cfc387..43c7dbe2ce6 100644 --- a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/filters/OAuthRequestFilter.java +++ b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/filters/OAuthRequestFilter.java @@ -204,14 +204,14 @@ protected boolean checkRequestURI(HttpServletRequest request, List uris, } String servletPath = request.getServletPath(); String pathInfo = request.getPathInfo(); - if (pathInfo == null) { + if (StringUtils.isEmpty(pathInfo)) { if (servletPath != null) { servletPath += ""; } } else { servletPath += pathInfo; } - if (servletPath == null) { + if (StringUtils.isEmpty(servletPath)) { servletPath = (String)m.get(Message.PATH_INFO); } boolean foundValidScope = false; From 468135c46f320bb5b397562355ac617069255ed0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 12:15:36 -0500 Subject: [PATCH 408/430] Bump org.yaml:snakeyaml from 2.3 to 2.4 (#2277) Bumps [org.yaml:snakeyaml](https://bitbucket.org/snakeyaml/snakeyaml) from 2.3 to 2.4. - [Commits](https://bitbucket.org/snakeyaml/snakeyaml/branches/compare/snakeyaml-2.4..snakeyaml-2.3) --- updated-dependencies: - dependency-name: org.yaml:snakeyaml dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 6c6dd62195d..555affb58ab 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -208,7 +208,7 @@ jakarta.servlet 6.0.0 2.0.16 - 2.3 + 2.4 2.3_2 3.4.2 3.2.11 From 9990e632d30c97541c508aba6be86899b9bef43e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 20 Feb 2025 12:15:50 -0500 Subject: [PATCH 409/430] Bump cxf.spring.security.version from 6.4.2 to 6.4.3 (#2276) Bumps `cxf.spring.security.version` from 6.4.2 to 6.4.3. Updates `org.springframework.security:spring-security-web` from 6.4.2 to 6.4.3 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.4.2...6.4.3) Updates `org.springframework.security:spring-security-config` from 6.4.2 to 6.4.3 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.4.2...6.4.3) Updates `org.springframework.security:spring-security-core` from 6.4.2 to 6.4.3 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.4.2...6.4.3) Updates `org.springframework.security:spring-security-acl` from 6.4.2 to 6.4.3 - [Release notes](https://github.com/spring-projects/spring-security/releases) - [Changelog](https://github.com/spring-projects/spring-security/blob/main/RELEASE.adoc) - [Commits](https://github.com/spring-projects/spring-security/compare/6.4.2...6.4.3) --- updated-dependencies: - dependency-name: org.springframework.security:spring-security-web dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.security:spring-security-config dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.security:spring-security-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.springframework.security:spring-security-acl dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 555affb58ab..f5bd8d18f7a 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -213,7 +213,7 @@ 3.4.2 3.2.11 spring-test - 6.4.2 + 6.4.3 6.2.3 1.8.3 5.18.3 From 5b54e6b8a9a0eafff82afa71dae01001bb65b957 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 20 Feb 2025 21:21:38 -0500 Subject: [PATCH 410/430] Update Spring Boot to 3.4.3 --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 2581f9a972a..b77d1979dd0 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -31,7 +31,7 @@ true UTF-8 - 3.4.2 + 3.4.3 4.2.0 12.0.16 4.1.118.Final diff --git a/parent/pom.xml b/parent/pom.xml index f5bd8d18f7a..c96d2075903 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -210,7 +210,7 @@ 2.0.16 2.4 2.3_2 - 3.4.2 + 3.4.3 3.2.11 spring-test 6.4.3 From c44faecd1703e9573db4730eeed9fb1341fd17ac Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 21 Feb 2025 14:09:59 -0500 Subject: [PATCH 411/430] Bump cxf.hibernate.em.version from 6.6.7.Final to 6.6.8.Final (#2280) Bumps `cxf.hibernate.em.version` from 6.6.7.Final to 6.6.8.Final. Updates `org.hibernate.orm:hibernate-core` from 6.6.7.Final to 6.6.8.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.8/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.7...6.6.8) Updates `org.hibernate.orm:hibernate-jcache` from 6.6.7.Final to 6.6.8.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.8/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.7...6.6.8) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.hibernate.orm:hibernate-jcache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index c96d2075903..915377017e5 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -120,7 +120,7 @@ 2.0.1 3.0 5.5.0 - 6.6.7.Final + 6.6.8.Final 8.0.2.Final 2.7.4 [4.0,4.2) From 650a19442a78b2bb330212bb680ed94c486c3e95 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Sat, 22 Feb 2025 13:28:21 -0500 Subject: [PATCH 412/430] CXF-9039: Support SeBootstrap HTTPS configuration (#2195) --- .../jsse/SSLContextServerParameters.java | 54 +++++++++++ .../cxf/jaxrs/impl/RuntimeDelegateImpl.java | 43 ++++++--- .../http_jetty/JettyHTTPDestination.java | 2 +- .../http_jetty/JettyHTTPServerEngine.java | 6 ++ .../JettyHTTPServerEngineFactory.java | 10 ++ .../server/NettyHttpServerEngineFactory.java | 12 +++ .../UndertowHTTPServerEngine.java | 6 ++ .../UndertowHTTPServerEngineFactory.java | 10 ++ ...ServerEngineFactoryParametersProvider.java | 47 +++++++++ .../apache/cxf/transport/https/SSLUtils.java | 12 ++- .../jaxrs/bootstrap/SeBootstrapTest.java | 96 ++++++++++++++++++- 11 files changed, 281 insertions(+), 17 deletions(-) create mode 100644 core/src/main/java/org/apache/cxf/configuration/jsse/SSLContextServerParameters.java create mode 100644 rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPServerEngineFactoryParametersProvider.java diff --git a/core/src/main/java/org/apache/cxf/configuration/jsse/SSLContextServerParameters.java b/core/src/main/java/org/apache/cxf/configuration/jsse/SSLContextServerParameters.java new file mode 100644 index 00000000000..f74a00bfe5d --- /dev/null +++ b/core/src/main/java/org/apache/cxf/configuration/jsse/SSLContextServerParameters.java @@ -0,0 +1,54 @@ +/** + * 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.cxf.configuration.jsse; + +import java.util.Arrays; + +import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManager; + +/** + * Allows to supply to the HTTP Server the complete SSLContext already preconfigured. + */ +public class SSLContextServerParameters extends TLSServerParameters { + private final SSLContext sslContext; + + public SSLContextServerParameters(SSLContext sslContext) { + this.sslContext = sslContext; + setSecureSocketProtocol(sslContext.getProtocol()); + setJsseProvider(sslContext.getProvider().getName()); + setCipherSuites(Arrays.asList(sslContext.getServerSocketFactory().getSupportedCipherSuites())); + } + + public SSLContext getSslContext() { + return sslContext; + } + + @Override + public TrustManager[] getTrustManagers() { + throw new UnsupportedOperationException("The operation is not supported by SSLContextServerParameters"); + } + + @Override + public KeyManager[] getKeyManagers() { + throw new UnsupportedOperationException("The operation is not supported by SSLContextServerParameters"); + } +} diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RuntimeDelegateImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RuntimeDelegateImpl.java index 03ceeca44c5..acef30a93f7 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RuntimeDelegateImpl.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/RuntimeDelegateImpl.java @@ -28,6 +28,7 @@ import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.util.Optional; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; @@ -49,6 +50,8 @@ import jakarta.ws.rs.core.UriBuilder; import jakarta.ws.rs.core.Variant.VariantListBuilder; import jakarta.ws.rs.ext.RuntimeDelegate; +import org.apache.cxf.Bus; +import org.apache.cxf.configuration.jsse.SSLContextServerParameters; import org.apache.cxf.configuration.jsse.TLSServerParameters; import org.apache.cxf.configuration.security.ClientAuthentication; import org.apache.cxf.endpoint.Server; @@ -56,10 +59,13 @@ import org.apache.cxf.jaxrs.bootstrap.ConfigurationBuilderImpl; import org.apache.cxf.jaxrs.bootstrap.InstanceImpl; import org.apache.cxf.jaxrs.utils.ResourceUtils; +import org.apache.cxf.transport.http.HTTPServerEngineFactoryParametersProvider; public class RuntimeDelegateImpl extends RuntimeDelegate { - // The default value is implementation specific, using non-priviledged default port + // The default value is implementation specific, using non-priviledged default ports private static final int DEFAULT_HTTP_PORT = 8080; + private static final int DEFAULT_HTTPS_PORT = 8443; + protected Map, HeaderDelegate> headerProviders = new HashMap<>(); public RuntimeDelegateImpl() { @@ -155,16 +161,19 @@ public CompletionStage bootstrap(Application application, Configuratio instanceConfigurationBuilder = instanceConfigurationBuilder.host("localhost"); } + String protocol = "HTTP"; if (!configuration.hasProperty(Configuration.PROTOCOL)) { // The default value is "HTTP" - instanceConfigurationBuilder = instanceConfigurationBuilder.protocol("HTTP"); + instanceConfigurationBuilder = instanceConfigurationBuilder.protocol(protocol); + } else if (configuration.property(Configuration.PROTOCOL) instanceof String p) { + protocol = p; } if (!configuration.hasProperty(Configuration.PORT)) { - instanceConfigurationBuilder = instanceConfigurationBuilder.port(DEFAULT_HTTP_PORT); + instanceConfigurationBuilder = instanceConfigurationBuilder.port(getDefaultPort(protocol)); } else if (configuration.port() == Configuration.FREE_PORT) { instanceConfigurationBuilder = instanceConfigurationBuilder.port(findFreePort()); /* free port */ } else if (configuration.port() == Configuration.DEFAULT_PORT) { - instanceConfigurationBuilder = instanceConfigurationBuilder.port(DEFAULT_HTTP_PORT); + instanceConfigurationBuilder = instanceConfigurationBuilder.port(getDefaultPort(protocol)); } if (!configuration.hasProperty(Configuration.ROOT_PATH)) { // The default value is "/" @@ -177,8 +186,11 @@ public CompletionStage bootstrap(Application application, Configuratio factory.setStart(true); if ("https".equalsIgnoreCase(configuration.protocol())) { - final TLSServerParameters parameters = new TLSServerParameters(); + final SSLContext sslContext = configuration.sslContext(); + final TLSServerParameters parameters = (sslContext != null) + ? new SSLContextServerParameters(sslContext) : new TLSServerParameters(); + final SSLClientAuthentication sslClientAuthentication = configuration.sslClientAuthentication(); if (sslClientAuthentication != null) { final ClientAuthentication clientAuthentication = new ClientAuthentication(); @@ -192,12 +204,17 @@ public CompletionStage bootstrap(Application application, Configuratio parameters.setClientAuthentication(clientAuthentication); } - final SSLContext sslContext = configuration.sslContext(); - if (sslContext != null) { - parameters.setSecureSocketProtocol(sslContext.getProtocol()); - } - - // TODO: Support SSL context propagation down to HTTP engine + factory.getBus().setExtension(new HTTPServerEngineFactoryParametersProvider() { + @Override + public Optional getDefaultTlsServerParameters(Bus bus, String host, + int port, String protocol, String id) { + if ("https".equalsIgnoreCase(protocol) && port == instanceConfiguration.port()) { + return Optional.of(parameters); + } else { + return Optional.empty(); + } + } + }, HTTPServerEngineFactoryParametersProvider.class); } return CompletableFuture @@ -227,6 +244,10 @@ public Application run() throws Exception { public EntityPart.Builder createEntityPartBuilder(String partName) throws IllegalArgumentException { return new EntityPartBuilderImpl(partName); } + + private static int getDefaultPort(String protocol) { + return (protocol.equalsIgnoreCase("http")) ? DEFAULT_HTTP_PORT : DEFAULT_HTTPS_PORT; + } @SuppressWarnings({ "removal", "deprecation" }) private static int findFreePort() { diff --git a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java index cd4a8ca9f67..75950650097 100644 --- a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java +++ b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPDestination.java @@ -113,7 +113,7 @@ public void setServletContext(ServletContext sc) { } /** - * Post-configure retreival of server engine. + * Post-configure retrieval of server engine. */ protected void retrieveEngine() throws GeneralSecurityException, diff --git a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java index aa992226819..e73b9c00b60 100644 --- a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java +++ b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngine.java @@ -53,6 +53,7 @@ import org.apache.cxf.common.util.ReflectionUtil; import org.apache.cxf.common.util.StringUtils; import org.apache.cxf.common.util.SystemPropertyAction; +import org.apache.cxf.configuration.jsse.SSLContextServerParameters; import org.apache.cxf.configuration.jsse.SSLUtils; import org.apache.cxf.configuration.jsse.TLSServerParameters; import org.apache.cxf.configuration.security.ClientAuthentication; @@ -854,6 +855,11 @@ public Connection upgradeConnection(Connector c, EndPoint endPoint, return result; } protected SSLContext createSSLContext(SslContextFactory scf) throws Exception { + // The full SSL context is provided by SSLContextServerParameters + if (tlsServerParameters instanceof SSLContextServerParameters sslContextServerParameters) { + return sslContextServerParameters.getSslContext(); + } + String proto = tlsServerParameters.getSecureSocketProtocol() == null ? "TLS" : tlsServerParameters.getSecureSocketProtocol(); diff --git a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java index cfad8c9993e..45d59eb1774 100644 --- a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java +++ b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/JettyHTTPServerEngineFactory.java @@ -38,6 +38,7 @@ import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.configuration.jsse.TLSServerParameters; import org.apache.cxf.management.InstrumentationManager; +import org.apache.cxf.transport.http.HTTPServerEngineFactoryParametersProvider; import org.eclipse.jetty.util.component.Container; @@ -265,6 +266,15 @@ public synchronized JettyHTTPServerEngine createJettyHTTPServerEngine(String hos if (id != null && tlsParametersMap != null && tlsParametersMap.containsKey(id)) { tlsParameters = tlsParametersMap.get(id); } + + if (tlsParameters == null) { + final HTTPServerEngineFactoryParametersProvider provider = + bus.getExtension(HTTPServerEngineFactoryParametersProvider.class); + if (provider != null) { + tlsParameters = provider.getDefaultTlsServerParameters(bus, host, port, protocol, id).orElse(null); + } + } + JettyHTTPServerEngine ref = getOrCreate(this, host, port, tlsParameters); // checking the protocol if (!protocol.equals(ref.getProtocol())) { diff --git a/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/NettyHttpServerEngineFactory.java b/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/NettyHttpServerEngineFactory.java index de9585da52b..2076bb8c2f5 100644 --- a/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/NettyHttpServerEngineFactory.java +++ b/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/NettyHttpServerEngineFactory.java @@ -35,6 +35,7 @@ import org.apache.cxf.common.injection.NoJSR250Annotations; import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.configuration.jsse.TLSServerParameters; +import org.apache.cxf.transport.http.HTTPServerEngineFactoryParametersProvider; @NoJSR250Annotations(unlessNull = "bus") @@ -176,6 +177,17 @@ public synchronized NettyHttpServerEngine createNettyHttpServerEngine(String hos if ("https".equals(protocol) && tlsServerParametersMap != null) { tlsServerParameters = tlsServerParametersMap.get(Integer.toString(port)); } + + if (tlsServerParameters == null) { + final HTTPServerEngineFactoryParametersProvider provider = + bus.getExtension(HTTPServerEngineFactoryParametersProvider.class); + if (provider != null) { + tlsServerParameters = provider + .getDefaultTlsServerParameters(bus, host, port, protocol, null) + .orElse(null); + } + } + NettyHttpServerEngine ref = getOrCreate(this, host, port, tlsServerParameters); // checking the protocol if (!protocol.equals(ref.getProtocol())) { diff --git a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngine.java b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngine.java index 4bc41b9083c..83eea18873b 100644 --- a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngine.java +++ b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngine.java @@ -40,6 +40,7 @@ import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.common.util.PropertyUtils; import org.apache.cxf.common.util.SystemPropertyAction; +import org.apache.cxf.configuration.jsse.SSLContextServerParameters; import org.apache.cxf.configuration.jsse.SSLUtils; import org.apache.cxf.configuration.jsse.TLSServerParameters; import org.apache.cxf.interceptor.Fault; @@ -512,6 +513,11 @@ private boolean shouldDestroyPort() { protected SSLContext createSSLContext() throws Exception { + // The full SSL context is provided by SSLContextServerParameters + if (tlsServerParameters instanceof SSLContextServerParameters sslContextServerParameters) { + return sslContextServerParameters.getSslContext(); + } + String proto = tlsServerParameters.getSecureSocketProtocol() == null ? "TLS" : tlsServerParameters.getSecureSocketProtocol(); diff --git a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngineFactory.java b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngineFactory.java index 34671c1b865..69c7f3da32c 100644 --- a/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngineFactory.java +++ b/rt/transports/http-undertow/src/main/java/org/apache/cxf/transport/http_undertow/UndertowHTTPServerEngineFactory.java @@ -37,6 +37,7 @@ import org.apache.cxf.common.logging.LogUtils; import org.apache.cxf.configuration.jsse.TLSServerParameters; import org.apache.cxf.management.InstrumentationManager; +import org.apache.cxf.transport.http.HTTPServerEngineFactoryParametersProvider; @@ -263,6 +264,15 @@ public synchronized UndertowHTTPServerEngine createUndertowHTTPServerEngine(Stri if (id != null && tlsParametersMap != null && tlsParametersMap.containsKey(id)) { tlsParameters = tlsParametersMap.get(id); } + + if (tlsParameters == null) { + final HTTPServerEngineFactoryParametersProvider provider = + bus.getExtension(HTTPServerEngineFactoryParametersProvider.class); + if (provider != null) { + tlsParameters = provider.getDefaultTlsServerParameters(bus, host, port, protocol, id).orElse(null); + } + } + UndertowHTTPServerEngine ref = getOrCreate(this, host, port, tlsParameters); // checking the protocol if (!protocol.equals(ref.getProtocol())) { diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPServerEngineFactoryParametersProvider.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPServerEngineFactoryParametersProvider.java new file mode 100644 index 00000000000..0b598610708 --- /dev/null +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/http/HTTPServerEngineFactoryParametersProvider.java @@ -0,0 +1,47 @@ +/** + * 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.cxf.transport.http; + +import java.util.Optional; + +import jakarta.annotation.Nullable; +import org.apache.cxf.Bus; +import org.apache.cxf.configuration.jsse.TLSServerParameters; + +/** + * Provides programmatic defaults to the different HTTP server engine + * factories implementations (that do not share any common interfaces or other + * abstractions). + */ +public interface HTTPServerEngineFactoryParametersProvider { + /** + * Returns the default {@link TLSServerParameters} instance that the HTTP server + * engine could use if there are no {@link TLSServerParameters} provided to by the + * configuration. + * @param bus {@link Bus} instance + * @param host host name + * @param port port + * @param protocol protocol + * @param id server transport identifier (if available) + * @return the default {@link TLSServerParameters} instance, if available + */ + Optional getDefaultTlsServerParameters(Bus bus, String host, + int port, String protocol, @Nullable String id); +} diff --git a/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java b/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java index ba34a645c7f..bbc886806ac 100644 --- a/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java +++ b/rt/transports/http/src/main/java/org/apache/cxf/transport/https/SSLUtils.java @@ -51,6 +51,7 @@ import javax.net.ssl.X509TrustManager; import org.apache.cxf.common.logging.LogUtils; +import org.apache.cxf.configuration.jsse.SSLContextServerParameters; import org.apache.cxf.configuration.jsse.TLSClientParameters; import org.apache.cxf.configuration.jsse.TLSParameterBase; import org.apache.cxf.configuration.jsse.TLSServerParameters; @@ -123,7 +124,7 @@ public static SSLContext getSSLContext(TLSParameterBase parameters, boolean addH HostnameVerifier hnv = getHostnameVerifier((TLSClientParameters)parameters); for (int i = 0; i < tms.length; i++) { if (tms[i] instanceof X509TrustManager) { - tms[i] = new X509TrustManagerWrapper((X509TrustManager)tms[i], hnv); + tms[i] = new X509TrustManagerWrapper((X509TrustManager)tms[i], hnv); } } } @@ -160,7 +161,14 @@ public static KeyManager[] configureKeyManagersWithCertAlias(TLSParameterBase tl } public static SSLEngine createServerSSLEngine(TLSServerParameters parameters) throws Exception { - SSLContext sslContext = getSSLContext(parameters); + SSLContext sslContext = null; + // The full SSL context is provided by SSLContextServerParameters + if (parameters instanceof SSLContextServerParameters sslContextServerParameters) { + sslContext = sslContextServerParameters.getSslContext(); + } else { + sslContext = getSSLContext(parameters); + } + SSLEngine serverEngine = sslContext.createSSLEngine(); serverEngine.setUseClientMode(false); serverEngine.setNeedClientAuth(parameters.getClientAuthentication().isRequired()); diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/bootstrap/SeBootstrapTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/bootstrap/SeBootstrapTest.java index 9f59c8b014d..fa7f00b6414 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/bootstrap/SeBootstrapTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/bootstrap/SeBootstrapTest.java @@ -19,10 +19,16 @@ package org.apache.cxf.systest.jaxrs.bootstrap; +import java.io.InputStream; +import java.security.KeyStore; import java.util.Collections; import java.util.Set; import java.util.concurrent.CompletionStage; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLContext; +import javax.net.ssl.TrustManagerFactory; + import jakarta.ws.rs.ApplicationPath; import jakarta.ws.rs.GET; import jakarta.ws.rs.Path; @@ -31,25 +37,53 @@ import jakarta.ws.rs.client.ClientBuilder; import jakarta.ws.rs.core.Application; import jakarta.ws.rs.core.UriBuilder; +import org.apache.cxf.Bus; +import org.apache.cxf.BusFactory; +import org.apache.cxf.common.classloader.ClassLoaderUtils; +import org.apache.cxf.configuration.jsse.TLSClientParameters; +import org.apache.cxf.jaxrs.model.AbstractResourceInfo; +import org.apache.cxf.transport.https.SSLUtils; +import org.apache.http.conn.ssl.NoopHostnameVerifier; import org.junit.After; +import org.junit.AfterClass; import org.junit.Before; +import org.junit.BeforeClass; import org.junit.Test; import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.greaterThan; -import static org.junit.Assert.assertThat; /** * Some tests are taken from {@linkplain https://github.com/jakartaee/rest/blob/tck-3.1.2/jaxrs-tck * /src/main/java/ee/jakarta/tck/ws/rs/sebootstrap/SeBootstrapIT.java} */ public class SeBootstrapTest { + private static Bus bus; private Client client; + @BeforeClass + public static void createBus() throws Exception { + AbstractResourceInfo.clearAllMaps(); + bus = BusFactory.newInstance().createBus(); + BusFactory.setDefaultBus(bus); + } + + + @AfterClass + public static void destroyBus() throws Exception { + bus.shutdown(true); + bus = null; + } + @Before - public void setUp() { - client = ClientBuilder.newClient(); + public void setUp() throws Exception { + client = ClientBuilder + .newBuilder() + .sslContext(createSSLContext()) + .hostnameVerifier(new NoopHostnameVerifier()) + .build(); } @After @@ -131,6 +165,62 @@ public final void shouldBootInstanceUsingImplementationsDefaultIpPort() { assertThat(actualConfiguration.rootPath(), is(requestedConfiguration.rootPath())); instance.stop().toCompletableFuture().join(); } + + /** + * Verifies that an instance will boot using default configuration. + */ + @Test + public final void shouldBootInstanceUsingHttps() throws Exception { + final Application application = new StaticApplication(); + final SeBootstrap.Configuration.Builder bootstrapConfigurationBuilder = SeBootstrap.Configuration.builder() + .protocol("HTTPS") + .sslContext(createSSLContext()); + + final SeBootstrap.Configuration requestedConfiguration = bootstrapConfigurationBuilder.build(); + final CompletionStage completionStage = SeBootstrap.start(application, + requestedConfiguration); + final SeBootstrap.Instance instance = completionStage.toCompletableFuture().join(); + final SeBootstrap.Configuration actualConfiguration = instance.configuration(); + + final String actualResponse = client.target(UriBuilder.newInstance().scheme(actualConfiguration.protocol()) + .host(actualConfiguration.host()).port(actualConfiguration.port()).path(actualConfiguration.rootPath()) + .path("application/resource")).request().get(String.class); + + assertThat(actualResponse, is("OK")); + assertThat(actualConfiguration.protocol(), is("HTTPS")); + assertThat(actualConfiguration.host(), is("localhost")); + assertThat(actualConfiguration.port(), is(8443)); + assertThat(actualConfiguration.rootPath(), is("/")); + + instance.stop().toCompletableFuture().join(); + } + + private SSLContext createSSLContext() throws Exception { + final TLSClientParameters tlsParams = new TLSClientParameters(); + tlsParams.setHostnameVerifier(new NoopHostnameVerifier()); + + try (InputStream keystore = ClassLoaderUtils.getResourceAsStream("keys/Truststore.jks", this.getClass())) { + KeyStore trustStore = loadStore(keystore, "password"); + TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + tmf.init(trustStore); + tlsParams.setTrustManagers(tmf.getTrustManagers()); + } + + try (InputStream keystore = ClassLoaderUtils.getResourceAsStream("keys/Morpit.jks", this.getClass())) { + KeyStore keyStore = loadStore(keystore, "password"); + KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()); + kmf.init(keyStore, "password".toCharArray()); + tlsParams.setKeyManagers(kmf.getKeyManagers()); + } + + return SSLUtils.getSSLContext(tlsParams); + } + + private KeyStore loadStore(InputStream inputStream, String password) throws Exception { + KeyStore store = KeyStore.getInstance("JKS"); + store.load(inputStream, password.toCharArray()); + return store; + } @ApplicationPath("application") public static final class StaticApplication extends Application { From 2df66e8dce16de322908c8e7ee0502d9dd2e88e3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:30:16 -0500 Subject: [PATCH 413/430] Bump ossf/scorecard-action from 2.4.0 to 2.4.1 (#2287) Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.4.0 to 2.4.1. - [Release notes](https://github.com/ossf/scorecard-action/releases) - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) - [Commits](https://github.com/ossf/scorecard-action/compare/62b2cac7ed8198b15735ed49ab1e5cf35480ba46...f49aabe0b5af0936a0987cfb85d86b75731b0186) --- updated-dependencies: - dependency-name: ossf/scorecard-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecards.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index cd24f6f2f61..6060af095cc 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -30,7 +30,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@62b2cac7ed8198b15735ed49ab1e5cf35480ba46 #tag=2.4.0 + uses: ossf/scorecard-action@f49aabe0b5af0936a0987cfb85d86b75731b0186 #tag=2.4.1 with: results_file: results.sarif results_format: sarif From 1da0ac1b38bbcea6f01367469131f0bb9d6810b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:30:33 -0500 Subject: [PATCH 414/430] Bump actions/cache from 4.2.0 to 4.2.1 (#2286) Bumps [actions/cache](https://github.com/actions/cache) from 4.2.0 to 4.2.1. - [Release notes](https://github.com/actions/cache/releases) - [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md) - [Commits](https://github.com/actions/cache/compare/1bd1e32a3bdc45362d1e726936510720a7c30a57...0c907a75c2c80ebcb7f088228285e798b750cf8f) --- updated-dependencies: - dependency-name: actions/cache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index db48e01c7f2..3bbe2af3fbc 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -36,7 +36,7 @@ jobs: distribution: 'temurin' java-version: '17' - name: Cache local Maven repository - uses: actions/cache@1bd1e32a3bdc45362d1e726936510720a7c30a57 # v4.2.0 + uses: actions/cache@0c907a75c2c80ebcb7f088228285e798b750cf8f # v4.2.1 with: path: ~/.m2/repository key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }} From 72ded2d9ae177964dbcf21a78f4e40b6f6665bfe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:30:50 -0500 Subject: [PATCH 415/430] Bump actions/upload-artifact from 4.6.0 to 4.6.1 (#2285) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.6.0 to 4.6.1. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08...4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/scorecards.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index 6060af095cc..adab684c3fb 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -49,7 +49,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # tag=v4.6.0 + uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # tag=v4.6.1 with: name: SARIF file path: results.sarif From 6efc89bc0e057bd5344a3847d1596e608508d52a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:31:06 -0500 Subject: [PATCH 416/430] Bump github/codeql-action from 3.28.9 to 3.28.10 (#2284) Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.28.9 to 3.28.10. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0...b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d) --- updated-dependencies: - dependency-name: github/codeql-action dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/codeql-analysis.yml | 4 ++-- .github/workflows/scorecards.yml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 3bbe2af3fbc..c44f86c729c 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -44,7 +44,7 @@ jobs: # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + uses: github/codeql-action/init@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 with: languages: java #config-file: ./.github/codeql/codeql-cxf-config.yml @@ -72,4 +72,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9 + uses: github/codeql-action/analyze@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d # v3.28.10 diff --git a/.github/workflows/scorecards.yml b/.github/workflows/scorecards.yml index adab684c3fb..43057237779 100644 --- a/.github/workflows/scorecards.yml +++ b/.github/workflows/scorecards.yml @@ -57,6 +57,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 #tag=v2 + uses: github/codeql-action/upload-sarif@b56ba49b26e50535fa1e7f7db0f4f7b4bf65d80d #tag=v2 with: sarif_file: results.sarif From c60210a0d9ce505b7dd53459f368ad088477b1a6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:31:27 -0500 Subject: [PATCH 417/430] Bump cxf.junit5.version from 5.11.4 to 5.12.0 (#2283) Bumps `cxf.junit5.version` from 5.11.4 to 5.12.0. Updates `org.junit:junit-bom` from 5.11.4 to 5.12.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0) Updates `org.junit.jupiter:junit-jupiter-engine` from 5.11.4 to 5.12.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0) Updates `org.junit.vintage:junit-vintage-engine` from 5.11.4 to 5.12.0 - [Release notes](https://github.com/junit-team/junit5/releases) - [Commits](https://github.com/junit-team/junit5/compare/r5.11.4...r5.12.0) --- updated-dependencies: - dependency-name: org.junit:junit-bom dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.junit.jupiter:junit-jupiter-engine dependency-type: direct:production update-type: version-update:semver-minor - dependency-name: org.junit.vintage:junit-vintage-engine dependency-type: direct:development update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 915377017e5..8e13d65ae05 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -168,7 +168,7 @@ 3.0.1 1.0 4.13.2 - 5.11.4 + 5.12.0 2.0.3 7.0.2 1.1.2 From fb7eed8fd0470c34a2d936180d2bb357a456068a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 10:31:46 -0500 Subject: [PATCH 418/430] Bump org.awaitility:awaitility from 4.2.2 to 4.3.0 (#2282) Bumps [org.awaitility:awaitility](https://github.com/awaitility/awaitility) from 4.2.2 to 4.3.0. - [Changelog](https://github.com/awaitility/awaitility/blob/master/changelog.txt) - [Commits](https://github.com/awaitility/awaitility/compare/awaitility-4.2.2...awaitility-4.3.0) --- updated-dependencies: - dependency-name: org.awaitility:awaitility dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 8e13d65ae05..6d40cfbd39f 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -273,7 +273,7 @@ 1.6.3_1 1.2_5 1.1.4c_6 - 4.2.2 + 4.3.0 From 5226fe3de1ba35dde129527a22c3e0b985b1e75e Mon Sep 17 00:00:00 2001 From: Colm O hEigeartaigh Date: Mon, 24 Feb 2025 16:02:57 +0000 Subject: [PATCH 419/430] Some PMD cleanup (#2288) --- .../apache/cxf/interceptor/LoggingInInterceptor.java | 8 ++++---- .../apache/cxf/interceptor/LoggingOutInterceptor.java | 6 +++--- .../java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java | 2 +- .../java/org/apache/cxf/jaxrs/utils/HttpUtils.java | 2 +- .../javascript/service/ServiceJavascriptBuilder.java | 2 +- .../org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java | 4 ++-- .../cxf/jaxrs/ext/search/SimpleSearchCondition.java | 4 ++-- .../jose/jaxrs/AbstractJweJsonWriterProvider.java | 4 ++-- .../cxf/rs/security/saml/AbstractSamlInHandler.java | 2 +- .../org/apache/cxf/rt/security/crypto/CryptoUtils.java | 2 +- .../sts/token/provider/JWTProviderLifetimeTest.java | 2 +- .../systest/jaxrs/JAXRSClientServerSpringBookTest.java | 2 +- .../apache/cxf/systest/ldap/sts/LDAPClaimsTest.java | 10 +++++----- .../org/apache/cxf/jms/testsuite/util/JMSTestUtil.java | 2 +- .../tools/corba/processors/idl/IDLToWSDLProcessor.java | 2 +- .../tools/corba/processors/idl/ScopedNameVisitor.java | 2 +- 16 files changed, 28 insertions(+), 28 deletions(-) diff --git a/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java b/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java index 48feaf2038a..5b1d6a36e84 100644 --- a/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java +++ b/core/src/main/java/org/apache/cxf/interceptor/LoggingInInterceptor.java @@ -177,10 +177,10 @@ protected void logReader(Message message, Reader reader, LoggingMessage buffer) if (writer.getTempFile() != null) { //large thing on disk... buffer.getMessage().append("\nMessage (saved to tmp file):\n"); - buffer.getMessage().append("Filename: " + writer.getTempFile().getAbsolutePath() + "\n"); + buffer.getMessage().append("Filename: ").append(writer.getTempFile().getAbsolutePath()).append('\n'); } if (writer.size() > limit && limit != -1) { - buffer.getMessage().append("(message truncated to " + limit + " bytes)\n"); + buffer.getMessage().append("(message truncated to ").append(limit).append(" bytes)\n"); } writer.writeCacheTo(buffer.getPayload(), limit); writer.close(); @@ -216,11 +216,11 @@ protected void logInputStream(Message message, InputStream is, LoggingMessage bu if (bos.getTempFile() != null) { //large thing on disk... buffer.getMessage().append("\nMessage (saved to tmp file):\n"); - buffer.getMessage().append("Filename: " + bos.getTempFile().getAbsolutePath() + "\n"); + buffer.getMessage().append("Filename: ").append(bos.getTempFile().getAbsolutePath()).append('\n'); } boolean truncated = false; if (bos.size() > limit && limit != -1) { - buffer.getMessage().append("(message truncated to " + limit + " bytes)\n"); + buffer.getMessage().append("(message truncated to ").append(limit).append(" bytes)\n"); truncated = true; } writePayload(buffer.getPayload(), bos, encoding, ct, truncated); diff --git a/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java b/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java index 0f9ef6e0af1..2d70b6589b7 100644 --- a/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java +++ b/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java @@ -236,14 +236,14 @@ public void onClose(CachedOutputStream cos) { if (cos.getTempFile() == null) { //buffer.append("Outbound Message:\n"); if (cos.size() >= lim) { - buffer.getMessage().append("(message truncated to " + lim + " bytes)\n"); + buffer.getMessage().append("(message truncated to ").append(lim).append(" bytes)\n"); truncated = true; } } else { buffer.getMessage().append("Outbound Message (saved to tmp file):\n"); - buffer.getMessage().append("Filename: " + cos.getTempFile().getAbsolutePath() + "\n"); + buffer.getMessage().append("Filename: ").append(cos.getTempFile().getAbsolutePath()).append('\n'); if (cos.size() >= lim) { - buffer.getMessage().append("(message truncated to " + lim + " bytes)\n"); + buffer.getMessage().append("(message truncated to ").append(lim).append(" bytes)\n"); truncated = true; } } diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java index 3313247ebe5..31933b3e972 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/impl/UriBuilderImpl.java @@ -563,7 +563,7 @@ private UriBuilder doPath(String path, boolean checkSegments) { // such empty paths having matrix parameters... int schemeIndex = pathEncoded.indexOf("//"); if (schemeIndex != -1) { - int pathComponentStart = pathEncoded.indexOf("/", schemeIndex + 2); + int pathComponentStart = pathEncoded.indexOf('/', schemeIndex + 2); if (pathComponentStart == -1) { this.originalPathEmpty = true; pathComponentStart = pathEncoded.indexOf(';'); diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java index 083871e7649..58bbf306fca 100644 --- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java +++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/HttpUtils.java @@ -602,7 +602,7 @@ public static String getSetEncoding(MediaType mt, MultivaluedMap return defaultEncoding; } try { - "0".getBytes(enc); + "0".getBytes(enc); //NOPMD return enc; } catch (UnsupportedEncodingException ex) { String message = new org.apache.cxf.common.i18n.Message("UNSUPPORTED_ENCODING", diff --git a/rt/javascript/javascript-rt/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java b/rt/javascript/javascript-rt/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java index e2664dca615..9b46f825397 100755 --- a/rt/javascript/javascript-rt/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java +++ b/rt/javascript/javascript-rt/src/main/java/org/apache/cxf/javascript/service/ServiceJavascriptBuilder.java @@ -338,7 +338,7 @@ private void buildOperationFunction(StringBuilder parameterList) { code.append("//\n"); - code.append("function " + code.append("function " //NOPMD + opFunctionGlobalName + "(" + responseCallbackParams + ((parameterList.length() > 0 && !currentOperation.isOneWay()) diff --git a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java index 897a2ffbb12..881e29dcc19 100644 --- a/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java +++ b/rt/rs/description/src/main/java/org/apache/cxf/jaxrs/model/wadl/WadlGenerator.java @@ -153,6 +153,7 @@ public class WadlGenerator implements ContainerRequestFilter { private static final String JAXB_DEFAULT_NAME = "##default"; private static final String CLASSPATH_PREFIX = "classpath:"; private static final String DEFAULT_NS_PREFIX = "prefix"; + private static final MediaType DEFAULT_REP_MEDIA_TYPE = MediaType.WILDCARD_TYPE; private static final Map> PARAMETER_TYPE_MAP; static { PARAMETER_TYPE_MAP = new EnumMap<>(ParameterType.class); @@ -195,7 +196,6 @@ public class WadlGenerator implements ContainerRequestFilter { private String applicationTitle; private String nsPrefix = DEFAULT_NS_PREFIX; private MediaType defaultWadlResponseMediaType = MediaType.APPLICATION_XML_TYPE; - private final MediaType defaultRepMediaType = MediaType.WILDCARD_TYPE; private String stylesheetReference; private boolean applyStylesheetLocally; private Bus bus; @@ -1075,7 +1075,7 @@ protected void handleRepresentation(StringBuilder sb, Set> jaxbTypes, if (MultivaluedMap.class.isAssignableFrom(type)) { types = Collections.singletonList(MediaType.APPLICATION_FORM_URLENCODED_TYPE); } else if (isWildcard(types)) { - types = Collections.singletonList(defaultRepMediaType); + types = Collections.singletonList(DEFAULT_REP_MEDIA_TYPE); } Method opMethod = getMethod(ori); diff --git a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SimpleSearchCondition.java b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SimpleSearchCondition.java index 19b6ba097a5..683473b4e3c 100644 --- a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SimpleSearchCondition.java +++ b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/SimpleSearchCondition.java @@ -50,7 +50,7 @@ public class SimpleSearchCondition implements SearchCondition { SUPPORTED_TYPES.add(ConditionType.LESS_THAN); SUPPORTED_TYPES.add(ConditionType.LESS_OR_EQUALS); } - private final ConditionType joiningType = ConditionType.AND; + private static final ConditionType JOINING_TYPE = ConditionType.AND; private T condition; private List> scts; @@ -129,7 +129,7 @@ public T getCondition() { @Override public ConditionType getConditionType() { if (scts.size() > 1) { - return joiningType; + return JOINING_TYPE; } return scts.get(0).getStatement().getCondition(); } diff --git a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/AbstractJweJsonWriterProvider.java b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/AbstractJweJsonWriterProvider.java index ec6b16588e6..1b77075613f 100644 --- a/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/AbstractJweJsonWriterProvider.java +++ b/rt/rs/security/jose-parent/jose-jaxrs/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/AbstractJweJsonWriterProvider.java @@ -24,7 +24,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashSet; +import java.util.EnumSet; import java.util.LinkedList; import java.util.List; import java.util.Properties; @@ -109,7 +109,7 @@ protected List getInitializedEncryptionProviders(List keyAlgos = new HashSet<>(); + Set keyAlgos = EnumSet.noneOf(KeyAlgorithm.class); List keyProviders = new LinkedList<>(); for (int i = 0; i < propLocs.size(); i++) { diff --git a/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java b/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java index 9f29614b2ff..74144fc3e7e 100644 --- a/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java +++ b/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/AbstractSamlInHandler.java @@ -337,7 +337,7 @@ private boolean compareCredentials( if (tlsCerts != null && tlsCerts.length > 0 && subjectCerts != null && subjectCerts.length > 0 && tlsCerts[0].equals(subjectCerts[0])) { return true; - } else if (tlsCerts != null && tlsCerts.length > 0 && subjectPublicKey != null + } else if (tlsCerts != null && tlsCerts.length > 0 && tlsCerts[0].getPublicKey().equals(subjectPublicKey)) { return true; } diff --git a/rt/security/src/main/java/org/apache/cxf/rt/security/crypto/CryptoUtils.java b/rt/security/src/main/java/org/apache/cxf/rt/security/crypto/CryptoUtils.java index a5adba572f3..26964017954 100644 --- a/rt/security/src/main/java/org/apache/cxf/rt/security/crypto/CryptoUtils.java +++ b/rt/security/src/main/java/org/apache/cxf/rt/security/crypto/CryptoUtils.java @@ -581,7 +581,7 @@ public static Cipher initCipher(Key secretKey, KeyProperties keyProps, int mode) if (algorithm.equals("AESWrap")) { int keySize = secretKey.getEncoded().length; algorithm = "AESWrap_" + keySize * 8; - secretKey = new SecretKeySpec(secretKey.getEncoded(), 0, keySize, "AES"); + secretKey = new SecretKeySpec(secretKey.getEncoded(), 0, keySize, "AES"); //NOPMD - false positive } Cipher c = Cipher.getInstance(algorithm); if (keyProps == null || keyProps.getAlgoSpec() == null && keyProps.getSecureRandom() == null) { diff --git a/services/sts/sts-core/src/test/java/org/apache/cxf/sts/token/provider/JWTProviderLifetimeTest.java b/services/sts/sts-core/src/test/java/org/apache/cxf/sts/token/provider/JWTProviderLifetimeTest.java index 7e297bdf7af..8339ee294c7 100644 --- a/services/sts/sts-core/src/test/java/org/apache/cxf/sts/token/provider/JWTProviderLifetimeTest.java +++ b/services/sts/sts-core/src/test/java/org/apache/cxf/sts/token/provider/JWTProviderLifetimeTest.java @@ -124,7 +124,7 @@ public void testJWTProviderLifetime() throws Exception { Instant now = Instant.now(); Long expiry = (Long)jwt.getClaim(JwtConstants.CLAIM_EXPIRY); - Instant.ofEpochSecond(expiry).isAfter(now); + assertTrue(Instant.ofEpochSecond(expiry).isAfter(now)); } /** diff --git a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java index 4a609d41237..ff61f02e3f5 100644 --- a/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java +++ b/systests/jaxrs/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSClientServerSpringBookTest.java @@ -286,7 +286,7 @@ public void testGetWadlFromWadlLocation() throws Exception { String piData = ((ProcessingInstruction)n).getData(); int hRefStart = piData.indexOf("href=\""); if (hRefStart > 0) { - int hRefEnd = piData.indexOf("\"", hRefStart + 6); + int hRefEnd = piData.indexOf('"', hRefStart + 6); templateRef = piData.substring(hRefStart + 6, hRefEnd); } } diff --git a/systests/ldap/src/test/java/org/apache/cxf/systest/ldap/sts/LDAPClaimsTest.java b/systests/ldap/src/test/java/org/apache/cxf/systest/ldap/sts/LDAPClaimsTest.java index d259a0d700b..138afcd11dc 100644 --- a/systests/ldap/src/test/java/org/apache/cxf/systest/ldap/sts/LDAPClaimsTest.java +++ b/systests/ldap/src/test/java/org/apache/cxf/systest/ldap/sts/LDAPClaimsTest.java @@ -138,7 +138,7 @@ public void testRetrieveClaims() throws Exception { if (expectedClaims.contains(c.getClaimType())) { expectedClaims.remove(c.getClaimType()); } else { - Assert.assertTrue("Claim '" + c.getClaimType() + "' not requested", false); + Assert.fail("Claim '" + c.getClaimType() + "' not requested"); } } } @@ -171,7 +171,7 @@ public void testRetrieveClaimsUsingLDAPLookup() throws Exception { if (expectedClaims.contains(c.getClaimType())) { expectedClaims.remove(c.getClaimType()); } else { - Assert.assertTrue("Claim '" + c.getClaimType() + "' not requested", false); + Assert.fail("Claim '" + c.getClaimType() + "' not requested"); } } } @@ -210,7 +210,7 @@ public void testMultiUserBaseDNs() throws Exception { if (expectedClaims.contains(c.getClaimType())) { expectedClaims.remove(c.getClaimType()); } else { - Assert.assertTrue("Claim '" + c.getClaimType() + "' not requested", false); + Assert.fail("Claim '" + c.getClaimType() + "' not requested"); } } @@ -232,7 +232,7 @@ public void testMultiUserBaseDNs() throws Exception { if (expectedClaims.contains(c.getClaimType())) { expectedClaims.remove(c.getClaimType()); } else { - Assert.assertTrue("Claim '" + c.getClaimType() + "' not requested", false); + Assert.fail("Claim '" + c.getClaimType() + "' not requested"); } } } @@ -295,7 +295,7 @@ public void testRetrieveClaimsWithUnsupportedOptionalClaimType() throws Exceptio if (expectedClaims.contains(c.getClaimType())) { expectedClaims.remove(c.getClaimType()); } else { - Assert.assertTrue("Claim '" + c.getClaimType() + "' not requested", false); + Assert.fail("Claim '" + c.getClaimType() + "' not requested"); } } } diff --git a/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/util/JMSTestUtil.java b/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/util/JMSTestUtil.java index 27791ed2f81..46c3fd7fa3f 100644 --- a/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/util/JMSTestUtil.java +++ b/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/util/JMSTestUtil.java @@ -84,7 +84,7 @@ public static TestCaseType getTestCase(String testId) { private static void loadTestCases() throws Exception { JAXBContext context = JAXBContext.newInstance("org.apache.cxf.testsuite.testcase"); Unmarshaller unmarshaller = context.createUnmarshaller(); - JAXBElement e = (JAXBElement)unmarshaller.unmarshal(new JMSTestUtil().getClass() + JAXBElement e = (JAXBElement)unmarshaller.unmarshal(JMSTestUtil.class .getResource("/org/apache/cxf/jms/testsuite/util/testcases.xml")); testcases = (TestCasesType)e.getValue(); } diff --git a/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/IDLToWSDLProcessor.java b/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/IDLToWSDLProcessor.java index 538ed2f6397..9ec42ef7d40 100644 --- a/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/IDLToWSDLProcessor.java +++ b/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/IDLToWSDLProcessor.java @@ -436,7 +436,7 @@ private Map getServiceNames(Binding[] bindings, boolean isDefaul for (int j = 0; j < bindingTokens.length - 2; j++) { name.append(bindingTokens[j]).append('.'); } - name.append(bindingTokens[bindingTokens.length - 2] + "CORBAService"); + name.append(bindingTokens[bindingTokens.length - 2]).append("CORBAService"); serviceNames.put(ns, name.toString()); } else { serviceNames.put(ns, idl + "CORBAService"); diff --git a/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/ScopedNameVisitor.java b/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/ScopedNameVisitor.java index 80427772934..299ad4ac5bc 100644 --- a/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/ScopedNameVisitor.java +++ b/tools/corba/src/main/java/org/apache/cxf/tools/corba/processors/idl/ScopedNameVisitor.java @@ -622,7 +622,7 @@ protected static void populateAliasSchemaType(CorbaType corbaType, Alias alias = (Alias) corbaType; //loop through alias base types, till you get a non-alias corba type CorbaType type = findCorbaType(typeMap, alias.getBasetype()); - while ((type != null) && type instanceof Alias) { + while (type instanceof Alias) { alias = (Alias) type; type = findCorbaType(typeMap, alias.getBasetype()); } From 61da0f95f7936a8ad9f87911c18f8d47d4bbebf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 20:44:37 -0500 Subject: [PATCH 420/430] Bump com.puppycrawl.tools:checkstyle from 10.21.2 to 10.21.3 (#2291) Bumps [com.puppycrawl.tools:checkstyle](https://github.com/checkstyle/checkstyle) from 10.21.2 to 10.21.3. - [Release notes](https://github.com/checkstyle/checkstyle/releases) - [Commits](https://github.com/checkstyle/checkstyle/compare/checkstyle-10.21.2...checkstyle-10.21.3) --- updated-dependencies: - dependency-name: com.puppycrawl.tools:checkstyle dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 6d40cfbd39f..4c1357890c8 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -392,7 +392,7 @@ com.puppycrawl.tools checkstyle - 10.21.2 + 10.21.3 From 5890526011f501e1b6f0ac1b8ef04cc90a6190cf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 25 Feb 2025 20:44:52 -0500 Subject: [PATCH 421/430] Bump cxf.hibernate.em.version from 6.6.8.Final to 6.6.9.Final (#2290) Bumps `cxf.hibernate.em.version` from 6.6.8.Final to 6.6.9.Final. Updates `org.hibernate.orm:hibernate-core` from 6.6.8.Final to 6.6.9.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.9/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.8...6.6.9) Updates `org.hibernate.orm:hibernate-jcache` from 6.6.8.Final to 6.6.9.Final - [Release notes](https://github.com/hibernate/hibernate-orm/releases) - [Changelog](https://github.com/hibernate/hibernate-orm/blob/6.6.9/changelog.txt) - [Commits](https://github.com/hibernate/hibernate-orm/compare/6.6.8...6.6.9) --- updated-dependencies: - dependency-name: org.hibernate.orm:hibernate-core dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.hibernate.orm:hibernate-jcache dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 4c1357890c8..71ed8e8cbe2 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -120,7 +120,7 @@ 2.0.1 3.0 5.5.0 - 6.6.8.Final + 6.6.9.Final 8.0.2.Final 2.7.4 [4.0,4.2) From 8dec6c3a189bec84c90c406299d8f53686d0f9a2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 26 Feb 2025 17:27:37 -0500 Subject: [PATCH 422/430] Bump org.apache.maven.plugins:maven-clean-plugin from 3.4.0 to 3.4.1 (#2293) Bumps [org.apache.maven.plugins:maven-clean-plugin](https://github.com/apache/maven-clean-plugin) from 3.4.0 to 3.4.1. - [Release notes](https://github.com/apache/maven-clean-plugin/releases) - [Commits](https://github.com/apache/maven-clean-plugin/compare/maven-clean-plugin-3.4.0...maven-clean-plugin-3.4.1) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-clean-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 414f3d8d80b..a0998b6a269 100644 --- a/pom.xml +++ b/pom.xml @@ -450,7 +450,7 @@ org.apache.maven.plugins maven-clean-plugin - 3.4.0 + 3.4.1 org.apache.maven.plugins From 94da28f77b803108de3eca058c25f9de03632abf Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:25:45 -0500 Subject: [PATCH 423/430] Bump cxf.slf4j.version from 2.0.16 to 2.0.17 (#2292) Bumps `cxf.slf4j.version` from 2.0.16 to 2.0.17. Updates `org.slf4j:slf4j-jdk14` from 2.0.16 to 2.0.17 Updates `org.slf4j:jcl-over-slf4j` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-api` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-log4j12` from 2.0.16 to 2.0.17 Updates `org.slf4j:slf4j-nop` from 2.0.16 to 2.0.17 Updates `org.slf4j:jul-to-slf4j` from 2.0.16 to 2.0.17 --- updated-dependencies: - dependency-name: org.slf4j:slf4j-jdk14 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:jcl-over-slf4j dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-api dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-log4j12 dependency-type: direct:production update-type: version-update:semver-patch - dependency-name: org.slf4j:slf4j-nop dependency-type: direct:development update-type: version-update:semver-patch - dependency-name: org.slf4j:jul-to-slf4j dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- parent/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parent/pom.xml b/parent/pom.xml index 71ed8e8cbe2..d6c40c2dc4b 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -207,7 +207,7 @@ jakarta.servlet-api jakarta.servlet 6.0.0 - 2.0.16 + 2.0.17 2.4 2.3_2 3.4.3 From 16f7d2d46bc0a26e3d936ec879d32a0cdaf7de7d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 27 Feb 2025 15:26:01 -0500 Subject: [PATCH 424/430] Bump org.apache.maven.plugins:maven-compiler-plugin (#2294) Bumps [org.apache.maven.plugins:maven-compiler-plugin](https://github.com/apache/maven-compiler-plugin) from 3.13.0 to 3.14.0. - [Release notes](https://github.com/apache/maven-compiler-plugin/releases) - [Commits](https://github.com/apache/maven-compiler-plugin/compare/maven-compiler-plugin-3.13.0...maven-compiler-plugin-3.14.0) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-compiler-plugin dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- distribution/src/main/release/samples/pom.xml | 2 +- pom.xml | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index b77d1979dd0..3ebc4ab6324 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -194,7 +194,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 ${cxf.jdk.version} ${cxf.jdk.version} diff --git a/pom.xml b/pom.xml index a0998b6a269..549740cc39f 100644 --- a/pom.xml +++ b/pom.xml @@ -222,7 +222,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 ${cxf.jdk.version} 256M @@ -500,7 +500,7 @@ org.apache.maven.plugins maven-compiler-plugin - 3.13.0 + 3.14.0 ${cxf.jdk.version} 256M From a9351cd96339c9886058581d44ba92cb02a59713 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 27 Feb 2025 20:18:55 -0500 Subject: [PATCH 425/430] CXF-9110: Fix extensive memory usage with enabled LoggingFeature (#2278) * CXF-9110: Fix extensive memory usage with enabled LoggingFeature * CXF-9110: Memory leak in DelayedCleanerImpl.queue when LoggingFeature is enabled --------- Co-authored-by: Yury Molchan --- .../org/apache/cxf/io/CachedOutputStream.java | 2 + .../cxf/io/CachedOutputStreamCleaner.java | 8 +++ .../io/DelayedCachedOutputStreamCleaner.java | 29 ++++++--- .../jaxrs/client/logging/RESTLoggingTest.java | 62 +++++++++++++++++++ .../jaxrs/client/logging/TestServiceRest.java | 6 ++ 5 files changed, 100 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/apache/cxf/io/CachedOutputStream.java b/core/src/main/java/org/apache/cxf/io/CachedOutputStream.java index 3ba937d04b0..f5526fa57fd 100644 --- a/core/src/main/java/org/apache/cxf/io/CachedOutputStream.java +++ b/core/src/main/java/org/apache/cxf/io/CachedOutputStream.java @@ -283,8 +283,10 @@ public void resetOut(OutputStream out, boolean copyOldContent) throws IOExceptio } } finally { streamList.remove(currentStream); + // we are not backed by file anymore, unregister from the cleaner if (cachedOutputStreamCleaner != null) { cachedOutputStreamCleaner.unregister(currentStream); + cachedOutputStreamCleaner.unregister(this); } deleteTempFile(); inmem = true; diff --git a/core/src/main/java/org/apache/cxf/io/CachedOutputStreamCleaner.java b/core/src/main/java/org/apache/cxf/io/CachedOutputStreamCleaner.java index 3d6361a4c95..dbef316afbe 100644 --- a/core/src/main/java/org/apache/cxf/io/CachedOutputStreamCleaner.java +++ b/core/src/main/java/org/apache/cxf/io/CachedOutputStreamCleaner.java @@ -40,4 +40,12 @@ public interface CachedOutputStreamCleaner { * Unregister the stream instance from the clean up (closed properly) */ void register(Closeable closeable); + + /** + * The exact or approximate (depending on the implementation) size of the cleaner queue + * @return exact or approximate (depending on the implementation) size of the cleaner queue + */ + default int size() { + return 0; + } } diff --git a/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java b/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java index 5c8a1768146..4d76b654253 100644 --- a/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java +++ b/core/src/main/java/org/apache/cxf/io/DelayedCachedOutputStreamCleaner.java @@ -52,19 +52,24 @@ private interface DelayedCleaner extends CachedOutputStreamCleaner, Closeable { @Override default void register(Closeable closeable) { } - + @Override default void unregister(Closeable closeable) { } - + @Override default void close() { } - + @Override default void clean() { } - + + @Override + default int size() { + return 0; + } + default void forceClean() { } } @@ -101,18 +106,23 @@ public void clean() { queue.drainTo(closeables); clean(closeables); } - + @Override public void forceClean() { clean(queue); } - + @Override public void close() { timer.cancel(); queue.clear(); } - + + @Override + public int size() { + return queue.size(); + } + private void clean(Collection closeables) { final Iterator iterator = closeables.iterator(); while (iterator.hasNext()) { @@ -224,6 +234,11 @@ public void unregister(Closeable closeable) { cleaner.unregister(closeable); } + @Override + public int size() { + return cleaner.size(); + } + @Override public void clean() { cleaner.clean(); diff --git a/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/logging/RESTLoggingTest.java b/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/logging/RESTLoggingTest.java index 6c81b20d1dd..01c188c96f8 100644 --- a/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/logging/RESTLoggingTest.java +++ b/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/logging/RESTLoggingTest.java @@ -19,17 +19,21 @@ package org.apache.cxf.jaxrs.client.logging; +import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.util.Collections; import java.util.List; +import java.util.concurrent.atomic.LongAdder; +import org.apache.cxf.Bus; import org.apache.cxf.endpoint.Server; import org.apache.cxf.ext.logging.AbstractLoggingInterceptor; import org.apache.cxf.ext.logging.LoggingFeature; import org.apache.cxf.ext.logging.event.EventType; import org.apache.cxf.ext.logging.event.LogEvent; +import org.apache.cxf.io.CachedOutputStreamCleaner; import org.apache.cxf.jaxrs.JAXRSServerFactoryBean; import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean; import org.apache.cxf.jaxrs.client.WebClient; @@ -39,7 +43,10 @@ import org.junit.Test; import static org.awaitility.Awaitility.await; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertEquals; public class RESTLoggingTest { @@ -57,6 +64,61 @@ public void testSlf4j() throws IOException { Assert.assertEquals("test1", result); } + @Test + public void testCacheCleanUp() throws Exception { + LoggingFeature loggingFeature = new LoggingFeature(); + loggingFeature.setInMemThreshold(1); // To activate usage of the CachedOutputStream + + Server server = createService(SERVICE_URI, new TestServiceRest(), loggingFeature); + server.start(); + + try { + final JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); + bean.setAddress(SERVICE_URI); + bean.setTransportId(LocalTransportFactory.TRANSPORT_ID); + + final LongAdder registers = new LongAdder(); + final WebClient client = bean.createWebClient(); + final Bus bus = bean.getBus(); + + // See please https://issues.apache.org/jira/browse/CXF-9110 + final CachedOutputStreamCleaner cleaner = bus.getExtension(CachedOutputStreamCleaner.class); + bus.setExtension(new CachedOutputStreamCleaner() { + @Override + public void clean() { + cleaner.clean(); + } + + @Override + public void unregister(Closeable closeable) { + cleaner.unregister(closeable); + } + + @Override + public void register(Closeable closeable) { + cleaner.register(closeable); + registers.increment(); + } + + @Override + public int size() { + return cleaner.size(); + } + }, CachedOutputStreamCleaner.class); + + String response = null; + for (int i = 0; i < 1_000; i++) { // ~2...5 seconds of the execution + response = client.post("DATA", String.class); + } + assertEquals("DATA", response); + + assertThat(registers.longValue(), equalTo(3000L)); + assertThat(cleaner.size(), equalTo(0)); + } finally { + server.destroy(); + } + } + @Test public void testBinary() throws IOException, InterruptedException { LoggingFeature loggingFeature = new LoggingFeature(); diff --git a/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/logging/TestServiceRest.java b/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/logging/TestServiceRest.java index ab237bc7102..1ef575e970e 100644 --- a/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/logging/TestServiceRest.java +++ b/rt/rs/client/src/test/java/org/apache/cxf/jaxrs/client/logging/TestServiceRest.java @@ -19,6 +19,7 @@ package org.apache.cxf.jaxrs.client.logging; import jakarta.ws.rs.GET; +import jakarta.ws.rs.POST; import jakarta.ws.rs.Path; import jakarta.ws.rs.PathParam; @@ -29,4 +30,9 @@ public String echo(@PathParam("msg") String msg) { return msg; } + @POST + public String post(String msg) { + return msg; + } } + From 00fd12ad70c247b8788e35aeb900f1bc1f8b95e7 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Thu, 27 Feb 2025 20:32:12 -0500 Subject: [PATCH 426/430] Update Netty to 4.1.119.Final --- distribution/src/main/release/samples/pom.xml | 2 +- parent/pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/distribution/src/main/release/samples/pom.xml b/distribution/src/main/release/samples/pom.xml index 3ebc4ab6324..d21d1c350e1 100644 --- a/distribution/src/main/release/samples/pom.xml +++ b/distribution/src/main/release/samples/pom.xml @@ -34,7 +34,7 @@ 3.4.3 4.2.0 12.0.16 - 4.1.118.Final + 4.1.119.Final 4.5.14 5.18.3 3.0.0 diff --git a/parent/pom.xml b/parent/pom.xml index d6c40c2dc4b..81167496fb0 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -185,7 +185,7 @@ 2022.7 3.2.1 [4,5) - 4.1.118.Final + 4.1.119.Final 2.0.69.Final 2.0.12 3.2.2 From a2d99319f29439df2e58eae1f38eee3d7cce9b09 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Feb 2025 07:33:30 -0500 Subject: [PATCH 427/430] Bump org.jruby:jruby from 9.4.11.0 to 9.4.12.0 (#2295) Bumps org.jruby:jruby from 9.4.11.0 to 9.4.12.0. --- updated-dependencies: - dependency-name: org.jruby:jruby dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .../src/main/release/samples/ruby_spring_support/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/distribution/src/main/release/samples/ruby_spring_support/pom.xml b/distribution/src/main/release/samples/ruby_spring_support/pom.xml index 54c544a0873..d46f0341b97 100644 --- a/distribution/src/main/release/samples/ruby_spring_support/pom.xml +++ b/distribution/src/main/release/samples/ruby_spring_support/pom.xml @@ -124,7 +124,7 @@ org.jruby jruby - 9.4.11.0 + 9.4.12.0 org.springframework From 31ff2c69c3fce92cfb0538df0d2f26495e45683f Mon Sep 17 00:00:00 2001 From: Colm O hEigeartaigh Date: Fri, 28 Feb 2025 13:08:17 +0000 Subject: [PATCH 428/430] Updating to CXF Build Utils 4.1.0 (and PMD 7.10.0) (#2289) --- parent/pom.xml | 6 +++--- pom.xml | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/parent/pom.xml b/parent/pom.xml index 81167496fb0..2ed3a1b8011 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -420,7 +420,7 @@ org.apache.maven.plugins maven-pmd-plugin - 3.21.2 + 3.23.0 org.apache.cxf.build-utils @@ -430,12 +430,12 @@ net.sourceforge.pmd pmd-core - 6.55.0 + 7.10.0 net.sourceforge.pmd pmd-java - 6.55.0 + 7.10.0 diff --git a/pom.xml b/pom.xml index 549740cc39f..d100d71908e 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ false - 4.0.2 + 4.1.0 4.1.0 17 UTF-8 From ec90dad61d1966a73af4631c33273334294a1797 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 28 Feb 2025 17:42:40 -0500 Subject: [PATCH 429/430] Bump org.apache.maven.plugins:maven-install-plugin from 3.1.3 to 3.1.4 (#2296) Bumps [org.apache.maven.plugins:maven-install-plugin](https://github.com/apache/maven-install-plugin) from 3.1.3 to 3.1.4. - [Release notes](https://github.com/apache/maven-install-plugin/releases) - [Commits](https://github.com/apache/maven-install-plugin/compare/maven-install-plugin-3.1.3...maven-install-plugin-3.1.4) --- updated-dependencies: - dependency-name: org.apache.maven.plugins:maven-install-plugin dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index d100d71908e..64c772b1806 100644 --- a/pom.xml +++ b/pom.xml @@ -455,7 +455,7 @@ org.apache.maven.plugins maven-install-plugin - 3.1.3 + 3.1.4 org.apache.maven.plugins From 31f93a97644922fce7b9102306c0c5439a091154 Mon Sep 17 00:00:00 2001 From: Andriy Redko Date: Fri, 28 Feb 2025 18:29:59 -0500 Subject: [PATCH 430/430] Fix PMD violations --- .../org/apache/cxf/interceptor/LoggingOutInterceptor.java | 2 +- .../org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java | 3 ++- .../java/org/apache/cxf/rs/security/jose/jwk/JwkUtils.java | 4 ++-- .../java/org/apache/cxf/rs/security/jose/jws/JwsUtils.java | 4 ++-- .../rs/security/oauth2/services/AbstractTokenService.java | 3 +-- rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java | 6 +++--- .../org/apache/cxf/sts/token/provider/SAMLClaimsTest.java | 4 ++-- 7 files changed, 13 insertions(+), 13 deletions(-) diff --git a/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java b/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java index 2d70b6589b7..f07a8fe24c5 100644 --- a/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java +++ b/core/src/main/java/org/apache/cxf/interceptor/LoggingOutInterceptor.java @@ -177,7 +177,7 @@ public void write(String str, int off, int len) throws IOException { public void close() throws IOException { LoggingMessage buffer = setupBuffer(message); if (count >= lim) { - buffer.getMessage().append("(message truncated to " + lim + " bytes)\n"); + buffer.getMessage().append("(message truncated to ").append(lim).append(" bytes)\n"); } StringWriter w2 = out2; if (w2 == null) { diff --git a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java index bc74d803413..aa1ac058048 100644 --- a/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java +++ b/rt/rs/extensions/search/src/main/java/org/apache/cxf/jaxrs/ext/search/fiql/FiqlParser.java @@ -19,6 +19,7 @@ package org.apache.cxf.jaxrs.ext.search.fiql; import java.util.ArrayList; import java.util.Collections; +import java.util.EnumMap; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -79,7 +80,7 @@ public class FiqlParser extends AbstractSearchConditionParser { OPERATORS_MAP.put(EQ, ConditionType.EQUALS); OPERATORS_MAP.put(NEQ, ConditionType.NOT_EQUALS); - CONDITION_MAP = new HashMap<>(); + CONDITION_MAP = new EnumMap<>(ConditionType.class); CONDITION_MAP.put(ConditionType.GREATER_THAN, GT); CONDITION_MAP.put(ConditionType.GREATER_OR_EQUALS, GE); CONDITION_MAP.put(ConditionType.LESS_THAN, LT); diff --git a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwk/JwkUtils.java b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwk/JwkUtils.java index 40c9010aa98..824f9186415 100644 --- a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwk/JwkUtils.java +++ b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jwk/JwkUtils.java @@ -36,7 +36,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.HashMap; +import java.util.EnumMap; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -79,7 +79,7 @@ public final class JwkUtils { private static final Map> JWK_REQUIRED_FIELDS_MAP; static { - JWK_REQUIRED_FIELDS_MAP = new HashMap<>(); + JWK_REQUIRED_FIELDS_MAP = new EnumMap<>(KeyType.class); JWK_REQUIRED_FIELDS_MAP.put(KeyType.RSA, Arrays.asList( JsonWebKey.RSA_PUBLIC_EXP, JsonWebKey.KEY_TYPE, JsonWebKey.RSA_MODULUS)); JWK_REQUIRED_FIELDS_MAP.put(KeyType.EC, Arrays.asList( diff --git a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsUtils.java b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsUtils.java index f9155bf3529..9aaf81e00e9 100644 --- a/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsUtils.java +++ b/rt/rs/security/jose-parent/jose/src/main/java/org/apache/cxf/rs/security/jose/jws/JwsUtils.java @@ -25,7 +25,7 @@ import java.security.interfaces.ECPrivateKey; import java.security.interfaces.RSAKey; import java.util.ArrayList; -import java.util.HashMap; +import java.util.EnumMap; import java.util.List; import java.util.Map; import java.util.Properties; @@ -229,7 +229,7 @@ public static JwsSignatureVerifier getHmacSignatureVerifier(byte[] key, Signatur public static Map> getJwsJsonSignatureMap( List signatures) { - Map> map = new HashMap<>(); + Map> map = new EnumMap<>(SignatureAlgorithm.class); for (JwsJsonSignatureEntry entry : signatures) { SignatureAlgorithm sigAlgorithm = entry.getUnionHeader().getSignatureAlgorithm(); List entries = map.get(sigAlgorithm); diff --git a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/services/AbstractTokenService.java b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/services/AbstractTokenService.java index 33010c51813..8a8702cc47f 100644 --- a/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/services/AbstractTokenService.java +++ b/rt/rs/security/oauth-parent/oauth2/src/main/java/org/apache/cxf/rs/security/oauth2/services/AbstractTokenService.java @@ -138,8 +138,7 @@ protected boolean isConfidenatialClientSecretValid(Client client, String provide if (clientSecretVerifier != null) { return clientSecretVerifier.validateClientSecret(client, providedClientSecret); } - return client.getClientSecret() != null - && providedClientSecret != null && client.getClientSecret().equals(providedClientSecret); + return client.getClientSecret() != null && client.getClientSecret().equals(providedClientSecret); } protected boolean isValidPublicClient(Client client, String clientId) { return canSupportPublicClients diff --git a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java index b176eae0092..76ecd7aa30a 100644 --- a/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java +++ b/rt/ws/rm/src/main/java/org/apache/cxf/ws/rm/RMEndpoint.java @@ -20,7 +20,7 @@ package org.apache.cxf.ws.rm; import java.util.Collection; -import java.util.HashMap; +import java.util.EnumMap; import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; @@ -101,8 +101,8 @@ public class RMEndpoint { private EndpointReferenceType replyTo; private Source source; private Destination destination; - private final Map services = new HashMap<>(); - private final Map endpoints = new HashMap<>(); + private final Map services = new EnumMap<>(ProtocolVariation.class); + private final Map endpoints = new EnumMap<>(ProtocolVariation.class); private Object tokenStore; private Proxy proxy; private Servant servant; diff --git a/services/sts/sts-core/src/test/java/org/apache/cxf/sts/token/provider/SAMLClaimsTest.java b/services/sts/sts-core/src/test/java/org/apache/cxf/sts/token/provider/SAMLClaimsTest.java index cb41395e12d..a56e083075e 100644 --- a/services/sts/sts-core/src/test/java/org/apache/cxf/sts/token/provider/SAMLClaimsTest.java +++ b/services/sts/sts-core/src/test/java/org/apache/cxf/sts/token/provider/SAMLClaimsTest.java @@ -403,7 +403,7 @@ public void testSaml2CombinedClaimsMultipleClaimsHandlers() throws Exception { assertTrue(tokenString.contains(providerResponse.getTokenId())); assertTrue(tokenString.contains("AttributeStatement")); - String requiredClaim = CustomClaimsHandler.ROLE_CLAIM.toString(); + String requiredClaim = CustomClaimsHandler.ROLE_CLAIM; assertTrue(tokenString.contains(requiredClaim)); assertTrue(tokenString.contains("DUMMY")); assertTrue(tokenString.contains("CustomRole")); @@ -447,7 +447,7 @@ public void testSaml2SeparateClaimsMultipleClaimsHandlers() throws Exception { assertTrue(tokenString.contains(providerResponse.getTokenId())); assertTrue(tokenString.contains("AttributeStatement")); - String requiredClaim = CustomClaimsHandler.ROLE_CLAIM.toString(); + String requiredClaim = CustomClaimsHandler.ROLE_CLAIM; assertTrue(tokenString.contains(requiredClaim)); assertTrue(tokenString.contains("DUMMY")); assertTrue(tokenString.contains("CustomRole"));