From 21fb887e564b382a9cca57bbe62e20b98917a5b5 Mon Sep 17 00:00:00 2001 From: "chris.korakidis" Date: Fri, 12 Dec 2025 21:48:47 +0000 Subject: [PATCH] 800: Upgrade to java 25, upgrade vulnerable dependencies --- .github/workflows/master.yml | 4 +- .github/workflows/pull_request.yml | 2 +- pom.xml | 714 ++++++++++-------- src/main/docker/Dockerfile | 2 +- .../kafdrop/util/AvroMessageSerializer.java | 12 +- src/main/resources/templates/error.ftlh | 10 +- .../java/kafdrop/AbstractIntegrationTest.java | 2 +- 7 files changed, 404 insertions(+), 342 deletions(-) diff --git a/.github/workflows/master.yml b/.github/workflows/master.yml index 9d2a78ff..14d18e1d 100644 --- a/.github/workflows/master.yml +++ b/.github/workflows/master.yml @@ -13,10 +13,10 @@ jobs: steps: - uses: actions/checkout@v5 - - name: Set up JDK 17 + name: Set up JDK 25 uses: actions/setup-java@v5 with: - java-version: '17' + java-version: '25' distribution: 'temurin' cache: maven - diff --git a/.github/workflows/pull_request.yml b/.github/workflows/pull_request.yml index 3e3aef33..66cf4d35 100644 --- a/.github/workflows/pull_request.yml +++ b/.github/workflows/pull_request.yml @@ -29,7 +29,7 @@ jobs: - name: Set up JDK uses: actions/setup-java@v5 with: - java-version: '17' + java-version: '25' distribution: 'adopt' cache: maven - name: Build with Maven diff --git a/pom.xml b/pom.xml index 90a7a842..2e38c83d 100644 --- a/pom.xml +++ b/pom.xml @@ -1,345 +1,407 @@ - 4.0.0 + 4.0.0 - - org.springframework.boot - spring-boot-starter-parent - 3.5.7 - - com.obsidiandynamics.kafdrop - kafdrop - 4.2.1-SNAPSHOT + + org.springframework.boot + spring-boot-starter-parent + 3.5.8 + + com.obsidiandynamics.kafdrop + kafdrop + 4.2.1-SNAPSHOT - For when you have a Kafka cluster to monitor + For when you have a Kafka cluster to monitor - - -Xdoclint:none + + -Xdoclint:none - - -Xdoclint:none - UTF-8 - 3.25.8 - 1.21.3 - 7.9.1 - linux/amd64,linux/arm64 - + + -Xdoclint:none + UTF-8 + 3.25.8 + 2.0.2 + 8.1.1 + linux/amd64,linux/arm64 + - - scm:git:git@github.com:obsidiandynamics/kafdrop.git - scm:git:git@github.com:obsidiandynamics/kafdrop.git - HEAD - + + scm:git:git@github.com:obsidiandynamics/kafdrop.git + scm:git:git@github.com:obsidiandynamics/kafdrop.git + HEAD + - - - bintray-obsidiandynamics-kafdrop - obsidiandynamics-kafdrop - https://api.bintray.com/maven/obsidiandynamics/kafdrop/main/;publish=1 - - + + + bintray-obsidiandynamics-kafdrop + obsidiandynamics-kafdrop + https://api.bintray.com/maven/obsidiandynamics/kafdrop/main/;publish=1 + + - - - central - https://repo1.maven.org/maven2 - - - confluent - https://packages.confluent.io/maven/ - - + + + central + https://repo1.maven.org/maven2 + + + confluent + https://packages.confluent.io/maven/ + + - - - - com.google.protobuf - protobuf-java - ${protobuf.version} - - - - com.google.protobuf - protobuf-java-util - ${protobuf.version} - - - org.apache.commons - commons-lang3 - - - org.springframework.boot - spring-boot-configuration-processor - true - - - org.projectlombok - lombok - - - io.confluent - kafka-avro-serializer - ${kafka-libs.version} - - - org.slf4j - slf4j-log4j12 - - - - - io.confluent - kafka-schema-registry-client - ${kafka-libs.version} - - - org.slf4j - slf4j-log4j12 - - - io.swagger.core.v3 - swagger-annotations - - - - - io.confluent - kafka-protobuf-serializer - ${kafka-libs.version} - - - org.slf4j - slf4j-log4j12 - - - - - org.apache.avro - avro - 1.12.1 - - - org.msgpack - msgpack-core - 0.9.10 - + + + + com.google.protobuf + protobuf-java + ${protobuf.version} + + + + com.google.protobuf + protobuf-java-util + ${protobuf.version} + + + org.apache.commons + commons-lang3 + + + org.springframework.boot + spring-boot-configuration-processor + true + + + org.projectlombok + lombok + 1.18.42 + provided + + + io.confluent + kafka-avro-serializer + ${kafka-libs.version} + + + org.slf4j + slf4j-log4j12 + + + org.lz4 + lz4-java + + + + + org.apache.commons + commons-lang3 + 3.20.0 + + + io.confluent + kafka-schema-registry-client + ${kafka-libs.version} + + + org.slf4j + slf4j-log4j12 + + + io.swagger.core.v3 + swagger-annotations + + + org.lz4 + lz4-java + + + + + io.confluent + kafka-protobuf-serializer + ${kafka-libs.version} + + + org.slf4j + slf4j-log4j12 + + + org.lz4 + lz4-java + + + org.apache.commons + commons-lang3 + + + + + at.yawk.lz4 + lz4-java + 1.10.1 + + + org.apache.avro + avro + 1.12.1 + + + org.msgpack + msgpack-core + 0.9.10 + - - - org.springframework.boot - spring-boot-starter-web - - - org.springframework.boot - spring-boot-starter-logging - - - org.springframework.boot - spring-boot-starter-tomcat - - - - - org.springframework.boot - spring-boot-starter-validation - - - org.springframework.kafka - spring-kafka - - - org.springframework.boot - spring-boot-starter-undertow - - - org.springframework.boot - spring-boot-starter-freemarker - - - org.springframework.boot - spring-boot-starter-log4j2 - - - org.springframework.boot - spring-boot-starter-actuator - + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-logging + + + org.springframework.boot + spring-boot-starter-tomcat + + + + + org.springframework.boot + spring-boot-starter-validation + + + org.springframework.kafka + spring-kafka + + + org.springframework.boot + spring-boot-starter-undertow + + + org.springframework.boot + spring-boot-starter-freemarker + + + org.springframework.boot + spring-boot-starter-log4j2 + + + org.springframework.boot + spring-boot-starter-actuator + - - - org.springframework - spring-context - - - org.springframework - spring-core - - - org.springframework - spring-beans - + + + org.springframework + spring-context + + + org.springframework + spring-core + + + org.springframework + spring-beans + - - - org.springdoc - springdoc-openapi-starter-webmvc-ui - 2.8.14 - + + + org.springdoc + springdoc-openapi-starter-webmvc-ui + 2.8.14 + + + org.apache.commons + commons-lang3 + + + - - - org.springframework.boot - spring-boot-starter-test - test - + + + org.springframework.boot + spring-boot-starter-test + test + - - - org.testcontainers - testcontainers - ${testcontainers.version} - test - - - org.testcontainers - kafka - ${testcontainers.version} - test - + + + org.testcontainers + testcontainers + 2.0.2 + test + + + org.apache.commons + commons-compress + + + + + org.apache.commons + commons-compress + 1.28.0 + + + org.apache.commons + commons-lang3 + + + + + org.testcontainers + testcontainers-kafka + ${testcontainers.version} + test + - + - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.14.1 - - 17 - 17 - true - - - - maven-assembly-plugin - - - src/main/assembly/bin.xml - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - - true - lib/ - kafdrop.Kafdrop - - - - - - io.fabric8 - docker-maven-plugin - 0.47.0 - - - - obsidiandynamics/kafdrop:${project.version} - - - - artifact - - - - - ${docker.platforms} - - - ${project.build.directory}/docker-ready - true - - - - - - - maven-resources-plugin - - - prepare-dockerfile - validate - - copy-resources - - - ${project.build.directory}/docker-ready - - - src/main/docker - true - - - - - - - - org.springframework.boot - spring-boot-maven-plugin - - ${start.class} - ZIP - - - - repackage - - repackage - - - - build-info - - build-info - - - - - - org.apache.maven.plugins - maven-failsafe-plugin - - - - integration-test - verify - - - - - - - - src/main/resources - true - - static/** - - - - src/main/resources - false - - static/** - - - - + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.14.1 + + 25 + 25 + 25 + true + + + org.projectlombok + lombok + 1.18.42 + + + + + + maven-assembly-plugin + 3.8.0 + + + src/main/assembly/bin.xml + + + + + + org.apache.maven.plugins + maven-jar-plugin + 3.5.0 + + + + true + lib/ + kafdrop.Kafdrop + + + + + + io.fabric8 + docker-maven-plugin + 0.48.0 + + + + obsidiandynamics/kafdrop:${project.version} + + + + artifact + + + + + ${docker.platforms} + + + ${project.build.directory}/docker-ready + true + + + + + + + maven-resources-plugin + + + prepare-dockerfile + validate + + copy-resources + + + ${project.build.directory}/docker-ready + + + src/main/docker + true + + + + + + + + org.springframework.boot + spring-boot-maven-plugin + 3.5.8 + + ${start.class} + ZIP + + + + repackage + + repackage + + + + build-info + + build-info + + + + + + org.apache.maven.plugins + maven-failsafe-plugin + + + + integration-test + verify + + + + + + + + src/main/resources + true + + static/** + + + + src/main/resources + false + + static/** + + + + diff --git a/src/main/docker/Dockerfile b/src/main/docker/Dockerfile index 515d1549..85d80999 100644 --- a/src/main/docker/Dockerfile +++ b/src/main/docker/Dockerfile @@ -1,4 +1,4 @@ -FROM eclipse-temurin:17.0.17_10-jdk +FROM eclipse-temurin:25.0.1_8-jdk ADD kafdrop.sh / ADD maven/ /kafdrop/ diff --git a/src/main/java/kafdrop/util/AvroMessageSerializer.java b/src/main/java/kafdrop/util/AvroMessageSerializer.java index a41bd97b..26fc5a09 100644 --- a/src/main/java/kafdrop/util/AvroMessageSerializer.java +++ b/src/main/java/kafdrop/util/AvroMessageSerializer.java @@ -1,10 +1,10 @@ package kafdrop.util; -import java.util.HashMap; - -import io.confluent.kafka.serializers.AbstractKafkaAvroSerDeConfig; +import io.confluent.kafka.serializers.KafkaAvroDeserializerConfig; import io.confluent.kafka.serializers.KafkaAvroSerializer; +import java.util.HashMap; + public class AvroMessageSerializer implements MessageSerializer { private final String topicName; @@ -23,10 +23,10 @@ public byte[] serializeMessage(String value) { private KafkaAvroSerializer getSerializer(String schemaRegistryUrl, String schemaRegistryAuth) { final var config = new HashMap(); - config.put(AbstractKafkaAvroSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG, schemaRegistryUrl); + config.put(KafkaAvroDeserializerConfig.SCHEMA_REGISTRY_URL_CONFIG, schemaRegistryUrl); if (schemaRegistryAuth != null) { - config.put(AbstractKafkaAvroSerDeConfig.BASIC_AUTH_CREDENTIALS_SOURCE, "USER_INFO"); - config.put(AbstractKafkaAvroSerDeConfig.USER_INFO_CONFIG, schemaRegistryAuth); + config.put(KafkaAvroDeserializerConfig.BASIC_AUTH_CREDENTIALS_SOURCE, "USER_INFO"); + config.put(KafkaAvroDeserializerConfig.USER_INFO_CONFIG, schemaRegistryAuth); } final var kafkaAvroSerializer = new KafkaAvroSerializer(); kafkaAvroSerializer.configure(config, false); diff --git a/src/main/resources/templates/error.ftlh b/src/main/resources/templates/error.ftlh index af10b2ad..dcb2fee6 100644 --- a/src/main/resources/templates/error.ftlh +++ b/src/main/resources/templates/error.ftlh @@ -1,14 +1,14 @@ <#import "/spring.ftl" as spring /> <#import "lib/template.ftlh" as template> -<@template.header "${error.error}"/> -

${error.error}

+<@template.header "${error['message']!''}"/> +

${error['message']}

-A ${error.status} error has occurred: ${error.message} +A ${error['status']!''} error has occurred: ${error['message']!''}
-<#if error.trace??> +<#if error['trace']??>
Stack trace
- ${error.trace} + ${error['trace']}
<#else> diff --git a/src/test/java/kafdrop/AbstractIntegrationTest.java b/src/test/java/kafdrop/AbstractIntegrationTest.java index 4bf80c80..887d8fbd 100644 --- a/src/test/java/kafdrop/AbstractIntegrationTest.java +++ b/src/test/java/kafdrop/AbstractIntegrationTest.java @@ -16,7 +16,7 @@ @ContextConfiguration(initializers = AbstractIntegrationTest.Initializer.class) abstract class AbstractIntegrationTest { static class Initializer implements ApplicationContextInitializer { - static KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka").withTag("5.4.3")); + static KafkaContainer kafka = new KafkaContainer(DockerImageName.parse("confluentinc/cp-kafka").withTag("7.7.7")); public static Map getProperties() { Startables.deepStart(List.of(kafka)).join();