From 455b79600a7f56ceed7fe2eba49a48525e3077cf Mon Sep 17 00:00:00 2001
From: rcalago <149600319+rcalago@users.noreply.github.com>
Date: Sat, 24 Feb 2024 15:18:45 +0800
Subject: [PATCH 01/16] Update README.md
---
spring-kafka-3/README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/spring-kafka-3/README.md b/spring-kafka-3/README.md
index 5250070952..82bd41dd69 100644
--- a/spring-kafka-3/README.md
+++ b/spring-kafka-3/README.md
@@ -1,3 +1,4 @@
## Relevant Articles
- [Spring Kafka Trusted Packages Feature](https://www.baeldung.com/spring-kafka-trusted-packages-feature)
- [How to Catch Deserialization Errors in Spring-Kafka?](https://www.baeldung.com/spring-kafka-deserialization-errors)
+- [View Kafka Headers in Java](https://www.baeldung.com/java-kafka-view-headers)
From cc43af9747f1220499708c73addcf7851c7c2db8 Mon Sep 17 00:00:00 2001
From: rcalago <149600319+rcalago@users.noreply.github.com>
Date: Sat, 24 Feb 2024 15:19:54 +0800
Subject: [PATCH 02/16] Update README.md
---
persistence-modules/spring-boot-persistence-3/README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/persistence-modules/spring-boot-persistence-3/README.md b/persistence-modules/spring-boot-persistence-3/README.md
index 34bbe10dc3..fc1da55635 100644
--- a/persistence-modules/spring-boot-persistence-3/README.md
+++ b/persistence-modules/spring-boot-persistence-3/README.md
@@ -2,4 +2,5 @@
- [Patterns for Iterating Over Large Result Sets With Spring Data JPA](https://www.baeldung.com/spring-data-jpa-iterate-large-result-sets)
- [Count the Number of Rows in Spring Data JPA](https://www.baeldung.com/spring-data-jpa-row-count)
- [A Guide to Spring AbstractRoutingDatasource](https://www.baeldung.com/spring-abstract-routing-data-source)
+- [How To Use findBy() With Multiple Columns in JPA](https://www.baeldung.com/spring-data-jpa-findby-multiple-columns)
- More articles: [[<-- prev]](../spring-boot-persistence-2)
From dc68d08adef7d68f4a90d1ac3b6b856abd1338a3 Mon Sep 17 00:00:00 2001
From: rcalago <149600319+rcalago@users.noreply.github.com>
Date: Sat, 24 Feb 2024 15:21:25 +0800
Subject: [PATCH 03/16] Update README.md
---
spring-kafka-3/README.md | 1 +
1 file changed, 1 insertion(+)
diff --git a/spring-kafka-3/README.md b/spring-kafka-3/README.md
index 82bd41dd69..2cbfeaccb0 100644
--- a/spring-kafka-3/README.md
+++ b/spring-kafka-3/README.md
@@ -2,3 +2,4 @@
- [Spring Kafka Trusted Packages Feature](https://www.baeldung.com/spring-kafka-trusted-packages-feature)
- [How to Catch Deserialization Errors in Spring-Kafka?](https://www.baeldung.com/spring-kafka-deserialization-errors)
- [View Kafka Headers in Java](https://www.baeldung.com/java-kafka-view-headers)
+- [Understanding Kafka InstanceAlreadyExistsException in Java](https://www.baeldung.com/kafka-instancealreadyexistsexception)
From c1e287b9c932ce8f7c1904c94bf08f40054f3927 Mon Sep 17 00:00:00 2001
From: Wynn Teo <49014791+wynnteo@users.noreply.github.com>
Date: Sun, 25 Feb 2024 09:51:07 +0800
Subject: [PATCH 04/16] Bael 7394 (#15942)
* BAEL-7490 read write file in separate thread
* Change the to try resources
* Update the code to sync with article
* BAEL-7394 @datatestjpa in junit
* Added new module to parent
---
persistence-modules/pom.xml | 1 +
.../spring-data-jpa-annotations-2/pom.xml | 34 ++++++++++
.../java/com/baeldung/datajpatest/User.java | 42 ++++++++++++
.../baeldung/datajpatest/UserApplication.java | 12 ++++
.../baeldung/datajpatest/UserRepository.java | 8 +++
.../UserRepositoryIntegrationTest.java | 68 +++++++++++++++++++
6 files changed, 165 insertions(+)
create mode 100644 persistence-modules/spring-data-jpa-annotations-2/pom.xml
create mode 100644 persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/User.java
create mode 100644 persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserApplication.java
create mode 100644 persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserRepository.java
create mode 100644 persistence-modules/spring-data-jpa-annotations-2/src/test/java/com/baeldung/datajpatest/UserRepositoryIntegrationTest.java
diff --git a/persistence-modules/pom.xml b/persistence-modules/pom.xml
index f059ec449a..e4363cce9c 100644
--- a/persistence-modules/pom.xml
+++ b/persistence-modules/pom.xml
@@ -80,6 +80,7 @@
spring-data-geode
spring-data-jpa-annotations
+ spring-data-jpa-annotations-2
spring-data-jpa-crud
spring-data-jpa-crud-2
spring-data-jpa-enterprise
diff --git a/persistence-modules/spring-data-jpa-annotations-2/pom.xml b/persistence-modules/spring-data-jpa-annotations-2/pom.xml
new file mode 100644
index 0000000000..306d2ed172
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/pom.xml
@@ -0,0 +1,34 @@
+
+
+ 4.0.0
+ spring-data-jpa-annotations-2
+ spring-data-jpa-annotations-2
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-2
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.h2database
+ h2
+
+
+ jakarta.persistence
+ jakarta.persistence-api
+
+
+
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/User.java b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/User.java
new file mode 100644
index 0000000000..23b9273c82
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/User.java
@@ -0,0 +1,42 @@
+package com.baeldung.datajpatest;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Table(name = "app_user")
+public class User {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String username;
+ private String password;
+
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+
+ public void setUsername(String username) {
+ this.username = username;
+ }
+
+ public String getPassword() {
+ return password;
+ }
+
+ public void setPassword(String password) {
+ this.password = password;
+ }
+}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserApplication.java b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserApplication.java
new file mode 100644
index 0000000000..b58c7b2339
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserApplication.java
@@ -0,0 +1,12 @@
+package com.baeldung.datajpatest;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class UserApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(UserApplication.class);
+ }
+}
diff --git a/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserRepository.java b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserRepository.java
new file mode 100644
index 0000000000..3393081203
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/src/main/java/com/baeldung/datajpatest/UserRepository.java
@@ -0,0 +1,8 @@
+package com.baeldung.datajpatest;
+
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface UserRepository extends JpaRepository {
+
+ User findByUsername(String username);
+}
\ No newline at end of file
diff --git a/persistence-modules/spring-data-jpa-annotations-2/src/test/java/com/baeldung/datajpatest/UserRepositoryIntegrationTest.java b/persistence-modules/spring-data-jpa-annotations-2/src/test/java/com/baeldung/datajpatest/UserRepositoryIntegrationTest.java
new file mode 100644
index 0000000000..9c933c8202
--- /dev/null
+++ b/persistence-modules/spring-data-jpa-annotations-2/src/test/java/com/baeldung/datajpatest/UserRepositoryIntegrationTest.java
@@ -0,0 +1,68 @@
+package com.baeldung.datajpatest;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
+import static org.junit.jupiter.api.Assertions.assertThrows;
+
+import org.junit.After;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.orm.jpa.DataJpaTest;
+
+@DataJpaTest
+public class UserRepositoryIntegrationTest {
+
+ @Autowired
+ private UserRepository userRepository;
+
+ private User testUser;
+
+ @BeforeEach
+ public void setUp() {
+ // Initialize test data before each test method test
+ testUser = new User();
+ testUser.setUsername("testuser");
+ testUser.setPassword("password");
+ userRepository.save(testUser);
+ }
+
+ @After
+ public void tearDown() {
+ // Release test data after each test method
+ userRepository.delete(testUser);
+ }
+
+ @Test
+ void givenUser_whenSaved_thenCanBeFoundById() {
+ // Verify that the user has been saved successfully
+ User savedUser = userRepository.findById(testUser.getId())
+ .orElse(null);
+
+ assertNotNull(savedUser);
+ assertEquals(testUser.getUsername(), savedUser.getUsername());
+ assertEquals(testUser.getPassword(), savedUser.getPassword());
+ }
+
+ @Test
+ void givenUser_whenUpdated_thenCanBeFoundByIdWithUpdatedData() {
+ testUser.setUsername("updatedUsername");
+ userRepository.save(testUser);
+
+ User updatedUser = userRepository.findById(testUser.getId())
+ .orElse(null);
+
+ assertNotNull(updatedUser);
+ assertEquals("updatedUsername", updatedUser.getUsername());
+ }
+
+ @Test
+ void givenUser_whenFindByUsernameCalled_thenUserIsFound() {
+ User foundUser = userRepository.findByUsername("testuser");
+
+ assertNotNull(foundUser);
+ assertEquals("testuser", foundUser.getUsername());
+ }
+}
\ No newline at end of file
From f617d7985d2a461daf0e4c2477a9ebbbea8bc9f2 Mon Sep 17 00:00:00 2001
From: s9m33r
Date: Sun, 28 Jan 2024 17:41:58 +0530
Subject: [PATCH 05/16] BAEL-7351 Demo code
---
.../spring/kafka/groupId/KafkaConfig.java | 47 +++++++++++++++++++
.../kafka/groupId/KafkaErrorHandler.java | 37 +++++++++++++++
.../baeldung/spring/kafka/groupId/Main.java | 14 ++++++
.../spring/kafka/groupId/MyKafkaConsumer.java | 41 ++++++++++++++++
.../spring/kafka/groupId/MyKafkaProducer.java | 24 ++++++++++
.../spring/kafka/groupId/MainLiveTest.java | 44 +++++++++++++++++
6 files changed, 207 insertions(+)
create mode 100644 spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
create mode 100644 spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
create mode 100644 spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
create mode 100644 spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
create mode 100644 spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
create mode 100644 spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
new file mode 100644
index 0000000000..b8d7c42ec9
--- /dev/null
+++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
@@ -0,0 +1,47 @@
+package com.baeldung.spring.kafka.groupId;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.kafka.clients.consumer.ConsumerConfig;
+import org.apache.kafka.common.serialization.StringDeserializer;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.kafka.annotation.EnableKafka;
+import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
+import org.springframework.kafka.core.ConsumerFactory;
+import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
+import org.springframework.kafka.listener.CommonErrorHandler;
+
+@EnableKafka
+@Configuration
+class KafkaConfig {
+
+ @Bean
+ ConsumerFactory consumerFactory(@Value("${spring.kafka.bootstrap-servers:localhost:9092}") String bootstrapServers) {
+ Map props = new HashMap<>();
+ props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+ props.put(ConsumerConfig.GROUP_ID_CONFIG, "${kafka.consumer.groupId:test-consumer-group}");
+ props.put(ConsumerConfig.CLIENT_ID_CONFIG, "rex");
+ props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
+ props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
+ props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
+ return new DefaultKafkaConsumerFactory<>(props, new StringDeserializer(), new StringDeserializer());
+ }
+
+ @Bean
+ ConcurrentKafkaListenerContainerFactory kafkaListenerContainerFactory(ConsumerFactory consumerFactory,
+ CommonErrorHandler commonErrorHandler) {
+ var factory = new ConcurrentKafkaListenerContainerFactory();
+ factory.setConsumerFactory(consumerFactory);
+ factory.setCommonErrorHandler(commonErrorHandler);
+ return factory;
+ }
+
+ @Bean
+ CommonErrorHandler kafkaErrorHandler() {
+ return new KafkaErrorHandler();
+ }
+
+}
\ No newline at end of file
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
new file mode 100644
index 0000000000..a30254ea47
--- /dev/null
+++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
@@ -0,0 +1,37 @@
+package com.baeldung.spring.kafka.groupId;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.apache.kafka.common.errors.RecordDeserializationException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.kafka.listener.CommonErrorHandler;
+import org.springframework.kafka.listener.MessageListenerContainer;
+import org.springframework.lang.NonNull;
+
+class KafkaErrorHandler implements CommonErrorHandler {
+
+ private static final Logger log = LoggerFactory.getLogger(KafkaErrorHandler.class);
+
+ @Override
+ public void handleRecord(@NonNull Exception exception, @NonNull ConsumerRecord, ?> record, @NonNull Consumer, ?> consumer,
+ @NonNull MessageListenerContainer container) {
+ handle(exception, consumer);
+ }
+
+ @Override
+ public void handleOtherException(@NonNull Exception exception, @NonNull Consumer, ?> consumer, @NonNull MessageListenerContainer container,
+ boolean batchListener) {
+ handle(exception, consumer);
+ }
+
+ private void handle(Exception exception, Consumer, ?> consumer) {
+ log.error("Exception thrown", exception);
+ if (exception instanceof RecordDeserializationException ex) {
+ consumer.seek(ex.topicPartition(), ex.offset() + 1L);
+ consumer.commitSync();
+ } else {
+ log.error("Exception not handled", exception);
+ }
+ }
+}
\ No newline at end of file
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/Main.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
new file mode 100644
index 0000000000..1045bc5192
--- /dev/null
+++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
@@ -0,0 +1,14 @@
+package com.baeldung.spring.kafka.groupId;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@SpringBootApplication
+@ComponentScan(basePackages = "com.baeldung.spring.kafka.groupId")
+public class Main {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Main.class, args);
+ }
+}
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
new file mode 100644
index 0000000000..e17d168338
--- /dev/null
+++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
@@ -0,0 +1,41 @@
+package com.baeldung.spring.kafka.groupId;
+
+import java.util.concurrent.CountDownLatch;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.messaging.handler.annotation.Payload;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MyKafkaConsumer {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(MyKafkaConsumer.class);
+
+ private CountDownLatch latch = new CountDownLatch(1);
+
+ private String payload;
+
+ @KafkaListener(topics = "${kafka.topic.name:test-topic}", groupId = "${kafka.consumer.groupId:test-consumer-group}", concurrency = "4")
+ public void receive(@Payload String payload, Consumer consumer) {
+ LOGGER.info("Consumer='{}' received payload='{}'", consumer.groupMetadata()
+ .memberId(), payload);
+ this.payload = payload;
+
+ latch.countDown();
+ }
+
+ public CountDownLatch getLatch() {
+ return latch;
+ }
+
+ public void resetLatch() {
+ latch = new CountDownLatch(1);
+ }
+
+ public String getPayload() {
+ return payload;
+ }
+}
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
new file mode 100644
index 0000000000..c1d9a05d60
--- /dev/null
+++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
@@ -0,0 +1,24 @@
+package com.baeldung.spring.kafka.groupId;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MyKafkaProducer {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(MyKafkaProducer.class);
+
+ @Value("${kafka.topic.name:test-topic}")
+ private String topic;
+ @Autowired
+ private KafkaTemplate kafkaTemplate;
+
+ public void send(String payload) {
+ LOGGER.info("Sending payload='{}' to topic='{}'", payload, topic);
+ kafkaTemplate.send(topic, payload);
+ }
+}
diff --git a/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java b/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
new file mode 100644
index 0000000000..97b056db73
--- /dev/null
+++ b/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
@@ -0,0 +1,44 @@
+package com.baeldung.spring.kafka.groupId;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.concurrent.TimeUnit;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.kafka.test.context.EmbeddedKafka;
+import org.springframework.test.annotation.DirtiesContext;
+
+@SpringBootTest(classes = Main.class)
+@ComponentScan(basePackages = "com.baeldung.spring.kafka.groupId")
+@DirtiesContext
+@EmbeddedKafka(partitions = 4, topics = { "${kafka.topic.name:test-topic}" }, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
+public class MainLiveTest {
+
+ @Autowired
+ private MyKafkaConsumer consumer;
+ @Autowired
+ private MyKafkaProducer producer;
+
+ @BeforeEach
+ void setup() {
+ consumer.resetLatch();
+ }
+
+ @Test
+ public void givenEmbeddedKafkaBroker_whenSendingWithSimpleProducer_thenMessageReceived() throws Exception {
+ String data = "Test 123...";
+
+ producer.send(data);
+
+ boolean messageConsumed = consumer.getLatch()
+ .await(10, TimeUnit.SECONDS);
+ assertTrue(messageConsumed);
+ assertThat(consumer.getPayload(), containsString(data));
+ }
+}
\ No newline at end of file
From ca9ebc37cfef17d3bd80c459610891ead94a71b1 Mon Sep 17 00:00:00 2001
From: s9m33r
Date: Sun, 28 Jan 2024 19:59:17 +0530
Subject: [PATCH 06/16] BAEL-7351 added new lines
---
.../java/com/baeldung/spring/kafka/groupId/KafkaConfig.java | 2 +-
.../com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java | 2 +-
.../java/com/baeldung/spring/kafka/groupId/MainLiveTest.java | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
index b8d7c42ec9..6514816424 100644
--- a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
+++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
@@ -44,4 +44,4 @@ class KafkaConfig {
return new KafkaErrorHandler();
}
-}
\ No newline at end of file
+}
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
index a30254ea47..00cc795272 100644
--- a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
+++ b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
@@ -34,4 +34,4 @@ class KafkaErrorHandler implements CommonErrorHandler {
log.error("Exception not handled", exception);
}
}
-}
\ No newline at end of file
+}
diff --git a/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java b/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
index 97b056db73..c7e78f6e58 100644
--- a/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
+++ b/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
@@ -41,4 +41,4 @@ public class MainLiveTest {
assertTrue(messageConsumed);
assertThat(consumer.getPayload(), containsString(data));
}
-}
\ No newline at end of file
+}
From d8e035da08782a110ca8e75e7bdc96c90d4ae7fa Mon Sep 17 00:00:00 2001
From: s9m33r
Date: Wed, 31 Jan 2024 00:40:41 +0530
Subject: [PATCH 07/16] BAEL-7351 moving to a new module
---
apache-kafka-3/.gitignore | 33 +++++++
apache-kafka-3/pom.xml | 50 +++++++++++
.../apachekafka3}/groupId/KafkaConfig.java | 2 +-
.../groupId/KafkaErrorHandler.java | 9 +-
.../baeldung/apachekafka3}/groupId/Main.java | 28 +++---
.../groupId/MyKafkaConsumer.java | 82 ++++++++---------
.../groupId/MyKafkaProducer.java | 48 +++++-----
.../src/main/resources/application.properties | 1 +
.../apachekafka3}/groupId/MainLiveTest.java | 88 +++++++++----------
pom.xml | 3 +-
10 files changed, 211 insertions(+), 133 deletions(-)
create mode 100644 apache-kafka-3/.gitignore
create mode 100644 apache-kafka-3/pom.xml
rename {spring-kafka-3/src/main/java/com/baeldung/spring/kafka => apache-kafka-3/src/main/java/com/baeldung/apachekafka3}/groupId/KafkaConfig.java (97%)
rename {spring-kafka-3/src/main/java/com/baeldung/spring/kafka => apache-kafka-3/src/main/java/com/baeldung/apachekafka3}/groupId/KafkaErrorHandler.java (76%)
rename {spring-kafka-3/src/main/java/com/baeldung/spring/kafka => apache-kafka-3/src/main/java/com/baeldung/apachekafka3}/groupId/Main.java (73%)
rename {spring-kafka-3/src/main/java/com/baeldung/spring/kafka => apache-kafka-3/src/main/java/com/baeldung/apachekafka3}/groupId/MyKafkaConsumer.java (82%)
rename {spring-kafka-3/src/main/java/com/baeldung/spring/kafka => apache-kafka-3/src/main/java/com/baeldung/apachekafka3}/groupId/MyKafkaProducer.java (91%)
create mode 100644 apache-kafka-3/src/main/resources/application.properties
rename {spring-kafka-3/src/test/java/com/baeldung/spring/kafka => apache-kafka-3/src/test/java/com/baeldung/apachekafka3}/groupId/MainLiveTest.java (90%)
diff --git a/apache-kafka-3/.gitignore b/apache-kafka-3/.gitignore
new file mode 100644
index 0000000000..549e00a2a9
--- /dev/null
+++ b/apache-kafka-3/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/apache-kafka-3/pom.xml b/apache-kafka-3/pom.xml
new file mode 100644
index 0000000000..9466068482
--- /dev/null
+++ b/apache-kafka-3/pom.xml
@@ -0,0 +1,50 @@
+
+
+ 4.0.0
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../parent-boot-2
+
+
+ apache-kafka-3
+ Apache Kafka 3
+ Third module for Apache Kafka related articles
+
+ 17
+
+
+
+ org.springframework.boot
+ spring-boot-starter
+
+
+ org.springframework.kafka
+ spring-kafka
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springframework.kafka
+ spring-kafka-test
+ test
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaConfig.java
similarity index 97%
rename from spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
rename to apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaConfig.java
index 6514816424..da9a41f425 100644
--- a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
+++ b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaConfig.java
@@ -1,4 +1,4 @@
-package com.baeldung.spring.kafka.groupId;
+package com.baeldung.apachekafka3.groupId;
import java.util.HashMap;
import java.util.Map;
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaErrorHandler.java
similarity index 76%
rename from spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
rename to apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaErrorHandler.java
index 00cc795272..3acd18a452 100644
--- a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
+++ b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaErrorHandler.java
@@ -1,7 +1,6 @@
-package com.baeldung.spring.kafka.groupId;
+package com.baeldung.apachekafka3.groupId;
import org.apache.kafka.clients.consumer.Consumer;
-import org.apache.kafka.clients.consumer.ConsumerRecord;
import org.apache.kafka.common.errors.RecordDeserializationException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -13,12 +12,6 @@ class KafkaErrorHandler implements CommonErrorHandler {
private static final Logger log = LoggerFactory.getLogger(KafkaErrorHandler.class);
- @Override
- public void handleRecord(@NonNull Exception exception, @NonNull ConsumerRecord, ?> record, @NonNull Consumer, ?> consumer,
- @NonNull MessageListenerContainer container) {
- handle(exception, consumer);
- }
-
@Override
public void handleOtherException(@NonNull Exception exception, @NonNull Consumer, ?> consumer, @NonNull MessageListenerContainer container,
boolean batchListener) {
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/Main.java b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/Main.java
similarity index 73%
rename from spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
rename to apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/Main.java
index 1045bc5192..e38699270f 100644
--- a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
+++ b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/Main.java
@@ -1,14 +1,14 @@
-package com.baeldung.spring.kafka.groupId;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.context.annotation.ComponentScan;
-
-@SpringBootApplication
-@ComponentScan(basePackages = "com.baeldung.spring.kafka.groupId")
-public class Main {
-
- public static void main(String[] args) {
- SpringApplication.run(Main.class, args);
- }
-}
+package com.baeldung.apachekafka3.groupId;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+@SpringBootApplication
+@ComponentScan(basePackages = "com.baeldung.apachekafka3.groupId")
+public class Main {
+
+ public static void main(String[] args) {
+ SpringApplication.run(Main.class, args);
+ }
+}
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaConsumer.java
similarity index 82%
rename from spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
rename to apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaConsumer.java
index e17d168338..e3c7220479 100644
--- a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
+++ b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaConsumer.java
@@ -1,41 +1,41 @@
-package com.baeldung.spring.kafka.groupId;
-
-import java.util.concurrent.CountDownLatch;
-
-import org.apache.kafka.clients.consumer.Consumer;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.kafka.annotation.KafkaListener;
-import org.springframework.messaging.handler.annotation.Payload;
-import org.springframework.stereotype.Service;
-
-@Service
-public class MyKafkaConsumer {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(MyKafkaConsumer.class);
-
- private CountDownLatch latch = new CountDownLatch(1);
-
- private String payload;
-
- @KafkaListener(topics = "${kafka.topic.name:test-topic}", groupId = "${kafka.consumer.groupId:test-consumer-group}", concurrency = "4")
- public void receive(@Payload String payload, Consumer consumer) {
- LOGGER.info("Consumer='{}' received payload='{}'", consumer.groupMetadata()
- .memberId(), payload);
- this.payload = payload;
-
- latch.countDown();
- }
-
- public CountDownLatch getLatch() {
- return latch;
- }
-
- public void resetLatch() {
- latch = new CountDownLatch(1);
- }
-
- public String getPayload() {
- return payload;
- }
-}
+package com.baeldung.apachekafka3.groupId;
+
+import java.util.concurrent.CountDownLatch;
+
+import org.apache.kafka.clients.consumer.Consumer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.kafka.annotation.KafkaListener;
+import org.springframework.messaging.handler.annotation.Payload;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MyKafkaConsumer {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(MyKafkaConsumer.class);
+
+ private CountDownLatch latch = new CountDownLatch(1);
+
+ private String payload;
+
+ @KafkaListener(topics = "${kafka.topic.name:test-topic}", clientIdPrefix = "neo", groupId = "${kafka.consumer.groupId:test-consumer-group}", concurrency = "4")
+ public void receive(@Payload String payload, Consumer consumer) {
+ LOGGER.info("Consumer='{}' received payload='{}'", consumer.groupMetadata()
+ .memberId(), payload);
+ this.payload = payload;
+
+ latch.countDown();
+ }
+
+ public CountDownLatch getLatch() {
+ return latch;
+ }
+
+ public void resetLatch() {
+ latch = new CountDownLatch(1);
+ }
+
+ public String getPayload() {
+ return payload;
+ }
+}
diff --git a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaProducer.java
similarity index 91%
rename from spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
rename to apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaProducer.java
index c1d9a05d60..8707ce800d 100644
--- a/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
+++ b/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaProducer.java
@@ -1,24 +1,24 @@
-package com.baeldung.spring.kafka.groupId;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.kafka.core.KafkaTemplate;
-import org.springframework.stereotype.Service;
-
-@Service
-public class MyKafkaProducer {
-
- private static final Logger LOGGER = LoggerFactory.getLogger(MyKafkaProducer.class);
-
- @Value("${kafka.topic.name:test-topic}")
- private String topic;
- @Autowired
- private KafkaTemplate kafkaTemplate;
-
- public void send(String payload) {
- LOGGER.info("Sending payload='{}' to topic='{}'", payload, topic);
- kafkaTemplate.send(topic, payload);
- }
-}
+package com.baeldung.apachekafka3.groupId;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.kafka.core.KafkaTemplate;
+import org.springframework.stereotype.Service;
+
+@Service
+public class MyKafkaProducer {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(MyKafkaProducer.class);
+
+ @Value("${kafka.topic.name:test-topic}")
+ private String topic;
+ @Autowired
+ private KafkaTemplate kafkaTemplate;
+
+ public void send(String payload) {
+ LOGGER.info("Sending payload='{}' to topic='{}'", payload, topic);
+ kafkaTemplate.send(topic, payload);
+ }
+}
diff --git a/apache-kafka-3/src/main/resources/application.properties b/apache-kafka-3/src/main/resources/application.properties
new file mode 100644
index 0000000000..0fce641151
--- /dev/null
+++ b/apache-kafka-3/src/main/resources/application.properties
@@ -0,0 +1 @@
+kafka.topic.name=test-topic
diff --git a/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java b/apache-kafka-3/src/test/java/com/baeldung/apachekafka3/groupId/MainLiveTest.java
similarity index 90%
rename from spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
rename to apache-kafka-3/src/test/java/com/baeldung/apachekafka3/groupId/MainLiveTest.java
index c7e78f6e58..e10e41838a 100644
--- a/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
+++ b/apache-kafka-3/src/test/java/com/baeldung/apachekafka3/groupId/MainLiveTest.java
@@ -1,44 +1,44 @@
-package com.baeldung.spring.kafka.groupId;
-
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsString;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-
-import java.util.concurrent.TimeUnit;
-
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.context.annotation.ComponentScan;
-import org.springframework.kafka.test.context.EmbeddedKafka;
-import org.springframework.test.annotation.DirtiesContext;
-
-@SpringBootTest(classes = Main.class)
-@ComponentScan(basePackages = "com.baeldung.spring.kafka.groupId")
-@DirtiesContext
-@EmbeddedKafka(partitions = 4, topics = { "${kafka.topic.name:test-topic}" }, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
-public class MainLiveTest {
-
- @Autowired
- private MyKafkaConsumer consumer;
- @Autowired
- private MyKafkaProducer producer;
-
- @BeforeEach
- void setup() {
- consumer.resetLatch();
- }
-
- @Test
- public void givenEmbeddedKafkaBroker_whenSendingWithSimpleProducer_thenMessageReceived() throws Exception {
- String data = "Test 123...";
-
- producer.send(data);
-
- boolean messageConsumed = consumer.getLatch()
- .await(10, TimeUnit.SECONDS);
- assertTrue(messageConsumed);
- assertThat(consumer.getPayload(), containsString(data));
- }
-}
+package com.baeldung.apachekafka3.groupId;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsString;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.concurrent.TimeUnit;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.kafka.test.context.EmbeddedKafka;
+import org.springframework.test.annotation.DirtiesContext;
+
+@SpringBootTest(classes = Main.class)
+@ComponentScan(basePackages = "com.baeldung.apachekafka3.groupId")
+@DirtiesContext
+@EmbeddedKafka(partitions = 4, topics = { "${kafka.topic.name:test-topic}" }, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
+public class MainLiveTest {
+
+ @Autowired
+ private MyKafkaConsumer consumer;
+ @Autowired
+ private MyKafkaProducer producer;
+
+ @BeforeEach
+ void setup() {
+ consumer.resetLatch();
+ }
+
+ @Test
+ public void givenEmbeddedKafkaBroker_whenSendingWithSimpleProducer_thenMessageReceived() throws Exception {
+ String data = "Test 123...";
+
+ producer.send(data);
+
+ boolean messageConsumed = consumer.getLatch()
+ .await(10, TimeUnit.SECONDS);
+ assertTrue(messageConsumed);
+ assertThat(consumer.getPayload(), containsString(data));
+ }
+}
diff --git a/pom.xml b/pom.xml
index 030b8e1843..3a3ba46d48 100644
--- a/pom.xml
+++ b/pom.xml
@@ -670,8 +670,9 @@
apache-httpclient-2
apache-httpclient4
apache-httpclient
- apache-kafka-2
apache-kafka
+ apache-kafka-2
+ apache-kafka-3
apache-libraries-2
apache-libraries
apache-olingo
From a516aca5c49b594f3d3c4303119a4f2eb8206795 Mon Sep 17 00:00:00 2001
From: s9m33r
Date: Wed, 31 Jan 2024 21:52:54 +0530
Subject: [PATCH 08/16] BAEL-7351 moving demo code to a spring-kafka-2 module
---
apache-kafka-3/.gitignore | 33 ------------
apache-kafka-3/pom.xml | 50 -------------------
.../src/main/resources/application.properties | 1 -
pom.xml | 1 -
.../spring/kafka}/groupId/KafkaConfig.java | 2 +-
.../kafka}/groupId/KafkaErrorHandler.java | 2 +-
.../baeldung/spring/kafka}/groupId/Main.java | 4 +-
.../kafka}/groupId/MyKafkaConsumer.java | 2 +-
.../kafka}/groupId/MyKafkaProducer.java | 2 +-
.../spring/kafka}/groupId/MainLiveTest.java | 4 +-
10 files changed, 8 insertions(+), 93 deletions(-)
delete mode 100644 apache-kafka-3/.gitignore
delete mode 100644 apache-kafka-3/pom.xml
delete mode 100644 apache-kafka-3/src/main/resources/application.properties
rename {apache-kafka-3/src/main/java/com/baeldung/apachekafka3 => spring-kafka-2/src/main/java/com/baeldung/spring/kafka}/groupId/KafkaConfig.java (97%)
rename {apache-kafka-3/src/main/java/com/baeldung/apachekafka3 => spring-kafka-2/src/main/java/com/baeldung/spring/kafka}/groupId/KafkaErrorHandler.java (96%)
rename {apache-kafka-3/src/main/java/com/baeldung/apachekafka3 => spring-kafka-2/src/main/java/com/baeldung/spring/kafka}/groupId/Main.java (75%)
rename {apache-kafka-3/src/main/java/com/baeldung/apachekafka3 => spring-kafka-2/src/main/java/com/baeldung/spring/kafka}/groupId/MyKafkaConsumer.java (96%)
rename {apache-kafka-3/src/main/java/com/baeldung/apachekafka3 => spring-kafka-2/src/main/java/com/baeldung/spring/kafka}/groupId/MyKafkaProducer.java (94%)
rename {apache-kafka-3/src/test/java/com/baeldung/apachekafka3 => spring-kafka-2/src/test/java/com/baeldung/spring/kafka}/groupId/MainLiveTest.java (92%)
diff --git a/apache-kafka-3/.gitignore b/apache-kafka-3/.gitignore
deleted file mode 100644
index 549e00a2a9..0000000000
--- a/apache-kafka-3/.gitignore
+++ /dev/null
@@ -1,33 +0,0 @@
-HELP.md
-target/
-!.mvn/wrapper/maven-wrapper.jar
-!**/src/main/**/target/
-!**/src/test/**/target/
-
-### STS ###
-.apt_generated
-.classpath
-.factorypath
-.project
-.settings
-.springBeans
-.sts4-cache
-
-### IntelliJ IDEA ###
-.idea
-*.iws
-*.iml
-*.ipr
-
-### NetBeans ###
-/nbproject/private/
-/nbbuild/
-/dist/
-/nbdist/
-/.nb-gradle/
-build/
-!**/src/main/**/build/
-!**/src/test/**/build/
-
-### VS Code ###
-.vscode/
diff --git a/apache-kafka-3/pom.xml b/apache-kafka-3/pom.xml
deleted file mode 100644
index 9466068482..0000000000
--- a/apache-kafka-3/pom.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-
-
- 4.0.0
-
-
- com.baeldung
- parent-boot-2
- 0.0.1-SNAPSHOT
- ../parent-boot-2
-
-
- apache-kafka-3
- Apache Kafka 3
- Third module for Apache Kafka related articles
-
- 17
-
-
-
- org.springframework.boot
- spring-boot-starter
-
-
- org.springframework.kafka
- spring-kafka
-
-
-
- org.springframework.boot
- spring-boot-starter-test
- test
-
-
- org.springframework.kafka
- spring-kafka-test
- test
-
-
-
-
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
-
-
-
-
diff --git a/apache-kafka-3/src/main/resources/application.properties b/apache-kafka-3/src/main/resources/application.properties
deleted file mode 100644
index 0fce641151..0000000000
--- a/apache-kafka-3/src/main/resources/application.properties
+++ /dev/null
@@ -1 +0,0 @@
-kafka.topic.name=test-topic
diff --git a/pom.xml b/pom.xml
index 3a3ba46d48..330035020f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -672,7 +672,6 @@
apache-httpclient
apache-kafka
apache-kafka-2
- apache-kafka-3
apache-libraries-2
apache-libraries
apache-olingo
diff --git a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaConfig.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
similarity index 97%
rename from apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaConfig.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
index da9a41f425..6514816424 100644
--- a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaConfig.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
@@ -1,4 +1,4 @@
-package com.baeldung.apachekafka3.groupId;
+package com.baeldung.spring.kafka.groupId;
import java.util.HashMap;
import java.util.Map;
diff --git a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaErrorHandler.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
similarity index 96%
rename from apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaErrorHandler.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
index 3acd18a452..c334925141 100644
--- a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/KafkaErrorHandler.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
@@ -1,4 +1,4 @@
-package com.baeldung.apachekafka3.groupId;
+package com.baeldung.spring.kafka.groupId;
import org.apache.kafka.clients.consumer.Consumer;
import org.apache.kafka.common.errors.RecordDeserializationException;
diff --git a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/Main.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
similarity index 75%
rename from apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/Main.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
index e38699270f..589b20c68f 100644
--- a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/Main.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
@@ -1,11 +1,11 @@
-package com.baeldung.apachekafka3.groupId;
+package com.baeldung.spring.kafka.groupId;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;
@SpringBootApplication
-@ComponentScan(basePackages = "com.baeldung.apachekafka3.groupId")
+@ComponentScan(basePackages = "com.baeldung.spring.kafka.groupId")
public class Main {
public static void main(String[] args) {
diff --git a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaConsumer.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
similarity index 96%
rename from apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaConsumer.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
index e3c7220479..f26b605a7b 100644
--- a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaConsumer.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
@@ -1,4 +1,4 @@
-package com.baeldung.apachekafka3.groupId;
+package com.baeldung.spring.kafka.groupId;
import java.util.concurrent.CountDownLatch;
diff --git a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaProducer.java b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
similarity index 94%
rename from apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaProducer.java
rename to spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
index 8707ce800d..f8642a99a5 100644
--- a/apache-kafka-3/src/main/java/com/baeldung/apachekafka3/groupId/MyKafkaProducer.java
+++ b/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
@@ -1,4 +1,4 @@
-package com.baeldung.apachekafka3.groupId;
+package com.baeldung.spring.kafka.groupId;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
diff --git a/apache-kafka-3/src/test/java/com/baeldung/apachekafka3/groupId/MainLiveTest.java b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
similarity index 92%
rename from apache-kafka-3/src/test/java/com/baeldung/apachekafka3/groupId/MainLiveTest.java
rename to spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
index e10e41838a..fb767f1f10 100644
--- a/apache-kafka-3/src/test/java/com/baeldung/apachekafka3/groupId/MainLiveTest.java
+++ b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.apachekafka3.groupId;
+package com.baeldung.spring.kafka.groupId;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.containsString;
@@ -15,7 +15,7 @@ import org.springframework.kafka.test.context.EmbeddedKafka;
import org.springframework.test.annotation.DirtiesContext;
@SpringBootTest(classes = Main.class)
-@ComponentScan(basePackages = "com.baeldung.apachekafka3.groupId")
+@ComponentScan(basePackages = "com.baeldung.spring.kafka.groupId")
@DirtiesContext
@EmbeddedKafka(partitions = 4, topics = { "${kafka.topic.name:test-topic}" }, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
public class MainLiveTest {
From e7be980d347458d2a13c98fc999eeccac73359ce Mon Sep 17 00:00:00 2001
From: s9m33r
Date: Fri, 2 Feb 2024 01:23:09 +0530
Subject: [PATCH 09/16] BAEL-7351 running Embedded Kafka on a separate port for
groupId tests
---
.../java/com/baeldung/spring/kafka/groupId/MainLiveTest.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
index fb767f1f10..dad1dbbf5d 100644
--- a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
+++ b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
@@ -17,7 +17,7 @@ import org.springframework.test.annotation.DirtiesContext;
@SpringBootTest(classes = Main.class)
@ComponentScan(basePackages = "com.baeldung.spring.kafka.groupId")
@DirtiesContext
-@EmbeddedKafka(partitions = 4, topics = { "${kafka.topic.name:test-topic}" }, brokerProperties = { "listeners=PLAINTEXT://localhost:9092", "port=9092" })
+@EmbeddedKafka(partitions = 4, topics = { "${kafka.topic.name:test-topic}" }, brokerProperties = { "listeners=PLAINTEXT://localhost:8000", "port=8000" })
public class MainLiveTest {
@Autowired
From 95379f73cc089105c9e097986a1af4c52c1d75d3 Mon Sep 17 00:00:00 2001
From: s9m33r
Date: Sun, 4 Feb 2024 11:38:52 +0530
Subject: [PATCH 10/16] BAEL-7351 removed new lines
---
.../java/com/baeldung/spring/kafka/groupId/MainLiveTest.java | 2 --
1 file changed, 2 deletions(-)
diff --git a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
index dad1dbbf5d..338ed2855f 100644
--- a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
+++ b/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
@@ -33,9 +33,7 @@ public class MainLiveTest {
@Test
public void givenEmbeddedKafkaBroker_whenSendingWithSimpleProducer_thenMessageReceived() throws Exception {
String data = "Test 123...";
-
producer.send(data);
-
boolean messageConsumed = consumer.getLatch()
.await(10, TimeUnit.SECONDS);
assertTrue(messageConsumed);
From 45a8c4d66f95b1c303a83b8030d7d27d22a4d680 Mon Sep 17 00:00:00 2001
From: s9m33r
Date: Sun, 25 Feb 2024 14:55:06 +0530
Subject: [PATCH 11/16] revert unnecessary module re-ordering
---
pom.xml | 2 +-
.../java/com/baeldung/spring/kafka/groupId/KafkaConfig.java | 0
.../com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java | 0
.../src/main/java/com/baeldung/spring/kafka/groupId/Main.java | 0
.../java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java | 0
.../java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java | 0
.../java/com/baeldung/spring/kafka/groupId/MainLiveTest.java | 0
7 files changed, 1 insertion(+), 1 deletion(-)
rename {spring-kafka-2 => spring-kafka-3}/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java (100%)
rename {spring-kafka-2 => spring-kafka-3}/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java (100%)
rename {spring-kafka-2 => spring-kafka-3}/src/main/java/com/baeldung/spring/kafka/groupId/Main.java (100%)
rename {spring-kafka-2 => spring-kafka-3}/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java (100%)
rename {spring-kafka-2 => spring-kafka-3}/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java (100%)
rename {spring-kafka-2 => spring-kafka-3}/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java (100%)
diff --git a/pom.xml b/pom.xml
index 330035020f..030b8e1843 100644
--- a/pom.xml
+++ b/pom.xml
@@ -670,8 +670,8 @@
apache-httpclient-2
apache-httpclient4
apache-httpclient
- apache-kafka
apache-kafka-2
+ apache-kafka
apache-libraries-2
apache-libraries
apache-olingo
diff --git a/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
similarity index 100%
rename from spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
rename to spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaConfig.java
diff --git a/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
similarity index 100%
rename from spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
rename to spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/KafkaErrorHandler.java
diff --git a/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/Main.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
similarity index 100%
rename from spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
rename to spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/Main.java
diff --git a/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
similarity index 100%
rename from spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
rename to spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaConsumer.java
diff --git a/spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java b/spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
similarity index 100%
rename from spring-kafka-2/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
rename to spring-kafka-3/src/main/java/com/baeldung/spring/kafka/groupId/MyKafkaProducer.java
diff --git a/spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java b/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
similarity index 100%
rename from spring-kafka-2/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
rename to spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
From 7ade810d7697a53d9602f1b58dd06d0ae92f0fd0 Mon Sep 17 00:00:00 2001
From: s9m33r
Date: Sun, 25 Feb 2024 15:27:47 +0530
Subject: [PATCH 12/16] BAEL-7351 test configuration
---
.../java/com/baeldung/spring/kafka/groupId/MainLiveTest.java | 2 ++
.../src/test/resources/application-groupId.properties | 1 +
2 files changed, 3 insertions(+)
create mode 100644 spring-kafka-3/src/test/resources/application-groupId.properties
diff --git a/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java b/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
index 338ed2855f..2c48d25ca2 100644
--- a/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
+++ b/spring-kafka-3/src/test/java/com/baeldung/spring/kafka/groupId/MainLiveTest.java
@@ -13,8 +13,10 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.kafka.test.context.EmbeddedKafka;
import org.springframework.test.annotation.DirtiesContext;
+import org.springframework.test.context.ActiveProfiles;
@SpringBootTest(classes = Main.class)
+@ActiveProfiles("groupId")
@ComponentScan(basePackages = "com.baeldung.spring.kafka.groupId")
@DirtiesContext
@EmbeddedKafka(partitions = 4, topics = { "${kafka.topic.name:test-topic}" }, brokerProperties = { "listeners=PLAINTEXT://localhost:8000", "port=8000" })
diff --git a/spring-kafka-3/src/test/resources/application-groupId.properties b/spring-kafka-3/src/test/resources/application-groupId.properties
new file mode 100644
index 0000000000..648ae1b603
--- /dev/null
+++ b/spring-kafka-3/src/test/resources/application-groupId.properties
@@ -0,0 +1 @@
+spring.kafka.bootstrap-servers=localhost:8000
From 7b7d7756db6c5efa6ab22403dc7513ff726336ed Mon Sep 17 00:00:00 2001
From: anuragkumawat
Date: Sun, 25 Feb 2024 17:31:03 +0530
Subject: [PATCH 13/16] JAVA-31207 Upgrade
spring-cloud-modules/spring-cloud-gateway module to spring-boot-3 (#15915)
---
.../spring-cloud-gateway/pom.xml | 24 ++++++++-----------
.../GoldenCustomerRoutePredicateFactory.java | 2 +-
.../oauth/backend/web/QuoteApi.java | 2 +-
.../gatewayapp/CustomFiltersLiveTest.java | 2 +-
.../ScrubResponseGatewayFilterLiveTest.java | 2 +-
.../CustomPredicatesApplicationLiveTest.java | 2 +-
.../URLRewriteGatewayApplicationLiveTest.java | 2 +-
.../RedisWebFilterFactoriesLiveTest.java | 7 +++---
.../WebFilterFactoriesLiveTest.java | 2 +-
9 files changed, 20 insertions(+), 25 deletions(-)
diff --git a/spring-cloud-modules/spring-cloud-gateway/pom.xml b/spring-cloud-modules/spring-cloud-gateway/pom.xml
index 0287ab7588..5d0594a259 100644
--- a/spring-cloud-modules/spring-cloud-gateway/pom.xml
+++ b/spring-cloud-modules/spring-cloud-gateway/pom.xml
@@ -8,9 +8,10 @@
jar
- com.baeldung.spring.cloud
- spring-cloud-modules
- 1.0.0-SNAPSHOT
+ com.baeldung
+ parent-boot-3
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-3
@@ -29,13 +30,6 @@
pom
import
-
- org.springframework.boot
- spring-boot-dependencies
- ${spring-boot.version}
- pom
- import
-
@@ -67,8 +61,9 @@
${hibernate-validator.version}
- javax.validation
- validation-api
+ jakarta.validation
+ jakarta.validation-api
+ ${jakarta.validation-api.version}
org.springframework.boot
@@ -109,6 +104,7 @@
org.springframework.boot
spring-boot-maven-plugin
+ com.baeldung.springcloudgateway.introduction.IntroductionGatewayApplication
org.projectlombok
@@ -183,12 +179,12 @@
-
-
+ 2023.0.0
8.0.1.Final
0.7.2
9.19
+ 3.0.2
\ No newline at end of file
diff --git a/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/custompredicates/factories/GoldenCustomerRoutePredicateFactory.java b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/custompredicates/factories/GoldenCustomerRoutePredicateFactory.java
index cb5c3a0b50..cf4545fd50 100644
--- a/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/custompredicates/factories/GoldenCustomerRoutePredicateFactory.java
+++ b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/custompredicates/factories/GoldenCustomerRoutePredicateFactory.java
@@ -7,7 +7,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.function.Predicate;
-import javax.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotEmpty;
import org.springframework.cloud.gateway.handler.predicate.AbstractRoutePredicateFactory;
import org.springframework.http.HttpCookie;
diff --git a/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/oauth/backend/web/QuoteApi.java b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/oauth/backend/web/QuoteApi.java
index 6d3721166c..cf81b4a99e 100644
--- a/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/oauth/backend/web/QuoteApi.java
+++ b/spring-cloud-modules/spring-cloud-gateway/src/main/java/com/baeldung/springcloudgateway/oauth/backend/web/QuoteApi.java
@@ -1,6 +1,6 @@
package com.baeldung.springcloudgateway.oauth.backend.web;
-import javax.annotation.PostConstruct;
+import jakarta.annotation.PostConstruct;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
diff --git a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/customfilters/gatewayapp/CustomFiltersLiveTest.java b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/customfilters/gatewayapp/CustomFiltersLiveTest.java
index f49f8c68b6..a34f152a86 100644
--- a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/customfilters/gatewayapp/CustomFiltersLiveTest.java
+++ b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/customfilters/gatewayapp/CustomFiltersLiveTest.java
@@ -8,7 +8,7 @@ import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
-import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.web.reactive.server.WebTestClient;
import org.springframework.test.web.reactive.server.WebTestClient.ResponseSpec;
diff --git a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/customfilters/gatewayapp/filters/factories/ScrubResponseGatewayFilterLiveTest.java b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/customfilters/gatewayapp/filters/factories/ScrubResponseGatewayFilterLiveTest.java
index 8906af774e..e43d017267 100644
--- a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/customfilters/gatewayapp/filters/factories/ScrubResponseGatewayFilterLiveTest.java
+++ b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/customfilters/gatewayapp/filters/factories/ScrubResponseGatewayFilterLiveTest.java
@@ -14,7 +14,7 @@ import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.context.TestConfiguration;
-import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.cloud.gateway.filter.factory.SetPathGatewayFilterFactory;
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
diff --git a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/custompredicates/CustomPredicatesApplicationLiveTest.java b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/custompredicates/CustomPredicatesApplicationLiveTest.java
index d9988ceb5e..08082f7c15 100644
--- a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/custompredicates/CustomPredicatesApplicationLiveTest.java
+++ b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/custompredicates/CustomPredicatesApplicationLiveTest.java
@@ -14,7 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
-import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpStatus;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
diff --git a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/rewrite/URLRewriteGatewayApplicationLiveTest.java b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/rewrite/URLRewriteGatewayApplicationLiveTest.java
index 41fe37045c..fe9d20024b 100644
--- a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/rewrite/URLRewriteGatewayApplicationLiveTest.java
+++ b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/rewrite/URLRewriteGatewayApplicationLiveTest.java
@@ -13,7 +13,7 @@ import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
-import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.test.context.ActiveProfiles;
import org.springframework.test.context.DynamicPropertyRegistry;
import org.springframework.test.context.DynamicPropertySource;
diff --git a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/webfilters/RedisWebFilterFactoriesLiveTest.java b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/webfilters/RedisWebFilterFactoriesLiveTest.java
index a28eb68775..cf6302eb28 100644
--- a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/webfilters/RedisWebFilterFactoriesLiveTest.java
+++ b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/webfilters/RedisWebFilterFactoriesLiveTest.java
@@ -11,7 +11,7 @@ import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.context.TestConfiguration;
import org.springframework.boot.test.web.client.TestRestTemplate;
-import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.ResponseEntity;
import org.springframework.test.context.ActiveProfiles;
@@ -51,9 +51,8 @@ public class RedisWebFilterFactoriesLiveTest {
ResponseEntity r = restTemplate.getForEntity(url, String.class);
// assertThat(response.getStatusCode()).isEqualTo(HttpStatus.OK);
- LOGGER.info("Received: status->{}, reason->{}, remaining->{}",
- r.getStatusCodeValue(), r.getStatusCode().getReasonPhrase(),
- r.getHeaders().get("X-RateLimit-Remaining"));
+ LOGGER.info("Received: status->{}, remaining->{}",
+ r.getStatusCodeValue(), r.getHeaders().get("X-RateLimit-Remaining"));
}
@After
diff --git a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/webfilters/WebFilterFactoriesLiveTest.java b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/webfilters/WebFilterFactoriesLiveTest.java
index 67e00a42fc..0caf92c2e8 100644
--- a/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/webfilters/WebFilterFactoriesLiveTest.java
+++ b/spring-cloud-modules/spring-cloud-gateway/src/test/java/com/baeldung/springcloudgateway/webfilters/WebFilterFactoriesLiveTest.java
@@ -14,7 +14,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.context.SpringBootTest.WebEnvironment;
import org.springframework.boot.test.web.client.TestRestTemplate;
-import org.springframework.boot.web.server.LocalServerPort;
+import org.springframework.boot.test.web.server.LocalServerPort;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
From cb3b854caa2cfbb31ccfc64cb4ea141aea652e99 Mon Sep 17 00:00:00 2001
From: panos-kakos <102670093+panos-kakos@users.noreply.github.com>
Date: Sun, 25 Feb 2024 23:26:52 +0200
Subject: [PATCH 14/16] [JAVA-30180] Upgraded jackson library in main pom.xml
(#15847)
* [JAVA-30180] Upgraded jackson library in main pom.xml
* [JAVA-30180] Reverted jackson upgrade for apache-kafka
* [JAVA-30180]
---
core-java-modules/core-java-11-3/pom.xml | 1 -
core-java-modules/core-java-collections-list-5/pom.xml | 1 -
jackson-modules/jackson-polymorphic-deserialization/pom.xml | 1 -
jackson-simple/pom.xml | 6 +-----
persistence-modules/spring-boot-persistence-4/pom.xml | 2 --
persistence-modules/spring-data-elasticsearch/pom.xml | 1 -
pom.xml | 2 +-
testing-modules/instancio/pom.xml | 1 -
testing-modules/mocks-2/pom.xml | 1 -
9 files changed, 2 insertions(+), 14 deletions(-)
diff --git a/core-java-modules/core-java-11-3/pom.xml b/core-java-modules/core-java-11-3/pom.xml
index cacbc9089c..9d21958cff 100644
--- a/core-java-modules/core-java-11-3/pom.xml
+++ b/core-java-modules/core-java-11-3/pom.xml
@@ -45,7 +45,6 @@
11
11
- 2.16.0
2.10.1
diff --git a/core-java-modules/core-java-collections-list-5/pom.xml b/core-java-modules/core-java-collections-list-5/pom.xml
index d62263eb63..8fc5062ac0 100644
--- a/core-java-modules/core-java-collections-list-5/pom.xml
+++ b/core-java-modules/core-java-collections-list-5/pom.xml
@@ -60,7 +60,6 @@
1.21
2.10.1
- 2.16.0
20230618
\ No newline at end of file
diff --git a/jackson-modules/jackson-polymorphic-deserialization/pom.xml b/jackson-modules/jackson-polymorphic-deserialization/pom.xml
index cbf67e5013..f25268d6f8 100644
--- a/jackson-modules/jackson-polymorphic-deserialization/pom.xml
+++ b/jackson-modules/jackson-polymorphic-deserialization/pom.xml
@@ -36,7 +36,6 @@
- 2.16.0
0.9.11
diff --git a/jackson-simple/pom.xml b/jackson-simple/pom.xml
index 900c80a5e7..08395c85a4 100644
--- a/jackson-simple/pom.xml
+++ b/jackson-simple/pom.xml
@@ -30,9 +30,5 @@
-
-
- 2.16.0
-
-
+
\ No newline at end of file
diff --git a/persistence-modules/spring-boot-persistence-4/pom.xml b/persistence-modules/spring-boot-persistence-4/pom.xml
index acff937114..2521590f3c 100644
--- a/persistence-modules/spring-boot-persistence-4/pom.xml
+++ b/persistence-modules/spring-boot-persistence-4/pom.xml
@@ -55,7 +55,6 @@
com.fasterxml.jackson.core
jackson-databind
- ${jackson.version}
org.modelmapper
@@ -91,7 +90,6 @@
17
1.0.7
3.7.0
- 2.16.0
3.2.0
1.16.1
1.18.30
diff --git a/persistence-modules/spring-data-elasticsearch/pom.xml b/persistence-modules/spring-data-elasticsearch/pom.xml
index b8edae68d3..1eb627ce57 100644
--- a/persistence-modules/spring-data-elasticsearch/pom.xml
+++ b/persistence-modules/spring-data-elasticsearch/pom.xml
@@ -60,7 +60,6 @@
5.1.2
8.9.0
- 2.16.0
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 030b8e1843..a8e731c795 100644
--- a/pom.xml
+++ b/pom.xml
@@ -1192,7 +1192,7 @@
1.2
2.3.3
1.2
- 2.16.0
+ 2.16.1
1.5
1.9.2
5.9.2
diff --git a/testing-modules/instancio/pom.xml b/testing-modules/instancio/pom.xml
index 7687ce282d..2cc1a84748 100644
--- a/testing-modules/instancio/pom.xml
+++ b/testing-modules/instancio/pom.xml
@@ -52,7 +52,6 @@
2.9.0
- 2.14.1
5.9.2
diff --git a/testing-modules/mocks-2/pom.xml b/testing-modules/mocks-2/pom.xml
index 2ef1a03dff..9db598421e 100644
--- a/testing-modules/mocks-2/pom.xml
+++ b/testing-modules/mocks-2/pom.xml
@@ -33,7 +33,6 @@
1.6.0
- 2.16.0
5.3.25
From 40952ba2cc634c992635c5dc67c1edd822e05a56 Mon Sep 17 00:00:00 2001
From: Oscar Mauricio Forero Carrillo
Date: Sun, 25 Feb 2024 22:43:19 +0100
Subject: [PATCH 15/16] BAEL-7136: Remove spring-testing dependency on the
parent POM and fix the dependencies to fix the integration tests (#15940)
---
testing-modules/spring-testing/pom.xml | 94 +++++++++++++++----
.../java/com/baeldung/config/WebConfig.java | 2 +-
.../src/test/resources/logback-spring.xml | 19 ++++
3 files changed, 96 insertions(+), 19 deletions(-)
create mode 100644 testing-modules/spring-testing/src/test/resources/logback-spring.xml
diff --git a/testing-modules/spring-testing/pom.xml b/testing-modules/spring-testing/pom.xml
index c4c929b7aa..665ac305a0 100644
--- a/testing-modules/spring-testing/pom.xml
+++ b/testing-modules/spring-testing/pom.xml
@@ -3,18 +3,18 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
+ com.baeldung
spring-testing
0.1-SNAPSHOT
spring-testing
-
- com.baeldung
- parent-boot-2
- 0.0.1-SNAPSHOT
- ../../parent-boot-2
-
-
+
+ ch.qos.logback
+ logback-classic
+ 1.5.0
+ test
+
org.hamcrest
java-hamcrest
@@ -23,29 +23,66 @@
org.projectlombok
lombok
- ${lombok.version}
+ 1.18.30
provided
org.springframework.boot
spring-boot-starter
+ 3.2.2
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
-
org.springframework.boot
- spring-boot-starter-test
- test
+ spring-boot
+ 3.2.2
+
+
+ org.springframework.data
+ spring-data-jpa
+ 3.2.2
+
+
+ org.springframework.data
+ spring-data-commons
+ 3.2.2
+
+
+ org.springframework
+ spring-beans
+ ${spring.version}
org.springframework
spring-core
${spring.version}
+ compile
org.springframework
spring-context
${spring.version}
+
+ org.springframework
+ spring-expression
+ ${spring.version}
+
+
+ org.springframework
+ spring-test
+ ${spring.version}
+
+
+ org.springframework
+ spring-web
+ ${spring.version}
+
org.springframework
spring-webmvc
@@ -56,10 +93,6 @@
javax.persistence
${javax.persistence.version}
-
- org.springframework.data
- spring-data-jpa
-
org.awaitility
awaitility
@@ -67,9 +100,34 @@
test
- javax.servlet
- javax.servlet-api
- ${javax.servlet-api.version}
+ jakarta.servlet
+ jakarta.servlet-api
+ 6.0.0
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+ 3.2.2
+
+
+ org.springframework.boot
+ spring-boot-starter-logging
+
+
+
+
+ org.junit.jupiter
+ junit-jupiter
+ 5.9.2
+ test
+
+
+ org.junit.vintage
+ junit-vintage-engine
+ 5.9.2
+ test
diff --git a/testing-modules/spring-testing/src/main/java/com/baeldung/config/WebConfig.java b/testing-modules/spring-testing/src/main/java/com/baeldung/config/WebConfig.java
index eca0aed57f..3ccd8b94da 100644
--- a/testing-modules/spring-testing/src/main/java/com/baeldung/config/WebConfig.java
+++ b/testing-modules/spring-testing/src/main/java/com/baeldung/config/WebConfig.java
@@ -5,7 +5,7 @@ import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
-import javax.servlet.ServletContext;
+import jakarta.servlet.ServletContext;
@EnableWebMvc
@Configuration
diff --git a/testing-modules/spring-testing/src/test/resources/logback-spring.xml b/testing-modules/spring-testing/src/test/resources/logback-spring.xml
new file mode 100644
index 0000000000..6636929220
--- /dev/null
+++ b/testing-modules/spring-testing/src/test/resources/logback-spring.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
From a3d63f75f60b2c1d888908651b56af619a8e0178 Mon Sep 17 00:00:00 2001
From: Amit Pandey
Date: Mon, 26 Feb 2024 03:16:11 +0530
Subject: [PATCH 16/16] Java 29291 :- Upgrade Spring Security LDAP to Spring
Boot 3 (#15901)
* JAVA-29291 :- Upgrade to Boot 3
* JAVA-29291 :- Upgrade to Boot 3
* JAVA-29291 :- Upgrade to Boot 3
* JAVA-29291 :- Upgrade to Boot 3
---
.../spring-security-ldap/pom.xml | 10 +-
.../com/baeldung/SampleLDAPApplication.java | 3 -
.../com/baeldung/config/SecurityConfig.java | 27 ++-
.../server/core/avltree/ArrayMarshaller.java | 172 ++++++++++++++++++
4 files changed, 192 insertions(+), 20 deletions(-)
create mode 100644 spring-security-modules/spring-security-ldap/src/main/java/org/apache/directory/server/core/avltree/ArrayMarshaller.java
diff --git a/spring-security-modules/spring-security-ldap/pom.xml b/spring-security-modules/spring-security-ldap/pom.xml
index 9f4f3b4106..0da7fc27c5 100644
--- a/spring-security-modules/spring-security-ldap/pom.xml
+++ b/spring-security-modules/spring-security-ldap/pom.xml
@@ -10,8 +10,9 @@
com.baeldung
- spring-security-modules
+ parent-boot-3
0.0.1-SNAPSHOT
+ ../../parent-boot-3
@@ -64,6 +65,11 @@
+
+ com.unboundid
+ unboundid-ldapsdk
+ ${unboundid-ldapsdk.version}
+
@@ -78,6 +84,8 @@
1.5.5
+ com.baeldung.SampleLDAPApplication
+ 4.0.10
\ No newline at end of file
diff --git a/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/SampleLDAPApplication.java b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/SampleLDAPApplication.java
index 2d619cccfa..af1dd350a8 100644
--- a/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/SampleLDAPApplication.java
+++ b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/SampleLDAPApplication.java
@@ -3,9 +3,6 @@ package com.baeldung;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
-import org.springframework.context.annotation.Bean;
-import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
-import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
/**
* Main Application Class - uses Spring Boot. Just run this as a normal Java
diff --git a/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/config/SecurityConfig.java b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/config/SecurityConfig.java
index 78e4dff29c..b76b1d945b 100644
--- a/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/config/SecurityConfig.java
+++ b/spring-security-modules/spring-security-ldap/src/main/java/com/baeldung/config/SecurityConfig.java
@@ -6,7 +6,7 @@ import org.springframework.ldap.core.support.BaseLdapPathContextSource;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.ldap.LdapBindAuthenticationManagerFactory;
-import org.springframework.security.ldap.server.ApacheDSContainer;
+import org.springframework.security.ldap.server.UnboundIdContainer;
import org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import org.springframework.security.web.SecurityFilterChain;
@@ -19,8 +19,8 @@ import org.springframework.security.web.SecurityFilterChain;
public class SecurityConfig {
@Bean
- ApacheDSContainer ldapContainer() throws Exception {
- return new ApacheDSContainer("dc=baeldung,dc=com", "classpath:users.ldif");
+ UnboundIdContainer ldapContainer() throws Exception {
+ return new UnboundIdContainer("dc=baeldung,dc=com", "classpath:users.ldif");
}
@Bean
@@ -41,18 +41,13 @@ public class SecurityConfig {
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
- http.authorizeRequests()
- .antMatchers("/", "/home", "/css/**")
- .permitAll()
- .anyRequest()
- .authenticated()
- .and()
- .formLogin()
- .loginPage("/login")
- .permitAll()
- .and()
- .logout()
- .logoutSuccessUrl("/");
- return http.build();
+ return http.authorizeHttpRequests(auth -> auth
+ .requestMatchers("/", "/home", "/css/**")
+ .permitAll()
+ .anyRequest()
+ .authenticated())
+ .formLogin(httpSecurityFormLoginConfigurer ->
+ httpSecurityFormLoginConfigurer.loginPage("/login").permitAll())
+ .logout(logout -> logout.logoutSuccessUrl("/")).build();
}
}
diff --git a/spring-security-modules/spring-security-ldap/src/main/java/org/apache/directory/server/core/avltree/ArrayMarshaller.java b/spring-security-modules/spring-security-ldap/src/main/java/org/apache/directory/server/core/avltree/ArrayMarshaller.java
new file mode 100644
index 0000000000..78c1e69ee7
--- /dev/null
+++ b/spring-security-modules/spring-security-ldap/src/main/java/org/apache/directory/server/core/avltree/ArrayMarshaller.java
@@ -0,0 +1,172 @@
+/*
+ * Copyright 2002-2021 the original author or authors.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * https://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.directory.server.core.avltree;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.IOException;
+import java.util.Comparator;
+import org.apache.directory.shared.ldap.util.StringTools;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Class to serialize the Array data.
+ *
+ * @author Apache Directory Project
+ * @version $Rev$, $Date$
+ */
+@SuppressWarnings("unchecked")
+public class ArrayMarshaller implements Marshaller> {
+
+ /** static logger */
+ private static final Logger LOG = LoggerFactory.getLogger(ArrayMarshaller.class);
+
+ /** used for serialized form of an empty AvlTree */
+ private static final byte[] EMPTY_TREE = new byte[1];
+
+ /** marshaller to be used for marshalling the keys */
+ private Marshaller keyMarshaller;
+
+ /** key Comparator for the AvlTree */
+ private Comparator comparator;
+
+ /**
+ * Creates a new instance of AvlTreeMarshaller with a custom key Marshaller.
+ * @param comparator Comparator to be used for key comparision
+ * @param keyMarshaller marshaller for keys
+ */
+ public ArrayMarshaller(Comparator comparator, Marshaller keyMarshaller) {
+ this.comparator = comparator;
+ this.keyMarshaller = keyMarshaller;
+ }
+
+ /**
+ * Creates a new instance of AvlTreeMarshaller with the default key Marshaller which
+ * uses Java Serialization.
+ * @param comparator Comparator to be used for key comparision
+ */
+ public ArrayMarshaller(Comparator comparator) {
+ this.comparator = comparator;
+ this.keyMarshaller = (Marshaller) DefaultMarshaller.INSTANCE;
+ }
+
+ /**
+ * Marshals the given tree to bytes
+ * @param tree the tree to be marshalled
+ */
+ public byte[] serialize(ArrayTree tree) {
+ if ((tree == null) || (tree.size() == 0)) {
+ return EMPTY_TREE;
+ }
+
+ ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
+ DataOutputStream out = new DataOutputStream(byteStream);
+ byte[] data = null;
+
+ try {
+ out.writeByte(0); // represents the start of an Array byte stream
+ out.writeInt(tree.size());
+
+ for (int position = 0; position < tree.size(); position++) {
+ E value = tree.get(position);
+ byte[] bytes = this.keyMarshaller.serialize(value);
+
+ // Write the key length
+ out.writeInt(bytes.length);
+
+ // Write the key if its length is not null
+ if (bytes.length != 0) {
+ out.write(bytes);
+ }
+ }
+
+ out.flush();
+ data = byteStream.toByteArray();
+
+ // Try to deserialize, just to see
+ try {
+ deserialize(data);
+ }
+ catch (NullPointerException npe) {
+ System.out.println("Bad serialization, tree : [" + StringTools.dumpBytes(data) + "]");
+ throw npe;
+ }
+
+ out.close();
+ }
+ catch (IOException ex) {
+ ex.printStackTrace();
+ }
+
+ return data;
+ }
+
+ /**
+ * Creates an Array from given bytes of data.
+ * @param data byte array to be converted into an array
+ */
+ public ArrayTree deserialize(byte[] data) throws IOException {
+ try {
+ if ((data == null) || (data.length == 0)) {
+ throw new IOException("Null or empty data array is invalid.");
+ }
+
+ if ((data.length == 1) && (data[0] == 0)) {
+ E[] array = (E[]) new Object[] {};
+ ArrayTree tree = new ArrayTree(this.comparator, array);
+ return tree;
+ }
+
+ ByteArrayInputStream bin = new ByteArrayInputStream(data);
+ DataInputStream din = new DataInputStream(bin);
+
+ byte startByte = din.readByte();
+
+ if (startByte != 0) {
+ throw new IOException("wrong array serialized data format");
+ }
+
+ int size = din.readInt();
+ E[] nodes = (E[]) new Object[size];
+
+ for (int i = 0; i < size; i++) {
+ // Read the object's size
+ int dataSize = din.readInt();
+
+ if (dataSize != 0) {
+ byte[] bytes = new byte[dataSize];
+
+ din.read(bytes);
+ E key = this.keyMarshaller.deserialize(bytes);
+ nodes[i] = key;
+ }
+ }
+
+ ArrayTree arrayTree = new ArrayTree(this.comparator, nodes);
+
+ return arrayTree;
+ }
+ catch (NullPointerException npe) {
+ System.out.println("Bad tree : [" + StringTools.dumpBytes(data) + "]");
+ throw npe;
+ }
+ }
+
+}
\ No newline at end of file