This is an automated email from the ASF dual-hosted git repository.

riemer pushed a commit to branch dev
in repository https://gitbox.apache.org/repos/asf/streampipes.git


The following commit(s) were added to refs/heads/dev by this push:
     new f9cda208eb chore(deps): Bump Spring Boot to v4 (#4136)
f9cda208eb is described below

commit f9cda208ebb2da4d53c1e66e450257d71b4f2826
Author: Dominik Riemer <[email protected]>
AuthorDate: Mon Feb 2 12:36:30 2026 +0100

    chore(deps): Bump Spring Boot to v4 (#4136)
---
 .github/workflows/build.yml                        |   4 +-
 .github/workflows/cypress-test.yml                 |   4 +-
 .github/workflows/extensions-docs.yml              |   4 +-
 .github/workflows/go-client-e2e-test.yml           |   6 +-
 .github/workflows/mvn-integration-test.yml         |   4 +-
 .github/workflows/pr-validation.yml                |   8 +-
 pom.xml                                            | 906 +++++++--------------
 streampipes-connect-transformer-groovy/pom.xml     |   1 -
 streampipes-connect-transformer-js/pom.xml         |   2 -
 streampipes-extensions-management/pom.xml          |   4 -
 .../streampipes-connect-adapters/pom.xml           |   4 -
 .../streampipes-connectors-opcua/pom.xml           |   5 +
 .../streampipes-connectors-plc/pom.xml             |   3 -
 .../streampipes-connectors-pulsar/pom.xml          |   3 +
 .../streampipes-extensions-all-iiot/Dockerfile     |   4 +-
 .../streampipes-extensions-all-iiot/pom.xml        |  33 +-
 .../streampipes-extensions-all-jvm/Dockerfile      |   6 +-
 .../streampipes-extensions-all-jvm/pom.xml         |  42 -
 .../streampipes-extensions-iiot-minimal/Dockerfile |   4 +-
 .../streampipes-extensions-iiot-minimal/pom.xml    |  38 -
 .../streampipes-processors-enricher-jvm/pom.xml    |   2 -
 .../streampipes-sinks-brokers-jvm/pom.xml          |   4 -
 .../streampipes-sinks-databases-jvm/pom.xml        |  20 -
 .../messaging/jms/ActiveMQConnectionProvider.java  |   5 +-
 .../messaging/jms/ActiveMQConsumer.java            |   8 +-
 .../messaging/jms/ActiveMQPublisher.java           |  14 +-
 .../kafka/config/ConsumerConfigFactory.java        |   2 -
 streampipes-messaging-mqtt/pom.xml                 |   4 -
 streampipes-messaging-pulsar/pom.xml               |   5 -
 .../svcdiscovery/SpServiceRegistration.java        |   2 +
 .../shared/serializer/JacksonConfiguration.java    |  40 +
 .../rest/security/SpPermissionEvaluator.java       |   4 +-
 streampipes-service-base/pom.xml                   |  11 +-
 streampipes-service-core-minimal/Dockerfile        |   4 +-
 streampipes-service-core/Dockerfile                |   4 +-
 streampipes-service-core/pom.xml                   |  49 +-
 .../service/core/StreamPipesCoreApplication.java   |   3 +-
 .../service/core/WebSecurityConfig.java            | 130 +--
 streampipes-service-extensions/pom.xml             |   6 -
 .../StreamPipesExtensionsServiceBase.java          |   4 +-
 .../extensions/security/WebSecurityConfig.java     |  48 +-
 41 files changed, 525 insertions(+), 929 deletions(-)

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index e04b052ec3..2e663feace 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -28,11 +28,11 @@ jobs:
       - name: Checkout
         uses: actions/checkout@v6
 
-      - name: Set up JDK 17
+      - name: Set up JDK 25
         uses: actions/setup-java@v5
         with:
           distribution: 'temurin'
-          java-version: '17'
+          java-version: '25'
           cache: 'maven'
 
       - name: Set up Node
diff --git a/.github/workflows/cypress-test.yml 
b/.github/workflows/cypress-test.yml
index 5119d3d57e..ac65d79956 100644
--- a/.github/workflows/cypress-test.yml
+++ b/.github/workflows/cypress-test.yml
@@ -27,11 +27,11 @@ jobs:
       - name: Checkout
         uses: actions/checkout@v6
 
-      - name: Set up JDK 17
+      - name: Set up JDK 25
         uses: actions/setup-java@v5
         with:
           distribution: 'temurin'
-          java-version: '17'
+          java-version: '25'
           cache: 'maven'
 
       - name: Set up Node
diff --git a/.github/workflows/extensions-docs.yml 
b/.github/workflows/extensions-docs.yml
index 9d427f04c2..dcf881a6dc 100644
--- a/.github/workflows/extensions-docs.yml
+++ b/.github/workflows/extensions-docs.yml
@@ -33,11 +33,11 @@ jobs:
           git config user.name 'github-actions[bot]'
           git config user.email 'github-actions[bot]@users.noreply.github.com'
 
-      - name: Set up JDK 17
+      - name: Set up JDK 25
         uses: actions/setup-java@v5
         with:
           distribution: "temurin"
-          java-version: "17"
+          java-version: "25"
           cache: "maven"
 
       - name: Build with Maven
diff --git a/.github/workflows/go-client-e2e-test.yml 
b/.github/workflows/go-client-e2e-test.yml
index 420c15cd9e..b3d3db0803 100644
--- a/.github/workflows/go-client-e2e-test.yml
+++ b/.github/workflows/go-client-e2e-test.yml
@@ -41,11 +41,11 @@ jobs:
         with:
           go-version: '1.21'
 
-      - name: Set up JDK 17
+      - name: Set up JDK 25
         uses: actions/setup-java@v5
         with:
           distribution: 'temurin'
-          java-version: '17'
+          java-version: '25'
           cache: 'maven'
 
       - name: Build with Maven
@@ -65,4 +65,4 @@ jobs:
         run: |
           cd ./streampipes-client-e2e/tool
           chmod +x ./start-streampipes-client-e2e.sh
-          ./start-streampipes-client-e2e.sh -t go-client-e2e.sh
\ No newline at end of file
+          ./start-streampipes-client-e2e.sh -t go-client-e2e.sh
diff --git a/.github/workflows/mvn-integration-test.yml 
b/.github/workflows/mvn-integration-test.yml
index 049eee7f95..f62f0c9f30 100644
--- a/.github/workflows/mvn-integration-test.yml
+++ b/.github/workflows/mvn-integration-test.yml
@@ -26,11 +26,11 @@ jobs:
       - name: Checkout
         uses: actions/checkout@v6
 
-      - name: Set up JDK 17
+      - name: Set up JDK 25
         uses: actions/setup-java@v5
         with:
           distribution: 'temurin'
-          java-version: '17'
+          java-version: '25'
           cache: 'maven'
       - name: Set up Docker
         uses: docker/setup-buildx-action@v2
diff --git a/.github/workflows/pr-validation.yml 
b/.github/workflows/pr-validation.yml
index d5de6c9ec0..b9e443ce75 100644
--- a/.github/workflows/pr-validation.yml
+++ b/.github/workflows/pr-validation.yml
@@ -25,11 +25,11 @@ jobs:
       - name: Checkout
         uses: actions/checkout@v6
 
-      - name: Set up JDK 17
+      - name: Set up JDK 25
         uses: actions/setup-java@v5
         with:
           distribution: 'temurin'
-          java-version: '17'
+          java-version: '25'
           cache: 'maven'
 
       - name: Validate java code
@@ -78,11 +78,11 @@ jobs:
       - name: Checkout
         uses: actions/checkout@v6
 
-      - name: Set up JDK 17
+      - name: Set up JDK 25
         uses: actions/setup-java@v5
         with:
           distribution: 'temurin'
-          java-version: '17'
+          java-version: '25'
           cache: 'maven'
 
       - name: Set up Node
diff --git a/pom.xml b/pom.xml
index bb4369da70..3f6c4bc17f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -24,7 +24,7 @@
     <parent>
         <groupId>org.apache</groupId>
         <artifactId>apache</artifactId>
-        <version>32</version>
+        <version>37</version>
     </parent>
 
     <groupId>org.apache.streampipes</groupId>
@@ -39,116 +39,94 @@
     <url>https://streampipes.apache.org</url>
 
     <properties>
-        <activemq-client.version>5.18.7</activemq-client.version>
-        <antlr4.version>4.11.1</antlr4.version>
-        <amqp-client.version>5.21.0</amqp-client.version>
+        <spring-boot.version>4.0.2</spring-boot.version>
+        <plc4x.version>0.13.1</plc4x.version>
+
         <apache-sis-referencing.version>1.2</apache-sis-referencing.version>
-        <boofcv.version>1.1.0</boofcv.version>
+        <antlr4.version>4.11.1</antlr4.version>
         <bcprov-jdk18on.version>1.78.1</bcprov-jdk18on.version>
+        <boofcv.version>1.1.0</boofcv.version>
         <classindex.version>3.9</classindex.version>
-        <checker-qual.version>3.43.0</checker-qual.version>
-        <commons-codec.version>1.17.0</commons-codec.version>
-        <commons-csv.version>1.14.1</commons-csv.version>
         <commons-collections.version>3.2.2</commons-collections.version>
+        <commoms-collection4.version>4.4</commoms-collection4.version>
         <commons-compress.version>1.27.1</commons-compress.version>
+        <commons-configuration2.version>2.12.0</commons-configuration2.version>
+        <commons-csv.version>1.14.1</commons-csv.version>
         <commons-io.version>2.17.0</commons-io.version>
-        <commons-lang3.version>3.18.0</commons-lang3.version>
-        <commons-logging.version>1.3.2</commons-logging.version>
-        <commons-pool2.version>2.12.0</commons-pool2.version>
+        <commons-jexl.version>3.4.0</commons-jexl.version>
         <commons-text.version>1.12.0</commons-text.version>
-        <commoms-collection4.version>4.4</commoms-collection4.version>
         <ditto-client.version>1.0.0</ditto-client.version>
-        <eclipse.milo.version>0.6.16</eclipse.milo.version>
         <error-prone.version>2.10.0</error-prone.version>
-        <file-management.version>3.1.0</file-management.version>
-        <findbugs.version>3.0.2</findbugs.version>
-        <fogsy-qudt.version>1.0</fogsy-qudt.version>
-        <geojson-jackson.version>1.14</geojson-jackson.version>
         <google-maps-services.version>2.2.0</google-maps-services.version>
-        <graalvm.js.version>25.0.0</graalvm.js.version>
+        <graalvm.js.version>25.0.2</graalvm.js.version>
         <groovy.version>5.0.3</groovy.version>
-        <gson.version>2.12.1</gson.version>
-        <guava.version>33.4.0-jre</guava.version>
         <grpc.version>1.76.0</grpc.version>
-        <httpclient.version>4.5.13</httpclient.version>
-        <httpcore.version>4.4.9</httpcore.version>
+        <guava.version>33.5.0-jre</guava.version>
         <hadoop.version>3.4.1</hadoop.version>
         
<hadoop-mapreduce-client-core.version>3.4.1</hadoop-mapreduce-client-core.version>
+        <jgrapht.version>1.5.1</jgrapht.version>
+        <jjwt.version>0.11.2</jjwt.version>
+        <lightcouch.version>0.2.0</lightcouch.version>
+        <eclipse.milo.version>0.6.16</eclipse.milo.version>
+        <fogsy-qudt.version>1.0</fogsy-qudt.version>
+        <httpclient.version>4.5.13</httpclient.version>
+        <httpcore.version>4.4.9</httpcore.version>
         <influxdb.version>2.24</influxdb.version>
         <inlong.version>1.13.0</inlong.version>
         <iotdb.version>1.3.0</iotdb.version>
-        <jackson.version>2.18.3</jackson.version>
-        <jackson.databind.version>2.18.3</jackson.databind.version>
-        <jakarta-annotation.version>3.0.0</jakarta-annotation.version>
-        <jakarta-activation-api.version>2.1.3</jakarta-activation-api.version>
-        <jakarta-inject-api.version>2.0.1</jakarta-inject-api.version>
-        <jakarta-servlet-api.version>6.0.0</jakarta-servlet-api.version>
-        <jakarta-xml-bind-api.version>4.0.0</jakarta-xml-bind-api.version>
-        <javax.xml.bind.version>2.4.0-b180725.0427</javax.xml.bind.version>
-        <java-websocket.version>1.6.0</java-websocket.version>
-        <jaxb-runtime.version>2.3.2</jaxb-runtime.version>
-        <javax-websocket-api.version>1.1</javax-websocket-api.version>
-        
<jakarta-persistence-api.version>3.0.1</jakarta-persistence-api.version>
-        <javassist.version>3.30.1-GA</javassist.version>
-        <jboss-logging.version>3.5.2.Final</jboss-logging.version>
-        <jedis.version>5.1.4</jedis.version>
-        <jetbrains.version> 16.0.3</jetbrains.version>
-        <jetty-client.version>12.0.19</jetty-client.version>
-        <jersey.version>3.1.3</jersey.version>
-        <jgrapht.version>1.5.1</jgrapht.version>
-        <json-smart.version>2.4.10</json-smart.version>
-        <jsrosbridge.version>0.2.0</jsrosbridge.version>
-        <jjwt.version>0.11.2</jjwt.version>
         <jts-core.version>1.19.0</jts-core.version>
-        <kafka.version>3.9.1</kafka.version>
-        <lightcouch.version>0.2.0</lightcouch.version>
-        
<maven-plugin-annotations.version>3.13.0</maven-plugin-annotations.version>
-        <mailapi.version>1.4.3</mailapi.version>
-        <micrometer-prometheus.version>1.14.3</micrometer-prometheus.version>
-        <micrometer-observation.version>1.14.3</micrometer-observation.version>
-        <reactive-streams.version>1.0.4</reactive-streams.version>
-        <mqtt-client.version>1.3.0</mqtt-client.version>
         <milvus-sdk-java.version>2.5.10</milvus-sdk-java.version>
+        <mqtt-client.version>1.3.0</mqtt-client.version>
         <nats.version>2.19.1</nats.version>
-        <netty.version>4.2.0.Final</netty.version>
         <okhttp.version>3.13.1</okhttp.version>
         <opencsv.version>5.9</opencsv.version>
         <opennlp.version>2.3.1</opennlp.version>
-        <plc4x.version>0.13.1</plc4x.version>
-        
<plexus-component-annotations.version>2.2.0</plexus-component-annotations.version>
-        
<plexus-interactivity-api.version>1.1</plexus-interactivity-api.version>
-        <plexus-utils.version>4.0.0</plexus-utils.version>
-        <postgresql.version>42.7.2</postgresql.version>
-        <protobuf.version>4.28.2</protobuf.version>
-        <pulsar.version>3.2.2</pulsar.version>
         <parquet.version>1.16.0</parquet.version>
-        <quartz.version>2.3.2</quartz.version>
+        <protobuf.version>4.28.2</protobuf.version>
+        <qdrant-java-client.version>1.14.0</qdrant-java-client.version>
+        <plc4x.version>0.13.1</plc4x.version>
+
         <!-- needs to be lower than 4.x.x, see 
https://github.com/apache/streampipes/issues/1495 -->
         <rdf4j.version>3.7.7</rdf4j.version>
+
         <rendersnake.version>1.9.0</rendersnake.version>
         <rocketmq.version>5.0.2</rocketmq.version>
+        <jsrosbridge.version>0.2.0</jsrosbridge.version>
         <s3.version>2.25.14</s3.version>
         <siddhi.version>5.1.27</siddhi.version>
         <simple-java-mail.version>8.10.0</simple-java-mail.version>
         <slack-api.version>1.4.0</slack-api.version>
-        <slf4j.version>2.0.6</slf4j.version>
-        <slf4j-simple.version>2.0.6</slf4j-simple.version>
-        <snakeyaml.version>2.2</snakeyaml.version>
-        <springdoc.version>2.8.4</springdoc.version>
-        <spring.version>6.2.2</spring.version>
-        <spring-boot.version>3.4.2</spring-boot.version>
-        <spring-security.version>6.5.5</spring-security.version>
-        <swagger.version>2.2.19</swagger.version>
-        <type-parser.version>0.8.1</type-parser.version>
+        <springdoc.version>3.0.1</springdoc.version>
+        <swagger.version>2.2.42</swagger.version>
         <tsfile.version>1.1.0</tsfile.version>
-        <hawtbuf.version>1.11</hawtbuf.version>
-        <woodstox.version>7.0.0</woodstox.version>
+        <type-parser.version>0.8.1</type-parser.version>
         <xz.version>1.10</xz.version>
-        <qdrant-java-client.version>1.14.0</qdrant-java-client.version>
 
-        <!-- Test dependencies -->
-        <junit.version>5.11.4</junit.version>
-        <mockito.version>5.12.0</mockito.version>
+        <!-- streampipes-maven-plugin -->
+        <file-management.version>3.1.0</file-management.version>
+        <maven.version>3.8.7</maven.version>
+        
<maven-plugin-annotations.version>3.13.0</maven-plugin-annotations.version>
+        
<plexus-component-annotations.version>2.2.0</plexus-component-annotations.version>
+        
<plexus-interactivity-api.version>1.1</plexus-interactivity-api.version>
+        <plexus-utils.version>4.0.0</plexus-utils.version>
+
+
+        <!-- dependency convergence -->
+        <javassist.version>3.30.1-GA</javassist.version>
+        <woodstox.version>7.0.0</woodstox.version>
+        <istack-runtime.version>4.1.2</istack-runtime.version>
+        <javax.xml.bind.version>2.3.1</javax.xml.bind.version>
+        <jaxb-runtime.version>2.3.9</jaxb-runtime.version>
+        <jakarta-xml-bind-api.version>4.0.0</jakarta-xml-bind-api.version>
+        <java-websocket.version>1.6.0</java-websocket.version>
+        <javax-websocket-api.version>1.1</javax-websocket-api.version>
+        <jetbrains.version>16.0.3</jetbrains.version>
+
+        <maven.compiler.source>25</maven.compiler.source>
+        <maven.compiler.target>25</maven.compiler.target>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+
+
 
         <!-- Maven settings & dependencies -->
         <apache-rat-plugin.version>0.16.1</apache-rat-plugin.version>
@@ -156,15 +134,15 @@
         <checkstyle.version>10.17.0</checkstyle.version>
         <extra-enforcer-rules.version>1.8.0</extra-enforcer-rules.version>
         <formatter-maven-plugin.version>2.23.0</formatter-maven-plugin.version>
-        <maven.compiler.source>17</maven.compiler.source>
-        <maven.compiler.target>17</maven.compiler.target>
+        <maven.compiler.source>25</maven.compiler.source>
+        <maven.compiler.target>25</maven.compiler.target>
         
<maven-checkstyle-plugin.version>3.3.1</maven-checkstyle-plugin.version>
         <maven-shade-plugin.version>3.6.0</maven-shade-plugin.version>
-        <maven.version>3.8.7</maven.version>
+
+        <minimalMavenBuildVersion>3.8</minimalMavenBuildVersion>
         
<typescript-generator-maven-plugin.version>3.2.1263</typescript-generator-maven-plugin.version>
         <spotless.version>2.43.0</spotless.version>
 
-
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <dependency.locations.enabled>false</dependency.locations.enabled>
     </properties>
@@ -172,61 +150,63 @@
     <dependencyManagement>
         <dependencies>
             <dependency>
-                <groupId>org.springframework</groupId>
-                <artifactId>spring-framework-bom</artifactId>
-                <version>${spring.version}</version>
+                <groupId>org.springframework.boot</groupId>
+                <artifactId>spring-boot-dependencies</artifactId>
+                <version>${spring-boot.version}</version>
                 <scope>import</scope>
                 <type>pom</type>
             </dependency>
+
+
             <dependency>
-                <groupId>commons-codec</groupId>
-                <artifactId>commons-codec</artifactId>
-                <version>${commons-codec.version}</version>
+                <groupId>javax.xml.bind</groupId>
+                <artifactId>jaxb-api</artifactId>
+                <version>${javax.xml.bind.version}</version>
             </dependency>
             <dependency>
-                  <groupId>commons-collections</groupId>
-                  <artifactId>commons-collections</artifactId>
-                  <version>${commons-collections.version}</version>
-              </dependency>
+                <groupId>javax.websocket</groupId>
+                <artifactId>javax.websocket-api</artifactId>
+                <version>${javax-websocket-api.version}</version>
+            </dependency>
             <dependency>
-              <groupId>org.apache.commons</groupId>
-              <artifactId>commons-csv</artifactId>
-              <version>${commons-csv.version}</version>
+                <groupId>org.glassfish.jaxb</groupId>
+                <artifactId>jaxb-runtime</artifactId>
+                <version>${jaxb-runtime.version}</version>
             </dependency>
             <dependency>
-                <groupId>commons-io</groupId>
-                <artifactId>commons-io</artifactId>
-                <version>${commons-io.version}</version>
+                <groupId>commons-collections</groupId>
+                <artifactId>commons-collections</artifactId>
+                <version>${commons-collections.version}</version>
             </dependency>
             <dependency>
-                <groupId>commons-logging</groupId>
-                <artifactId>commons-logging</artifactId>
-                <version>${commons-logging.version}</version>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-jexl3</artifactId>
+                <version>${commons-jexl.version}</version>
             </dependency>
             <dependency>
-                <groupId>com.fasterxml.jackson.core</groupId>
-                <artifactId>jackson-annotations</artifactId>
-                <version>${jackson.version}</version>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-csv</artifactId>
+                <version>${commons-csv.version}</version>
             </dependency>
             <dependency>
-                <groupId>com.fasterxml.jackson.core</groupId>
-                <artifactId>jackson-core</artifactId>
-                <version>${jackson.version}</version>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-compress</artifactId>
+                <version>${commons-compress.version}</version>
             </dependency>
             <dependency>
-                <groupId>com.fasterxml.jackson.core</groupId>
-                <artifactId>jackson-databind</artifactId>
-                <version>${jackson.databind.version}</version>
+                <groupId>org.antlr</groupId>
+                <artifactId>antlr4-runtime</artifactId>
+                <version>${antlr4.version}</version>
             </dependency>
             <dependency>
-                <groupId>com.fasterxml.jackson.dataformat</groupId>
-                <artifactId>jackson-dataformat-xml</artifactId>
-                <version>${jackson.version}</version>
+                <groupId>commons-io</groupId>
+                <artifactId>commons-io</artifactId>
+                <version>${commons-io.version}</version>
             </dependency>
             <dependency>
-                <groupId>com.fasterxml.jackson.dataformat</groupId>
-                <artifactId>jackson-dataformat-yaml</artifactId>
-                <version>${jackson.version}</version>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-text</artifactId>
+                <version>${commons-text.version}</version>
             </dependency>
             <dependency>
                 <groupId>com.fasterxml.woodstox</groupId>
@@ -239,21 +219,40 @@
                 <version>${type-parser.version}</version>
             </dependency>
             <dependency>
-                <groupId>com.google.code.gson</groupId>
-                <artifactId>gson</artifactId>
-                <version>${gson.version}</version>
+                <groupId>com.google.protobuf</groupId>
+                <artifactId>protobuf-java</artifactId>
+                <version>${protobuf.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.google.errorprone</groupId>
+                <artifactId>error_prone_annotations</artifactId>
+                <version>${error-prone.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.sun.istack</groupId>
+                <artifactId>istack-commons-runtime</artifactId>
+                <version>${istack-runtime.version}</version>
             </dependency>
             <dependency>
-                <groupId>com.google.code.findbugs</groupId>
-                <artifactId>jsr305</artifactId>
-                <version>${findbugs.version}</version>
-                <scope>compile</scope>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-collections4</artifactId>
+                <version>${commoms-collection4.version}</version>
             </dependency>
             <dependency>
                 <groupId>com.google.guava</groupId>
                 <artifactId>guava</artifactId>
                 <version>${guava.version}</version>
             </dependency>
+            <dependency>
+                <groupId>com.google.maps</groupId>
+                <artifactId>google-maps-services</artifactId>
+                <version>${google-maps-services.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>com.hivemq</groupId>
+                <artifactId>hivemq-mqtt-client</artifactId>
+                <version>${mqtt-client.version}</version>
+            </dependency>
             <dependency>
                 <groupId>com.opencsv</groupId>
                 <artifactId>opencsv</artifactId>
@@ -265,15 +264,40 @@
                 <version>${okhttp.version}</version>
             </dependency>
             <dependency>
-                <groupId>de.grundid.opendatalab</groupId>
-                <artifactId>geojson-jackson</artifactId>
-                <version>${geojson-jackson.version}</version>
+                <groupId>com.ullink.slack</groupId>
+                <artifactId>simpleslackapi</artifactId>
+                <version>${slack-api.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>edu.wpi.rail</groupId>
+                <artifactId>jrosbridge</artifactId>
+                <version>${jsrosbridge.version}</version>
             </dependency>
             <dependency>
                 <groupId>io.fogsy</groupId>
                 <artifactId>qudt</artifactId>
                 <version>${fogsy-qudt.version}</version>
             </dependency>
+            <dependency>
+                <groupId>io.grpc</groupId>
+                <artifactId>grpc-context</artifactId>
+                <version>${grpc.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>io.grpc</groupId>
+                <artifactId>grpc-stub</artifactId>
+                <version>${grpc.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>io.grpc</groupId>
+                <artifactId>grpc-protobuf</artifactId>
+                <version>${grpc.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>io.grpc</groupId>
+                <artifactId>grpc-netty-shaded</artifactId>
+                <version>${grpc.version}</version>
+            </dependency>
             <dependency>
                 <groupId>io.jsonwebtoken</groupId>
                 <artifactId>jjwt-api</artifactId>
@@ -289,16 +313,6 @@
                 <artifactId>jjwt-jackson</artifactId>
                 <version>${jjwt.version}</version>
             </dependency>
-            <dependency>
-                <groupId>io.micrometer</groupId>
-                
<artifactId>micrometer-registry-prometheus-simpleclient</artifactId>
-                <version>${micrometer-prometheus.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.micrometer</groupId>
-                <artifactId>micrometer-observation</artifactId>
-                <version>${micrometer-observation.version}</version>
-            </dependency>
             <dependency>
                 <groupId>io.milvus</groupId>
                 <artifactId>milvus-sdk-java</artifactId>
@@ -309,61 +323,6 @@
                 <artifactId>client</artifactId>
                 <version>${qdrant-java-client.version}</version>
             </dependency>
-            <dependency>
-                <groupId>org.apache.tsfile</groupId>
-                <artifactId>tsfile</artifactId>
-                <version>${tsfile.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>com.github.luben</groupId>
-                        <artifactId>zstd-jni</artifactId>
-                    </exclusion>
-                    <exclusion>
-                        <groupId>org.xerial.snappy</groupId>
-                        <artifactId>snappy-java</artifactId>
-                    </exclusion>
-                </exclusions>
-            </dependency>
-            <dependency>
-                <groupId>org.tukaani</groupId>
-                <artifactId>xz</artifactId>
-                <version>${xz.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.antlr</groupId>
-                <artifactId>antlr4-runtime</artifactId>
-                <version>${antlr4.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.google.errorprone</groupId>
-                <artifactId>error_prone_annotations</artifactId>
-                <version>${error-prone.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-collections4</artifactId>
-                <version>${commoms-collection4.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.grpc</groupId>
-                <artifactId>grpc-context</artifactId>
-                <version>${grpc.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.grpc</groupId>
-                <artifactId>grpc-stub</artifactId>
-                <version>${grpc.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.grpc</groupId>
-                <artifactId>grpc-protobuf</artifactId>
-                <version>${grpc.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.grpc</groupId>
-                <artifactId>grpc-netty-shaded</artifactId>
-                <version>${grpc.version}</version>
-            </dependency>
             <dependency>
                 <groupId>io.nats</groupId>
                 <artifactId>jnats</artifactId>
@@ -400,54 +359,51 @@
                 <version>${swagger.version}</version>
             </dependency>
             <dependency>
-                <groupId>jakarta.activation</groupId>
-                <artifactId>jakarta.activation-api</artifactId>
-                <version>${jakarta-activation-api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>jakarta.annotation</groupId>
-                <artifactId>jakarta.annotation-api</artifactId>
-                <version>${jakarta-annotation.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>jakarta.inject</groupId>
-                <artifactId>jakarta.inject-api</artifactId>
-                <version>${jakarta-inject-api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>jakarta.servlet</groupId>
-                <artifactId>jakarta.servlet-api</artifactId>
-                <version>${jakarta-servlet-api.version}</version>
+                <groupId>org.apache.commons</groupId>
+                <artifactId>commons-configuration2</artifactId>
+                <version>${commons-configuration2.version}</version>
             </dependency>
             <dependency>
-                <groupId>jakarta.xml.bind</groupId>
-                <artifactId>jakarta.xml.bind-api</artifactId>
-                <version>${jakarta-xml-bind-api.version}</version>
+                <groupId>org.apache.groovy</groupId>
+                <artifactId>groovy</artifactId>
+                <version>${groovy.version}</version>
             </dependency>
             <dependency>
-                <groupId>net.minidev</groupId>
-                <artifactId>json-smart</artifactId>
-                <version>${json-smart.version}</version>
+                <groupId>org.apache.httpcomponents</groupId>
+                <artifactId>fluent-hc</artifactId>
+                <version>${httpclient.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>commons-logging</groupId>
+                        <artifactId>commons-logging</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
-                <groupId>org.apache.activemq</groupId>
-                <artifactId>activemq-client</artifactId>
-                <version>${activemq-client.version}</version>
+                <groupId>org.apache.httpcomponents</groupId>
+                <artifactId>httpclient</artifactId>
+                <version>${httpclient.version}</version>
+                <exclusions>
+                    <exclusion>
+                        <groupId>commons-logging</groupId>
+                        <artifactId>commons-logging</artifactId>
+                    </exclusion>
+                </exclusions>
             </dependency>
             <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-lang3</artifactId>
-                <version>${commons-lang3.version}</version>
+                <groupId>org.apache.httpcomponents</groupId>
+                <artifactId>httpcore</artifactId>
+                <version>${httpcore.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-text</artifactId>
-                <version>${commons-text.version}</version>
+                <groupId>org.apache.inlong</groupId>
+                <artifactId>tubemq-client</artifactId>
+                <version>${inlong.version}</version>
             </dependency>
             <dependency>
-                <groupId>software.amazon.awssdk</groupId>
-                <artifactId>s3</artifactId>
-                <version>${s3.version}</version>
+                <groupId>org.apache.iotdb</groupId>
+                <artifactId>iotdb-session</artifactId>
+                <version>${iotdb.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.apache.hadoop</groupId>
@@ -548,91 +504,128 @@
                 </exclusions>
             </dependency>
             <dependency>
-                <groupId>org.apache.httpcomponents</groupId>
-                <artifactId>fluent-hc</artifactId>
-                <version>${httpclient.version}</version>
-                <exclusions>
-                    <exclusion>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging</artifactId>
-                    </exclusion>
-                </exclusions>
+                <groupId>org.apache.opennlp</groupId>
+                <artifactId>opennlp-tools</artifactId>
+                <version>${opennlp.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.apache.httpcomponents</groupId>
-                <artifactId>httpclient</artifactId>
-                <version>${httpclient.version}</version>
+                <groupId>org.apache.parquet</groupId>
+                <artifactId>parquet-avro</artifactId>
+                <version>${parquet.version}</version>
                 <exclusions>
                     <exclusion>
-                        <groupId>commons-logging</groupId>
-                        <artifactId>commons-logging</artifactId>
+                        <groupId>org.xerial.snappy</groupId>
+                        <artifactId>snappy-java</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.apache.avro</groupId>
+                        <artifactId>avro</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>com.github.luben</groupId>
+                        <artifactId>zstd-jni</artifactId>
                     </exclusion>
                 </exclusions>
             </dependency>
             <dependency>
-                <groupId>org.apache.httpcomponents</groupId>
-                <artifactId>httpcore</artifactId>
-                <version>${httpcore.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.iotdb</groupId>
-                <artifactId>iotdb-session</artifactId>
-                <version>${iotdb.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.kafka</groupId>
-                <artifactId>kafka-clients</artifactId>
-                <version>${kafka.version}</version>
+                <groupId>org.apache.plc4x</groupId>
+                <artifactId>plc4j-api</artifactId>
+                <version>${plc4x.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.apache.kafka</groupId>
-                <artifactId>kafka-streams</artifactId>
-                <version>${kafka.version}</version>
+                <groupId>org.apache.plc4x</groupId>
+                <artifactId>plc4j-spi</artifactId>
+                <version>${plc4x.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.apache.parquet</groupId>
-                <artifactId>parquet-avro</artifactId>
-                <version>${parquet.version}</version>
+                <groupId>org.apache.plc4x</groupId>
+                <artifactId>plc4j-driver-all</artifactId>
+                <version>${plc4x.version}</version>
+                <type>pom</type>
                 <exclusions>
                     <exclusion>
-                        <groupId>org.xerial.snappy</groupId>
-                        <artifactId>snappy-java</artifactId>
+                        <groupId>org.apache.plc4x</groupId>
+                        <artifactId>plc4j-driver-firmata</artifactId>
                     </exclusion>
                     <exclusion>
-                        <groupId>org.apache.avro</groupId>
-                        <artifactId>avro</artifactId>
+                        <groupId>org.apache.plc4x</groupId>
+                        <artifactId>plc4j-driver-opcua</artifactId>
                     </exclusion>
                     <exclusion>
-                        <groupId>com.github.luben</groupId>
-                        <artifactId>zstd-jni</artifactId>
+                        <groupId>org.apache.plc4x</groupId>
+                        <artifactId>plc4j-driver-c-bus</artifactId>
                     </exclusion>
                 </exclusions>
             </dependency>
             <dependency>
-                <groupId>org.apache.pulsar</groupId>
-                <artifactId>pulsar-client</artifactId>
-                <version>${pulsar.version}</version>
+                <groupId>org.apache.plc4x</groupId>
+                <artifactId>plc4j-connection-cache</artifactId>
+                <version>${plc4x.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.rocketmq</groupId>
+                <artifactId>rocketmq-client-java</artifactId>
+                <version>${rocketmq.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.tsfile</groupId>
+                <artifactId>tsfile</artifactId>
+                <version>${tsfile.version}</version>
                 <exclusions>
                     <exclusion>
-                        <groupId>javax.servlet</groupId>
-                        <artifactId>servlet-api</artifactId>
+                        <groupId>com.github.luben</groupId>
+                        <artifactId>zstd-jni</artifactId>
+                    </exclusion>
+                    <exclusion>
+                        <groupId>org.xerial.snappy</groupId>
+                        <artifactId>snappy-java</artifactId>
                     </exclusion>
                 </exclusions>
             </dependency>
+            <dependency>
+                <groupId>org.apache.sis.core</groupId>
+                <artifactId>sis-referencing</artifactId>
+                <version>${apache-sis-referencing.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.atteo.classindex</groupId>
+                <artifactId>classindex</artifactId>
+                <version>${classindex.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.boofcv</groupId>
+                <artifactId>boofcv-core</artifactId>
+                <version>${boofcv.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.bouncycastle</groupId>
                 <artifactId>bcprov-jdk18on</artifactId>
                 <version>${bcprov-jdk18on.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.bouncycastle</groupId>
+                <artifactId>bcpkix-jdk18on</artifactId>
+                <version>${bcprov-jdk18on.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.bouncycastle</groupId>
                 <artifactId>bcutil-jdk18on</artifactId>
                 <version>${bcprov-jdk18on.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.eclipse.jetty</groupId>
-                <artifactId>jetty-client</artifactId>
-                <version>${jetty-client.version}</version>
+                <groupId>org.eclipse.milo</groupId>
+                <artifactId>sdk-client</artifactId>
+                <version>${eclipse.milo.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.ditto</groupId>
+                <artifactId>ditto-client</artifactId>
+                <version>${ditto-client.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.eclipse.milo</groupId>
+                <artifactId>dictionary-reader</artifactId>
+                <version>${eclipse.milo.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.eclipse.rdf4j</groupId>
@@ -645,39 +638,30 @@
                 <version>${rdf4j.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.reactivestreams</groupId>
-                <artifactId>reactive-streams</artifactId>
-                <version>${reactive-streams.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.hivemq</groupId>
-                <artifactId>hivemq-mqtt-client</artifactId>
-                <version>${mqtt-client.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.fusesource.hawtbuf</groupId>
-                <artifactId>hawtbuf</artifactId>
-                <version>${hawtbuf.version}</version>
+                <groupId>org.graalvm.polyglot</groupId>
+                <artifactId>js</artifactId>
+                <version>${graalvm.js.version}</version>
+                <type>pom</type>
             </dependency>
             <dependency>
-                <groupId>org.glassfish.jersey.containers</groupId>
-                <artifactId>jersey-container-jetty-http</artifactId>
-                <version>${jersey.version}</version>
+                <groupId>org.graalvm.polyglot</groupId>
+                <artifactId>polyglot</artifactId>
+                <version>${graalvm.js.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.glassfish.jersey.media</groupId>
-                <artifactId>jersey-media-json-jackson</artifactId>
-                <version>${jersey.version}</version>
+                <groupId>org.influxdb</groupId>
+                <artifactId>influxdb-java</artifactId>
+                <version>${influxdb.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.glassfish.jersey.media</groupId>
-                <artifactId>jersey-media-multipart</artifactId>
-                <version>${jersey.version}</version>
+                <groupId>org.java-websocket</groupId>
+                <artifactId>Java-WebSocket</artifactId>
+                <version>${java-websocket.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.influxdb</groupId>
-                <artifactId>influxdb-java</artifactId>
-                <version>${influxdb.version}</version>
+                <groupId>org.jetbrains</groupId>
+                <artifactId>annotations</artifactId>
+                <version>${jetbrains.version}</version>
             </dependency>
             <dependency>
                 <groupId>org.jgrapht</groupId>
@@ -689,6 +673,11 @@
                 <artifactId>lightcouch</artifactId>
                 <version>${lightcouch.version}</version>
             </dependency>
+            <dependency>
+                <groupId>org.locationtech.jts</groupId>
+                <artifactId>jts-core</artifactId>
+                <version>${jts-core.version}</version>
+            </dependency>
             <dependency>
                 <groupId>org.rendersnake</groupId>
                 <artifactId>rendersnake</artifactId>
@@ -700,93 +689,22 @@
                 <version>${simple-java-mail.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-api</artifactId>
-                <version>${slf4j.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.slf4j</groupId>
-                <artifactId>slf4j-simple</artifactId>
-                <version>${slf4j-simple.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-properties-migrator</artifactId>
-                <version>${spring-boot.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-actuator</artifactId>
-                <version>${spring-boot.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-jersey</artifactId>
-                <version>${spring-boot.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-logging</artifactId>
-                <version>${spring-boot.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-security</artifactId>
-                <version>${spring-boot.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-undertow</artifactId>
-                <version>${spring-boot.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-starter-web</artifactId>
-                <version>${spring-boot.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springframework.security</groupId>
-                <artifactId>spring-security-core</artifactId>
-                <version>${spring-security.version}</version>
+                <groupId>org.tukaani</groupId>
+                <artifactId>xz</artifactId>
+                <version>${xz.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.springframework.security</groupId>
-                <artifactId>spring-security-web</artifactId>
-                <version>${spring-security.version}</version>
+                <groupId>org.springdoc</groupId>
+                <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
+                <version>${springdoc.version}</version>
             </dependency>
             <dependency>
-                <groupId>org.yaml</groupId>
-                <artifactId>snakeyaml</artifactId>
-                <version>${snakeyaml.version}</version>
+                <groupId>software.amazon.awssdk</groupId>
+                <artifactId>s3</artifactId>
+                <version>${s3.version}</version>
             </dependency>
 
 
-            <!-- test dependencies -->
-            <dependency>
-                <groupId>org.junit.jupiter</groupId>
-                <artifactId>junit-jupiter-api</artifactId>
-                <version>${junit.version}</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.junit.jupiter</groupId>
-                <artifactId>junit-jupiter-params</artifactId>
-                <version>${junit.version}</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.junit.jupiter</groupId>
-                <artifactId>junit-jupiter-engine</artifactId>
-                <version>${junit.version}</version>
-                <scope>test</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.mockito</groupId>
-                <artifactId>mockito-core</artifactId>
-                <version>${mockito.version}</version>
-                <scope>test</scope>
-            </dependency>
-
             <!-- required by streampipes-maven-plugin -->
             <dependency>
                 <groupId>org.apache.maven</groupId>
@@ -845,229 +763,12 @@
             </dependency>
 
 
-
-            <!-- only used by extensions -->
-            <dependency>
-                <groupId>com.google.maps</groupId>
-                <artifactId>google-maps-services</artifactId>
-                <version>${google-maps-services.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.rabbitmq</groupId>
-                <artifactId>amqp-client</artifactId>
-                <version>${amqp-client.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.ullink.slack</groupId>
-                <artifactId>simpleslackapi</artifactId>
-                <version>${slack-api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>edu.wpi.rail</groupId>
-                <artifactId>jrosbridge</artifactId>
-                <version>${jsrosbridge.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-compress</artifactId>
-                <version>${commons-compress.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.commons</groupId>
-                <artifactId>commons-pool2</artifactId>
-                <version>${commons-pool2.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.inlong</groupId>
-                <artifactId>tubemq-client</artifactId>
-                <version>${inlong.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.opennlp</groupId>
-                <artifactId>opennlp-tools</artifactId>
-                <version>${opennlp.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.plc4x</groupId>
-                <artifactId>plc4j-api</artifactId>
-                <version>${plc4x.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.plc4x</groupId>
-                <artifactId>plc4j-driver-s7</artifactId>
-                <version>${plc4x.version}</version>
-                <scope>runtime</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.plc4x</groupId>
-                <artifactId>plc4j-driver-modbus</artifactId>
-                <version>${plc4x.version}</version>
-                <scope>runtime</scope>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.rocketmq</groupId>
-                <artifactId>rocketmq-client-java</artifactId>
-                <version>${rocketmq.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.sis.core</groupId>
-                <artifactId>sis-referencing</artifactId>
-                <version>${apache-sis-referencing.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.boofcv</groupId>
-                <artifactId>boofcv-core</artifactId>
-                <version>${boofcv.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.ditto</groupId>
-                <artifactId>ditto-client</artifactId>
-                <version>${ditto-client.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.milo</groupId>
-                <artifactId>sdk-client</artifactId>
-                <version>${eclipse.milo.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.eclipse.milo</groupId>
-                <artifactId>dictionary-reader</artifactId>
-                <version>${eclipse.milo.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.glassfish.jersey.media</groupId>
-                <artifactId>jersey-media-sse</artifactId>
-                <version>${jersey.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.groovy</groupId>
-                <artifactId>groovy</artifactId>
-                <version>${groovy.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.graalvm.polyglot</groupId>
-                <artifactId>js</artifactId>
-                <version>${graalvm.js.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.graalvm.polyglot</groupId>
-                <artifactId>polyglot</artifactId>
-                <version>${graalvm.js.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.java-websocket</groupId>
-                <artifactId>Java-WebSocket</artifactId>
-                <version>${java-websocket.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.locationtech.jts</groupId>
-                <artifactId>jts-core</artifactId>
-                <version>${jts-core.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.postgresql</groupId>
-                <artifactId>postgresql</artifactId>
-                <version>${postgresql.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.quartz-scheduler</groupId>
-                <artifactId>quartz</artifactId>
-                <version>${quartz.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.springdoc</groupId>
-                <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
-                <version>${springdoc.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>redis.clients</groupId>
-                <artifactId>jedis</artifactId>
-                <version>${jedis.version}</version>
-            </dependency>
-
-
-            <!-- dependency convergence -->
-            <dependency>
-                <groupId>org.jboss.logging</groupId>
-                <artifactId>jboss-logging</artifactId>
-                <version>${jboss-logging.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.glassfish.jersey.core</groupId>
-                <artifactId>jersey-common</artifactId>
-                <version>${jersey.version}</version>
-            </dependency>
+            <!--dependency convergence -->
             <dependency>
                 <groupId>org.javassist</groupId>
                 <artifactId>javassist</artifactId>
                 <version>${javassist.version}</version>
             </dependency>
-            <dependency>
-                <groupId>javax.xml.bind</groupId>
-                <artifactId>jaxb-api</artifactId>
-                <version>${javax.xml.bind.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.glassfish.jaxb</groupId>
-                <artifactId>jaxb-runtime</artifactId>
-                <version>${jaxb-runtime.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.checkerframework</groupId>
-                <artifactId>checker-qual</artifactId>
-                <version>${checker-qual.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>javax.websocket</groupId>
-                <artifactId>javax.websocket-api</artifactId>
-                <version>${javax-websocket-api.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-handler</artifactId>
-                <version>${netty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-buffer</artifactId>
-                <version>${netty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-codec</artifactId>
-                <version>${netty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-common</artifactId>
-                <version>${netty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-transport</artifactId>
-                <version>${netty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>io.netty</groupId>
-                <artifactId>netty-transport-native-epoll</artifactId>
-                <version>${netty.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.atteo.classindex</groupId>
-                <artifactId>classindex</artifactId>
-                <version>${classindex.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>com.google.protobuf</groupId>
-                <artifactId>protobuf-java</artifactId>
-                <version>${protobuf.version}</version>
-            </dependency>
-
-                <dependency>
-      <groupId>org.jetbrains</groupId>
-      <artifactId>annotations</artifactId>
-      <version>${jetbrains.version}</version>
-    </dependency>
         </dependencies>
     </dependencyManagement>
 
@@ -1322,7 +1023,7 @@
                 <artifactId>maven-enforcer-plugin</artifactId>
                 <executions>
                     <execution>
-                        <id>check-at-least-java-17</id>
+                        <id>check-at-least-java-25</id>
                         <phase>validate</phase>
                         <goals>
                             <goal>enforce</goal>
@@ -1330,7 +1031,7 @@
                         <configuration>
                             <rules>
                                 <requireJavaVersion>
-                                    <version>1.17.0</version>
+                                    <version>1.25.0</version>
                                 </requireJavaVersion>
                             </rules>
                         </configuration>
@@ -1379,7 +1080,7 @@
                 <configuration>
                     <failOnWarnings>false</failOnWarnings>
                     <failOnError>false</failOnError>
-                    <source>8</source>
+                    <source>25</source>
                 </configuration>
             </plugin>
             <plugin>
@@ -1467,13 +1168,6 @@
 
                         <exclude>**/system</exclude>
 
-                        <!-- Test files -->
-                        
<exclude>streampipes-code-generation/src/main/resources/pom</exclude>
-                        
<exclude>streampipes-code-generation/src/main/resources/web</exclude>
-                        
<exclude>streampipes-code-generation/src/test/resources/*_java</exclude>
-                        
<exclude>streampipes-code-generation/src/test/resources/expected_pom_xml</exclude>
-                        
<exclude>streampipes-code-generation/src/test/resources/expected_web_xml</exclude>
-
                         <!-- Archetype resources should not have ASF license 
header -->
                         
<exclude>archetypes/streampipes-archetype-pe-processors-jvm/src/main/resources/**</exclude>
                         
<exclude>archetypes/streampipes-archetype-pe-sinks-jvm/src/main/resources/**</exclude>
@@ -1521,7 +1215,7 @@
                         <!-- Exclude GO -->
                         <exclude>**/go.sum</exclude>
 
-                       
+
 
           <!-- Resource files for Integration Test-->
           
<exclude>streampipes-integration-tests/src/test/resources/mosquitto.crt</exclude>
diff --git a/streampipes-connect-transformer-groovy/pom.xml 
b/streampipes-connect-transformer-groovy/pom.xml
index cc6305f2b5..90e76f37f2 100644
--- a/streampipes-connect-transformer-groovy/pom.xml
+++ b/streampipes-connect-transformer-groovy/pom.xml
@@ -43,7 +43,6 @@
         <dependency>
             <groupId>org.apache.groovy</groupId>
             <artifactId>groovy</artifactId>
-            <version>${groovy.version}</version>
         </dependency>
     </dependencies>
 
diff --git a/streampipes-connect-transformer-js/pom.xml 
b/streampipes-connect-transformer-js/pom.xml
index a22b4d4016..9d49ac905e 100644
--- a/streampipes-connect-transformer-js/pom.xml
+++ b/streampipes-connect-transformer-js/pom.xml
@@ -42,13 +42,11 @@
         <dependency>
             <groupId>org.graalvm.polyglot</groupId>
             <artifactId>js</artifactId>
-            <version>${graalvm.js.version}</version>
             <type>pom</type>
         </dependency>
         <dependency>
             <groupId>org.graalvm.polyglot</groupId>
             <artifactId>polyglot</artifactId>
-            <version>${graalvm.js.version}</version>
         </dependency>
     </dependencies>
 
diff --git a/streampipes-extensions-management/pom.xml 
b/streampipes-extensions-management/pom.xml
index e857401aa6..41f4a4f6af 100644
--- a/streampipes-extensions-management/pom.xml
+++ b/streampipes-extensions-management/pom.xml
@@ -82,10 +82,6 @@
 
 
         <!-- External dependencies -->
-        <dependency>
-            <groupId>de.grundid.opendatalab</groupId>
-            <artifactId>geojson-jackson</artifactId>
-        </dependency>
         <dependency>
             <groupId>com.fasterxml.jackson.dataformat</groupId>
             <artifactId>jackson-dataformat-xml</artifactId>
diff --git a/streampipes-extensions/streampipes-connect-adapters/pom.xml 
b/streampipes-extensions/streampipes-connect-adapters/pom.xml
index c4c3eb2184..282acc6a20 100644
--- a/streampipes-extensions/streampipes-connect-adapters/pom.xml
+++ b/streampipes-extensions/streampipes-connect-adapters/pom.xml
@@ -59,10 +59,6 @@
             <groupId>org.apache.httpcomponents</groupId>
             <artifactId>fluent-hc</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.glassfish.jersey.media</groupId>
-            <artifactId>jersey-media-sse</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.javassist</groupId>
             <artifactId>javassist</artifactId>
diff --git a/streampipes-extensions/streampipes-connectors-opcua/pom.xml 
b/streampipes-extensions/streampipes-connectors-opcua/pom.xml
index 3d962d4cc2..3a2a1caa24 100644
--- a/streampipes-extensions/streampipes-connectors-opcua/pom.xml
+++ b/streampipes-extensions/streampipes-connectors-opcua/pom.xml
@@ -59,6 +59,11 @@
             <artifactId>dictionary-reader</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>jaxb-runtime</artifactId>
+        </dependency>
+
         <!-- Test dependencies -->
         <dependency>
             <groupId>org.junit.jupiter</groupId>
diff --git a/streampipes-extensions/streampipes-connectors-plc/pom.xml 
b/streampipes-extensions/streampipes-connectors-plc/pom.xml
index 5754d4b732..e838e19198 100644
--- a/streampipes-extensions/streampipes-connectors-plc/pom.xml
+++ b/streampipes-extensions/streampipes-connectors-plc/pom.xml
@@ -55,12 +55,10 @@
         <dependency>
             <groupId>org.apache.plc4x</groupId>
             <artifactId>plc4j-spi</artifactId>
-            <version>${plc4x.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.plc4x</groupId>
             <artifactId>plc4j-driver-all</artifactId>
-            <version>${plc4x.version}</version>
             <type>pom</type>
             <exclusions>
                 <exclusion>
@@ -80,7 +78,6 @@
         <dependency>
             <groupId>org.apache.plc4x</groupId>
             <artifactId>plc4j-connection-cache</artifactId>
-            <version>${plc4x.version}</version>
         </dependency>
 
         <!-- Test dependencies -->
diff --git a/streampipes-extensions/streampipes-connectors-pulsar/pom.xml 
b/streampipes-extensions/streampipes-connectors-pulsar/pom.xml
index 793351731d..7dee1f6315 100644
--- a/streampipes-extensions/streampipes-connectors-pulsar/pom.xml
+++ b/streampipes-extensions/streampipes-connectors-pulsar/pom.xml
@@ -48,6 +48,9 @@
             <artifactId>pulsar-client</artifactId>
         </dependency>
 
+        <!-- dependency convergence -->
+
+
         <!-- Test dependencies -->
         <dependency>
             <groupId>org.junit.jupiter</groupId>
diff --git a/streampipes-extensions/streampipes-extensions-all-iiot/Dockerfile 
b/streampipes-extensions/streampipes-extensions-all-iiot/Dockerfile
index ae8040391e..6eee4a8130 100644
--- a/streampipes-extensions/streampipes-extensions-all-iiot/Dockerfile
+++ b/streampipes-extensions/streampipes-extensions-all-iiot/Dockerfile
@@ -13,12 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM eclipse-temurin:17-jre-focal as builder
+FROM eclipse-temurin:25-jre-alpine as builder
 ARG JAR_FILE=target/streampipes-extensions-all-iiot.jar
 COPY ${JAR_FILE} application.jar
 RUN java -Djarmode=layertools -jar application.jar extract
 
-FROM eclipse-temurin:17-jre-focal
+FROM eclipse-temurin:25-jre-alpine
 COPY --from=builder dependencies/ ./
 COPY --from=builder snapshot-dependencies/ ./
 COPY --from=builder spring-boot-loader/ ./
diff --git a/streampipes-extensions/streampipes-extensions-all-iiot/pom.xml 
b/streampipes-extensions/streampipes-extensions-all-iiot/pom.xml
index 0ce64b6e6d..43eeff4273 100644
--- a/streampipes-extensions/streampipes-extensions-all-iiot/pom.xml
+++ b/streampipes-extensions/streampipes-extensions-all-iiot/pom.xml
@@ -197,11 +197,6 @@
             <version>0.99.0-SNAPSHOT</version>
         </dependency>
 
-        <!-- dependency convergence -->
-        <dependency>
-            <groupId>org.atteo.classindex</groupId>
-            <artifactId>classindex</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.bouncycastle</groupId>
             <artifactId>bcprov-jdk18on</artifactId>
@@ -211,32 +206,8 @@
             <artifactId>bcutil-jdk18on</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.checkerframework</groupId>
-            <artifactId>checker-qual</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.websocket</groupId>
-            <artifactId>javax.websocket-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-handler</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-buffer</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-codec</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-transport</artifactId>
+            <groupId>org.glassfish.jaxb</groupId>
+            <artifactId>jaxb-runtime</artifactId>
         </dependency>
     </dependencies>
 
diff --git a/streampipes-extensions/streampipes-extensions-all-jvm/Dockerfile 
b/streampipes-extensions/streampipes-extensions-all-jvm/Dockerfile
index 31c59268e2..401fc7f77e 100644
--- a/streampipes-extensions/streampipes-extensions-all-jvm/Dockerfile
+++ b/streampipes-extensions/streampipes-extensions-all-jvm/Dockerfile
@@ -13,14 +13,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM eclipse-temurin:17-jre-focal as builder
+FROM eclipse-temurin:25-jre-alpine as builder
 ARG JAR_FILE=target/streampipes-extensions-all-jvm.jar
 COPY ${JAR_FILE} application.jar
 RUN java -Djarmode=layertools -jar application.jar extract
 
-FROM eclipse-temurin:17-jre-focal
+FROM eclipse-temurin:25-jre-alpine
 # needed pkgs processors-image-processing-jvm
-RUN apt-get update && apt-get install ttf-dejavu-core && apt-get install 
fontconfig
+RUN apk add --no-cache fontconfig ttf-dejavu
 
 COPY --from=builder dependencies/ ./
 COPY --from=builder snapshot-dependencies/ ./
diff --git a/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml 
b/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml
index a1dcef201a..d1efcf6b06 100644
--- a/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-extensions-all-jvm/pom.xml
@@ -228,48 +228,6 @@
             <artifactId>streampipes-messaging-nats</artifactId>
             <version>0.99.0-SNAPSHOT</version>
         </dependency>
-
-        <!-- dependency convergence -->
-        <dependency>
-            <groupId>com.google.protobuf</groupId>
-            <artifactId>protobuf-java</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.atteo.classindex</groupId>
-            <artifactId>classindex</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.bouncycastle</groupId>
-            <artifactId>bcprov-jdk18on</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.checkerframework</groupId>
-            <artifactId>checker-qual</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.websocket</groupId>
-            <artifactId>javax.websocket-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-handler</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-buffer</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-codec</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-transport</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git 
a/streampipes-extensions/streampipes-extensions-iiot-minimal/Dockerfile 
b/streampipes-extensions/streampipes-extensions-iiot-minimal/Dockerfile
index 621162a874..e1efc1e0ff 100644
--- a/streampipes-extensions/streampipes-extensions-iiot-minimal/Dockerfile
+++ b/streampipes-extensions/streampipes-extensions-iiot-minimal/Dockerfile
@@ -13,12 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM eclipse-temurin:17-jre-focal as builder
+FROM eclipse-temurin:25-jre-alpine as builder
 ARG JAR_FILE=target/streampipes-extensions-iiot-minimal.jar
 COPY ${JAR_FILE} application.jar
 RUN java -Djarmode=layertools -jar application.jar extract
 
-FROM eclipse-temurin:17-jre-focal
+FROM eclipse-temurin:25-jre-alpine
 COPY --from=builder dependencies/ ./
 COPY --from=builder snapshot-dependencies/ ./
 COPY --from=builder spring-boot-loader/ ./
diff --git a/streampipes-extensions/streampipes-extensions-iiot-minimal/pom.xml 
b/streampipes-extensions/streampipes-extensions-iiot-minimal/pom.xml
index 78cb42b7dd..d457f41d11 100644
--- a/streampipes-extensions/streampipes-extensions-iiot-minimal/pom.xml
+++ b/streampipes-extensions/streampipes-extensions-iiot-minimal/pom.xml
@@ -156,44 +156,6 @@
             <artifactId>streampipes-wrapper-standalone</artifactId>
             <version>0.99.0-SNAPSHOT</version>
         </dependency>
-
-        <!-- dependency convergence -->
-        <dependency>
-            <groupId>org.atteo.classindex</groupId>
-            <artifactId>classindex</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.bouncycastle</groupId>
-            <artifactId>bcprov-jdk18on</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.checkerframework</groupId>
-            <artifactId>checker-qual</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>javax.websocket</groupId>
-            <artifactId>javax.websocket-api</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-handler</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-buffer</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-codec</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-common</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.netty</groupId>
-            <artifactId>netty-transport</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/streampipes-extensions/streampipes-processors-enricher-jvm/pom.xml 
b/streampipes-extensions/streampipes-processors-enricher-jvm/pom.xml
index 9730c112a6..8e13498079 100644
--- a/streampipes-extensions/streampipes-processors-enricher-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-processors-enricher-jvm/pom.xml
@@ -40,13 +40,11 @@
         <dependency>
             <groupId>org.graalvm.polyglot</groupId>
             <artifactId>js</artifactId>
-            <version>${graalvm.js.version}</version>
             <type>pom</type>
         </dependency>
         <dependency>
             <groupId>org.graalvm.polyglot</groupId>
             <artifactId>polyglot</artifactId>
-            <version>${graalvm.js.version}</version>
         </dependency>
         <dependency>
             <groupId>org.apache.commons</groupId>
diff --git a/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml 
b/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml
index c781bb5a7d..d671ab013c 100644
--- a/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-sinks-brokers-jvm/pom.xml
@@ -68,10 +68,6 @@
             <groupId>com.hivemq</groupId>
             <artifactId>hivemq-mqtt-client</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.fusesource.hawtbuf</groupId>
-            <artifactId>hawtbuf</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.java-websocket</groupId>
             <artifactId>Java-WebSocket</artifactId>
diff --git a/streampipes-extensions/streampipes-sinks-databases-jvm/pom.xml 
b/streampipes-extensions/streampipes-sinks-databases-jvm/pom.xml
index ccacb84950..fa711c46c5 100644
--- a/streampipes-extensions/streampipes-sinks-databases-jvm/pom.xml
+++ b/streampipes-extensions/streampipes-sinks-databases-jvm/pom.xml
@@ -102,30 +102,10 @@
             <groupId>io.qdrant</groupId>
             <artifactId>client</artifactId>
         </dependency>
-        <dependency>
-            <groupId>com.google.errorprone</groupId>
-            <artifactId>error_prone_annotations</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.commons</groupId>
-            <artifactId>commons-collections4</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>io.grpc</groupId>
-            <artifactId>grpc-context</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.apache.tsfile</groupId>
             <artifactId>tsfile</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.tukaani</groupId>
-            <artifactId>xz</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.antlr</groupId>
-            <artifactId>antlr4-runtime</artifactId>
-        </dependency>
         <dependency>
             <groupId>org.apache.parquet</groupId>
             <artifactId>parquet-avro</artifactId>
diff --git 
a/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQConnectionProvider.java
 
b/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQConnectionProvider.java
index 5404c591a2..ae6e9f9919 100644
--- 
a/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQConnectionProvider.java
+++ 
b/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQConnectionProvider.java
@@ -22,8 +22,9 @@ import 
org.apache.streampipes.model.grounding.JmsTransportProtocol;
 
 import org.apache.activemq.ActiveMQConnectionFactory;
 
-import javax.jms.Connection;
-import javax.jms.JMSException;
+import jakarta.jms.Connection;
+import jakarta.jms.JMSException;
+
 
 public abstract class ActiveMQConnectionProvider {
 
diff --git 
a/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQConsumer.java
 
b/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQConsumer.java
index 80a6a4a52e..e83a635be8 100644
--- 
a/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQConsumer.java
+++ 
b/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQConsumer.java
@@ -27,10 +27,10 @@ import org.apache.activemq.command.ActiveMQBytesMessage;
 import org.apache.activemq.util.ByteSequence;
 import org.slf4j.Logger;
 
-import javax.jms.BytesMessage;
-import javax.jms.JMSException;
-import javax.jms.MessageConsumer;
-import javax.jms.Session;
+import jakarta.jms.BytesMessage;
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageConsumer;
+import jakarta.jms.Session;
 
 import java.io.Serializable;
 
diff --git 
a/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQPublisher.java
 
b/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQPublisher.java
index f5443a95e5..7760be77a4 100644
--- 
a/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQPublisher.java
+++ 
b/streampipes-messaging-jms/src/main/java/org/apache/streampipes/messaging/jms/ActiveMQPublisher.java
@@ -26,13 +26,13 @@ import org.apache.activemq.ActiveMQConnectionFactory;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.jms.BytesMessage;
-import javax.jms.Connection;
-import javax.jms.ConnectionFactory;
-import javax.jms.DeliveryMode;
-import javax.jms.JMSException;
-import javax.jms.MessageProducer;
-import javax.jms.Session;
+import jakarta.jms.BytesMessage;
+import jakarta.jms.Connection;
+import jakarta.jms.ConnectionFactory;
+import jakarta.jms.DeliveryMode;
+import jakarta.jms.JMSException;
+import jakarta.jms.MessageProducer;
+import jakarta.jms.Session;
 
 
 public class ActiveMQPublisher extends ActiveMQConnectionProvider implements 
EventProducer {
diff --git 
a/streampipes-messaging-kafka/src/main/java/org/apache/streampipes/messaging/kafka/config/ConsumerConfigFactory.java
 
b/streampipes-messaging-kafka/src/main/java/org/apache/streampipes/messaging/kafka/config/ConsumerConfigFactory.java
index 4b16a52b2a..52211fbe00 100644
--- 
a/streampipes-messaging-kafka/src/main/java/org/apache/streampipes/messaging/kafka/config/ConsumerConfigFactory.java
+++ 
b/streampipes-messaging-kafka/src/main/java/org/apache/streampipes/messaging/kafka/config/ConsumerConfigFactory.java
@@ -29,7 +29,6 @@ public class ConsumerConfigFactory extends 
AbstractConfigFactory {
 
   private static final String ENABLE_AUTO_COMMIT_CONFIG_DEFAULT = "true";
   private static final String AUTO_COMMIT_INTERVAL_MS_CONFIG_DEFAULT = "5000";
-  private static final String SESSION_TIMEOUT_MS_CONFIG_DEFAULT = "30000";
   private static final Integer FETCH_MAX_BYTES_CONFIG_DEFAULT = 52428800;
   private static final String KEY_DESERIALIZER_CLASS_CONFIG_DEFAULT = 
ByteArrayDeserializer.class.getName();
   private static final String VALUE_DESERIALIZER_CLASS_CONFIG_DEFAULT = 
ByteArrayDeserializer.class.getName();
@@ -48,7 +47,6 @@ public class ConsumerConfigFactory extends 
AbstractConfigFactory {
     props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, 
ENABLE_AUTO_COMMIT_CONFIG_DEFAULT);
     props.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,
         AUTO_COMMIT_INTERVAL_MS_CONFIG_DEFAULT);
-    props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 
SESSION_TIMEOUT_MS_CONFIG_DEFAULT);
     props.put(ConsumerConfig.FETCH_MAX_BYTES_CONFIG,
         getConfigOrDefault(protocol::getMessageMaxBytes, 
FETCH_MAX_BYTES_CONFIG_DEFAULT));
 
diff --git a/streampipes-messaging-mqtt/pom.xml 
b/streampipes-messaging-mqtt/pom.xml
index 3e1c04e91d..30c371f347 100644
--- a/streampipes-messaging-mqtt/pom.xml
+++ b/streampipes-messaging-mqtt/pom.xml
@@ -39,10 +39,6 @@
             <groupId>com.hivemq</groupId>
             <artifactId>hivemq-mqtt-client</artifactId>
         </dependency>
-        <dependency>
-            <groupId>org.fusesource.hawtbuf</groupId>
-            <artifactId>hawtbuf</artifactId>
-        </dependency>
     </dependencies>
 
     <build>
diff --git a/streampipes-messaging-pulsar/pom.xml 
b/streampipes-messaging-pulsar/pom.xml
index 5cd7e01f0a..3d42f22387 100644
--- a/streampipes-messaging-pulsar/pom.xml
+++ b/streampipes-messaging-pulsar/pom.xml
@@ -25,11 +25,6 @@
 
     <artifactId>streampipes-messaging-pulsar</artifactId>
 
-    <properties>
-        <maven.compiler.source>11</maven.compiler.source>
-        <maven.compiler.target>11</maven.compiler.target>
-    </properties>
-
     <dependencies>
         <!-- StreamPipes dependencies -->
         <dependency>
diff --git 
a/streampipes-model/src/main/java/org/apache/streampipes/model/extensions/svcdiscovery/SpServiceRegistration.java
 
b/streampipes-model/src/main/java/org/apache/streampipes/model/extensions/svcdiscovery/SpServiceRegistration.java
index e1d6f26905..801ccd91f5 100644
--- 
a/streampipes-model/src/main/java/org/apache/streampipes/model/extensions/svcdiscovery/SpServiceRegistration.java
+++ 
b/streampipes-model/src/main/java/org/apache/streampipes/model/extensions/svcdiscovery/SpServiceRegistration.java
@@ -22,6 +22,7 @@ import 
org.apache.streampipes.model.extensions.ExtensionItemDescription;
 import org.apache.streampipes.model.shared.annotation.TsModel;
 import org.apache.streampipes.model.shared.api.Storable;
 
+import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.google.gson.annotations.SerializedName;
 
 import java.util.HashSet;
@@ -178,6 +179,7 @@ public class SpServiceRegistration implements Storable {
     return scheme;
   }
 
+  @JsonIgnore
   public String getServiceUrl() {
     return getScheme() + "://" + getHost() + ":" + getPort();
   }
diff --git 
a/streampipes-rest-shared/src/main/java/org/apache/streampipes/rest/shared/serializer/JacksonConfiguration.java
 
b/streampipes-rest-shared/src/main/java/org/apache/streampipes/rest/shared/serializer/JacksonConfiguration.java
new file mode 100644
index 0000000000..920bd04f72
--- /dev/null
+++ 
b/streampipes-rest-shared/src/main/java/org/apache/streampipes/rest/shared/serializer/JacksonConfiguration.java
@@ -0,0 +1,40 @@
+/*
+ * 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.streampipes.rest.shared.serializer;
+
+import 
org.springframework.boot.jackson.autoconfigure.JsonMapperBuilderCustomizer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import tools.jackson.databind.DeserializationFeature;
+import tools.jackson.databind.SerializationFeature;
+
+@Configuration
+public class JacksonConfiguration {
+
+  @Bean
+  JsonMapperBuilderCustomizer jsonMapperBuilderCustomizer() {
+    return builder -> builder
+        .disable(SerializationFeature.FAIL_ON_EMPTY_BEANS)
+        .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
+            DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES,
+            DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES)
+        .enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
+        .findAndAddModules();
+  }
+}
diff --git 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/security/SpPermissionEvaluator.java
 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/security/SpPermissionEvaluator.java
index 28b43f709a..375d039b8f 100644
--- 
a/streampipes-rest/src/main/java/org/apache/streampipes/rest/security/SpPermissionEvaluator.java
+++ 
b/streampipes-rest/src/main/java/org/apache/streampipes/rest/security/SpPermissionEvaluator.java
@@ -25,17 +25,17 @@ import 
org.apache.streampipes.storage.api.IPermissionStorage;
 import org.apache.streampipes.storage.management.StorageDispatcher;
 import org.apache.streampipes.user.management.model.PrincipalUserDetails;
 
-import org.springframework.context.annotation.Configuration;
 import org.springframework.security.access.PermissionEvaluator;
 import 
org.springframework.security.authentication.AnonymousAuthenticationToken;
 import org.springframework.security.core.Authentication;
+import org.springframework.stereotype.Component;
 
 import java.io.Serializable;
 import java.util.List;
 import java.util.Objects;
 import java.util.function.Predicate;
 
-@Configuration
+@Component
 public class SpPermissionEvaluator implements PermissionEvaluator {
 
   private final IPermissionStorage permissionStorage;
diff --git a/streampipes-service-base/pom.xml b/streampipes-service-base/pom.xml
index 9ef3adf36c..18066bffd4 100644
--- a/streampipes-service-base/pom.xml
+++ b/streampipes-service-base/pom.xml
@@ -47,7 +47,11 @@
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-undertow</artifactId>
+            <artifactId>spring-boot-starter-tomcat</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-validation</artifactId>
         </dependency>
         <dependency>
             <groupId>org.springframework.boot</groupId>
@@ -74,11 +78,6 @@
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-actuator</artifactId>
         </dependency>
-
-        <dependency>
-            <groupId>org.jboss.logging</groupId>
-            <artifactId>jboss-logging</artifactId>
-        </dependency>
     </dependencies>
     <build>
         <plugins>
diff --git a/streampipes-service-core-minimal/Dockerfile 
b/streampipes-service-core-minimal/Dockerfile
index 0248db51a2..b8a8bb484d 100644
--- a/streampipes-service-core-minimal/Dockerfile
+++ b/streampipes-service-core-minimal/Dockerfile
@@ -13,12 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM eclipse-temurin:17-jre-focal as builder
+FROM eclipse-temurin:25-jre-alpine as builder
 ARG JAR_FILE=target/streampipes-core-minimal.jar
 COPY ${JAR_FILE} application.jar
 RUN java -Djarmode=layertools -jar application.jar extract
 
-FROM eclipse-temurin:17-jre-focal
+FROM eclipse-temurin:25-jre-alpine
 COPY --from=builder dependencies/ ./
 COPY --from=builder snapshot-dependencies/ ./
 COPY --from=builder spring-boot-loader/ ./
diff --git a/streampipes-service-core/Dockerfile 
b/streampipes-service-core/Dockerfile
index 0605fabdda..6c8a8b4b76 100644
--- a/streampipes-service-core/Dockerfile
+++ b/streampipes-service-core/Dockerfile
@@ -13,12 +13,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-FROM eclipse-temurin:17-jre-focal as builder
+FROM eclipse-temurin:25-jre-alpine as builder
 ARG JAR_FILE=target/streampipes-core.jar
 COPY ${JAR_FILE} application.jar
 RUN java -Djarmode=layertools -jar application.jar extract
 
-FROM eclipse-temurin:17-jre-focal
+FROM eclipse-temurin:25-jre-alpine
 COPY --from=builder dependencies/ ./
 COPY --from=builder snapshot-dependencies/ ./
 COPY --from=builder spring-boot-loader/ ./
diff --git a/streampipes-service-core/pom.xml b/streampipes-service-core/pom.xml
index bdbc44bbaa..c508cc1b9f 100644
--- a/streampipes-service-core/pom.xml
+++ b/streampipes-service-core/pom.xml
@@ -47,12 +47,6 @@
             <groupId>org.apache.streampipes</groupId>
             <artifactId>streampipes-service-base</artifactId>
             <version>0.99.0-SNAPSHOT</version>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-undertow</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.apache.streampipes</groupId>
@@ -93,6 +87,16 @@
             <groupId>org.apache.streampipes</groupId>
             <artifactId>streampipes-messaging-pulsar</artifactId>
             <version>0.99.0-SNAPSHOT</version>
+            <exclusions>
+                <exclusion>
+                    <groupId>javax.validation</groupId>
+                    <artifactId>validation-api</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>javax.el</groupId>
+                    <artifactId>javax.el-api</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
         <dependency>
             <groupId>org.apache.streampipes</groupId>
@@ -120,15 +124,36 @@
             <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
             <exclusions>
                 <exclusion>
-                    <groupId>com.fasterxml.jackson.datatype</groupId>
-                    <artifactId>jackson-datatype-jsr310</artifactId>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-web-server</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-webmvc</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-jackson</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-validation</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-jackson</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>org.springframework.boot</groupId>
+                    <artifactId>spring-boot-autoconfigure</artifactId>
+                </exclusion>
+                <exclusion>
+                    <groupId>jakarta.validation</groupId>
+                    <artifactId>jakarta.validation-api</artifactId>
                 </exclusion>
             </exclusions>
         </dependency>
-        <dependency>
-            <groupId>jakarta.annotation</groupId>
-            <artifactId>jakarta.annotation-api</artifactId>
-        </dependency>
+
     
       <!-- Test dependencies -->
         <dependency>
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/StreamPipesCoreApplication.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/StreamPipesCoreApplication.java
index 643ba3f7ab..a07e4fb0f2 100644
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/StreamPipesCoreApplication.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/StreamPipesCoreApplication.java
@@ -45,7 +45,6 @@ import 
org.apache.streampipes.model.configuration.SpCoreConfigurationStatus;
 import org.apache.streampipes.model.pipeline.Pipeline;
 import org.apache.streampipes.model.pipeline.PipelineOperationStatus;
 import org.apache.streampipes.resource.management.SpResourceManager;
-import org.apache.streampipes.rest.security.SpPermissionEvaluator;
 import org.apache.streampipes.service.base.BaseNetworkingConfig;
 import org.apache.streampipes.service.base.StreamPipesPrometheusConfig;
 import org.apache.streampipes.service.base.StreamPipesServiceBase;
@@ -76,7 +75,7 @@ import java.util.function.Supplier;
 @Configuration
 @EnableAutoConfiguration
 @EnableScheduling
-@Import({OpenApiConfiguration.class, SpPermissionEvaluator.class, 
StreamPipesPasswordEncoder.class,
+@Import({OpenApiConfiguration.class, StreamPipesPasswordEncoder.class,
     StreamPipesPrometheusConfig.class, WebSecurityConfig.class, 
WelcomePageController.class})
 @ComponentScan({"org.apache.streampipes.rest.*", 
"org.apache.streampipes.service.core.oauth2",
     "org.apache.streampipes.service.core.scheduler"})
diff --git 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/WebSecurityConfig.java
 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/WebSecurityConfig.java
index e372963ae4..229d03e167 100644
--- 
a/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/WebSecurityConfig.java
+++ 
b/streampipes-service-core/src/main/java/org/apache/streampipes/service/core/WebSecurityConfig.java
@@ -39,18 +39,23 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Conditional;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.http.converter.FormHttpMessageConverter;
+import org.springframework.security.access.PermissionEvaluator;
+import 
org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
+import 
org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.config.BeanIds;
+import org.springframework.security.config.Customizer;
 import 
org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
 import 
org.springframework.security.config.annotation.authentication.configuration.AuthenticationConfiguration;
-import 
org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import 
org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
 import 
org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import 
org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import 
org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
 import org.springframework.security.config.http.SessionCreationPolicy;
 import org.springframework.security.core.userdetails.UserDetailsService;
-import 
org.springframework.security.oauth2.client.endpoint.DefaultAuthorizationCodeTokenResponseClient;
 import 
org.springframework.security.oauth2.client.endpoint.OAuth2AccessTokenResponseClient;
 import 
org.springframework.security.oauth2.client.endpoint.OAuth2AuthorizationCodeGrantRequest;
+import 
org.springframework.security.oauth2.client.endpoint.RestClientAuthorizationCodeTokenResponseClient;
 import 
org.springframework.security.oauth2.client.http.OAuth2ErrorResponseErrorHandler;
 import 
org.springframework.security.oauth2.client.registration.ClientRegistration;
 import 
org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
@@ -62,15 +67,14 @@ import 
org.springframework.security.oauth2.core.http.converter.OAuth2AccessToken
 import org.springframework.security.web.SecurityFilterChain;
 import 
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
 import 
org.springframework.security.web.context.RequestAttributeSecurityContextRepository;
-import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 import org.springframework.util.StringUtils;
-import org.springframework.web.client.RestTemplate;
+import org.springframework.web.client.RestClient;
 
 import java.util.List;
 
 @Configuration
 @EnableWebSecurity
-@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, 
jsr250Enabled = true)
+@EnableMethodSecurity(securedEnabled = true, jsr250Enabled = true)
 public class WebSecurityConfig {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(WebSecurityConfig.class);
@@ -98,61 +102,50 @@ public class WebSecurityConfig {
   }
 
   @Autowired
-  public void configureGlobal(AuthenticationManagerBuilder auth) throws 
Exception {
+  public void configureGlobal(AuthenticationManagerBuilder auth) {
     
auth.userDetailsService(userDetailsService).passwordEncoder(this.passwordEncoder.passwordEncoder());
   }
 
   @Bean
-  public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
-    http
-        .cors()
-        .and()
-        
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
-        .and()
-        .csrf().disable()
-        .formLogin().disable()
-        .httpBasic().disable()
-        .exceptionHandling()
-        .authenticationEntryPoint(new UnauthorizedRequestEntryPoint())
-        .and()
-        .authorizeHttpRequests((authz) -> {
-          try {
-            authz
-                .requestMatchers(UnauthenticatedInterfaces
-                    .get()
-                    .stream()
-                    .map(AntPathRequestMatcher::new)
-                    .toList()
-                    .toArray(new AntPathRequestMatcher[0]))
-                .permitAll()
-                .anyRequest()
-                .authenticated();
-
-            if (env.getOAuthEnabled().getValueOrDefault()) {
-              LOG.info("Configuring OAuth authentication from environment 
variables");
-              authz
-                  .and()
-                  .oauth2Login()
-                  .authorizationEndpoint()
-                  
.authorizationRequestRepository(cookieOAuth2AuthorizationRequestRepository())
-                  .and()
-                  .redirectionEndpoint()
-                  .and()
-                  .userInfoEndpoint()
-                  .oidcUserService(customOidcUserService)
-                  .userService(customOAuth2UserService)
-                  .and()
-                  .tokenEndpoint()
-                  
.accessTokenResponseClient(authorizationCodeTokenResponseClient())
-                  .and()
-                  .successHandler(oAuth2AuthenticationSuccessHandler)
-                  .failureHandler(oAuth2AuthenticationFailureHandler);
-            }
-          } catch (Exception e) {
-            throw new RuntimeException(e);
-          }
-        });
+  MethodSecurityExpressionHandler methodSecurityExpressionHandler(
+      PermissionEvaluator permissionEvaluator
+  ) {
+    var handler = new DefaultMethodSecurityExpressionHandler();
+    handler.setPermissionEvaluator(permissionEvaluator);
+    return handler;
+  }
 
+  @Bean
+  public SecurityFilterChain filterChain(HttpSecurity http) {
+    http
+        .cors(Customizer.withDefaults())
+        .sessionManagement(sm -> 
sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
+        .csrf(AbstractHttpConfigurer::disable)
+        .formLogin(AbstractHttpConfigurer::disable)
+        .httpBasic(AbstractHttpConfigurer::disable)
+        .exceptionHandling(eh -> eh.authenticationEntryPoint(new 
UnauthorizedRequestEntryPoint()))
+        .authorizeHttpRequests(auth -> auth
+            
.requestMatchers(UnauthenticatedInterfaces.get().toArray(String[]::new)).permitAll()
+            .anyRequest().authenticated()
+        );
+    if (env.getOAuthEnabled().getValueOrDefault()) {
+      LOG.info("Configuring OAuth authentication from environment variables");
+      http.oauth2Login(oauth -> oauth
+          .authorizationEndpoint(ae -> ae
+              
.authorizationRequestRepository(cookieOAuth2AuthorizationRequestRepository())
+          )
+          .redirectionEndpoint(Customizer.withDefaults())
+          .userInfoEndpoint(ui -> ui
+              .oidcUserService(customOidcUserService)
+              .userService(customOAuth2UserService)
+          )
+          .tokenEndpoint(te -> te
+              
.accessTokenResponseClient(authorizationCodeTokenResponseClient())
+          )
+          .successHandler(oAuth2AuthenticationSuccessHandler)
+          .failureHandler(oAuth2AuthenticationFailureHandler)
+      );
+    }
 
     http.addFilterBefore(tokenAuthenticationFilter(), 
UsernamePasswordAuthenticationFilter.class);
 
@@ -248,17 +241,24 @@ public class WebSecurityConfig {
   }
 
   private OAuth2AccessTokenResponseClient<OAuth2AuthorizationCodeGrantRequest> 
authorizationCodeTokenResponseClient() {
-    var tokenResponseHttpMessageConverter = new 
OAuth2AccessTokenResponseHttpMessageConverter();
-    tokenResponseHttpMessageConverter
-        .setAccessTokenResponseConverter(new 
OAuth2AccessTokenResponseConverterWithDefaults());
-    var restTemplate = new RestTemplate(
-        List.of(new FormHttpMessageConverter(), 
tokenResponseHttpMessageConverter)
+    var tokenResponseConverter = new 
OAuth2AccessTokenResponseHttpMessageConverter();
+    tokenResponseConverter.setAccessTokenResponseConverter(
+        new OAuth2AccessTokenResponseConverterWithDefaults()
     );
-    restTemplate.setErrorHandler(new OAuth2ErrorResponseErrorHandler());
-    var tokenResponseClient = new 
DefaultAuthorizationCodeTokenResponseClient();
-    tokenResponseClient.setRestOperations(restTemplate);
-    return tokenResponseClient;
 
-  }
+    RestClient restClient = RestClient.builder()
+        .messageConverters(converters -> {
+          converters.clear();
+          converters.add(new FormHttpMessageConverter());
+          converters.add(tokenResponseConverter);
+        })
+        .defaultStatusHandler(new OAuth2ErrorResponseErrorHandler())
+        .build();
+
+    var client = new RestClientAuthorizationCodeTokenResponseClient();
+    client.setRestClient(restClient);
 
+    return client;
+
+  }
 }
diff --git a/streampipes-service-extensions/pom.xml 
b/streampipes-service-extensions/pom.xml
index 03cb0b1a77..d370d673d1 100644
--- a/streampipes-service-extensions/pom.xml
+++ b/streampipes-service-extensions/pom.xml
@@ -65,12 +65,6 @@
         <dependency>
             <groupId>org.springframework.boot</groupId>
             <artifactId>spring-boot-starter-web</artifactId>
-            <exclusions>
-                <exclusion>
-                    <groupId>org.springframework.boot</groupId>
-                    <artifactId>spring-boot-starter-tomcat</artifactId>
-                </exclusion>
-            </exclusions>
         </dependency>
 
         <!-- Test dependencies -->
diff --git 
a/streampipes-service-extensions/src/main/java/org/apache/streampipes/service/extensions/StreamPipesExtensionsServiceBase.java
 
b/streampipes-service-extensions/src/main/java/org/apache/streampipes/service/extensions/StreamPipesExtensionsServiceBase.java
index aa2481afee..b95136efbc 100644
--- 
a/streampipes-service-extensions/src/main/java/org/apache/streampipes/service/extensions/StreamPipesExtensionsServiceBase.java
+++ 
b/streampipes-service-extensions/src/main/java/org/apache/streampipes/service/extensions/StreamPipesExtensionsServiceBase.java
@@ -38,6 +38,7 @@ import 
org.apache.streampipes.model.extensions.svcdiscovery.SpServiceTag;
 import org.apache.streampipes.model.extensions.svcdiscovery.SpServiceTagPrefix;
 import org.apache.streampipes.rest.extensions.WelcomePage;
 import org.apache.streampipes.rest.shared.exception.SpRestExceptionHandler;
+import org.apache.streampipes.rest.shared.serializer.JacksonConfiguration;
 import org.apache.streampipes.service.base.BaseNetworkingConfig;
 import org.apache.streampipes.service.base.StreamPipesPrometheusConfig;
 import org.apache.streampipes.service.base.StreamPipesServiceBase;
@@ -69,7 +70,8 @@ import java.util.stream.Collectors;
     WelcomePage.class,
     ServiceHealthResource.class,
     SpRestExceptionHandler.class,
-    StreamPipesPrometheusConfig.class
+    StreamPipesPrometheusConfig.class,
+    JacksonConfiguration.class
 })
 @ComponentScan({"org.apache.streampipes.rest.extensions.*", 
"org.apache.streampipes.service.base.rest.*"})
 public abstract class StreamPipesExtensionsServiceBase extends 
StreamPipesServiceBase {
diff --git 
a/streampipes-service-extensions/src/main/java/org/apache/streampipes/service/extensions/security/WebSecurityConfig.java
 
b/streampipes-service-extensions/src/main/java/org/apache/streampipes/service/extensions/security/WebSecurityConfig.java
index 10e83f16d4..32f544614f 100644
--- 
a/streampipes-service-extensions/src/main/java/org/apache/streampipes/service/extensions/security/WebSecurityConfig.java
+++ 
b/streampipes-service-extensions/src/main/java/org/apache/streampipes/service/extensions/security/WebSecurityConfig.java
@@ -29,18 +29,18 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import org.springframework.security.config.BeanIds;
 import 
org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
-import 
org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import 
org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
 import 
org.springframework.security.config.annotation.web.builders.HttpSecurity;
 import 
org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import 
org.springframework.security.config.annotation.web.configurers.AbstractHttpConfigurer;
 import org.springframework.security.config.http.SessionCreationPolicy;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.web.SecurityFilterChain;
 import 
org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
-import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
 
 @Configuration
 @EnableWebSecurity
-@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true, 
jsr250Enabled = true)
+@EnableMethodSecurity(securedEnabled = true, jsr250Enabled = true)
 public class WebSecurityConfig {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(WebSecurityConfig.class);
@@ -62,34 +62,26 @@ public class WebSecurityConfig {
   public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
 
     if (isAnonymousAccess()) {
-      
http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
-          .and()
-          .csrf().disable()
-          .formLogin().disable()
-          .httpBasic().disable()
-          .authorizeHttpRequests()
-          .requestMatchers(new AntPathRequestMatcher("/**")).permitAll();
+      http.sessionManagement(sm -> 
sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
+          .csrf(AbstractHttpConfigurer::disable)
+          .formLogin(AbstractHttpConfigurer::disable)
+          .httpBasic(AbstractHttpConfigurer::disable)
+          .authorizeHttpRequests(auth -> auth
+              .requestMatchers("/**").permitAll()
+          );
     } else {
       http
-          
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
-          .and()
-          .csrf().disable()
-          .formLogin().disable()
-          .httpBasic().disable()
-          .exceptionHandling()
-          .authenticationEntryPoint(new UnauthorizedRequestEntryPoint())
-          .and()
-          .authorizeHttpRequests((authz) -> authz
-              .requestMatchers(UnauthenticatedInterfaces
-                  .get()
-                  .stream()
-                  .map(AntPathRequestMatcher::new)
-                  .toList()
-                  .toArray(new AntPathRequestMatcher[0]))
-              .permitAll()
+          .sessionManagement(sm -> 
sm.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
+          .csrf(AbstractHttpConfigurer::disable)
+          .formLogin(AbstractHttpConfigurer::disable)
+          .httpBasic(AbstractHttpConfigurer::disable)
+          .exceptionHandling(eh -> eh.authenticationEntryPoint(new 
UnauthorizedRequestEntryPoint()))
+          .authorizeHttpRequests(auth -> auth
+              
.requestMatchers(UnauthenticatedInterfaces.get().toArray(String[]::new)).permitAll()
               .anyRequest().authenticated()
-              .and()
-              .addFilterBefore(tokenAuthenticationFilter(), 
UsernamePasswordAuthenticationFilter.class));
+          )
+          .addFilterBefore(tokenAuthenticationFilter(), 
UsernamePasswordAuthenticationFilter.class);
+
     }
 
     return http.build();

Reply via email to