From c5f8ea19802fb9387415bd58141051116c312327 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 18 Feb 2022 08:47:43 +0100 Subject: [PATCH 1/2] Prepare issue branch. --- pom.xml | 2 +- spring-data-mongodb-benchmarks/pom.xml | 2 +- spring-data-mongodb-distribution/pom.xml | 2 +- spring-data-mongodb/pom.xml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/pom.xml b/pom.xml index 0e9257f0f0..541bb290e4 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 3.4.0-GH-3968-SNAPSHOT pom Spring Data MongoDB diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index e2704a6753..9139fce950 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -7,7 +7,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 3.4.0-GH-3968-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index b75f8bf624..ead34082d0 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 3.4.0-GH-3968-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index ca96626cc9..2c4dd41eca 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 3.4.0-GH-3968-SNAPSHOT ../pom.xml From 879d4a64fe1352489ac0d7239ea02e6c167e2b79 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Fri, 18 Feb 2022 08:50:58 +0100 Subject: [PATCH 2/2] Serialize values for debug output safely in AbstractMongoEventListener. We now make sure that codec configuration will not cause an exception when debug logging is turned on. --- .../mapping/event/AbstractMongoEventListener.java | 15 ++++++++------- .../AbstractMongoEventListenerUnitTests.java | 13 ++++++++++++- .../src/test/resources/logback.xml | 1 + 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListener.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListener.java index 1a69f90e35..ed56860faa 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListener.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListener.java @@ -20,6 +20,7 @@ import org.springframework.context.ApplicationListener; import org.springframework.core.GenericTypeResolver; +import org.springframework.data.mongodb.core.query.SerializationUtils; /** * Base class to implement domain class specific {@link ApplicationListener}s. @@ -104,7 +105,7 @@ public void onApplicationEvent(MongoMappingEvent event) { public void onBeforeConvert(BeforeConvertEvent event) { if (LOG.isDebugEnabled()) { - LOG.debug(String.format("onBeforeConvert(%s)", event.getSource())); + LOG.debug(String.format("onBeforeConvert(%s)", SerializationUtils.serializeToJsonSafely(event.getSource()))); } } @@ -117,7 +118,7 @@ public void onBeforeConvert(BeforeConvertEvent event) { public void onBeforeSave(BeforeSaveEvent event) { if (LOG.isDebugEnabled()) { - LOG.debug(String.format("onBeforeSave(%s, %s)", event.getSource(), event.getDocument())); + LOG.debug(String.format("onBeforeSave(%s, %s)", SerializationUtils.serializeToJsonSafely(event.getSource()), SerializationUtils.serializeToJsonSafely(event.getDocument()))); } } @@ -130,7 +131,7 @@ public void onBeforeSave(BeforeSaveEvent event) { public void onAfterSave(AfterSaveEvent event) { if (LOG.isDebugEnabled()) { - LOG.debug(String.format("onAfterSave(%s, %s)", event.getSource(), event.getDocument())); + LOG.debug(String.format("onAfterSave(%s, %s)", SerializationUtils.serializeToJsonSafely(event.getSource()), SerializationUtils.serializeToJsonSafely(event.getDocument()))); } } @@ -143,7 +144,7 @@ public void onAfterSave(AfterSaveEvent event) { public void onAfterLoad(AfterLoadEvent event) { if (LOG.isDebugEnabled()) { - LOG.debug(String.format("onAfterLoad(%s)", event.getDocument())); + LOG.debug(String.format("onAfterLoad(%s)", SerializationUtils.serializeToJsonSafely(event.getDocument()))); } } @@ -156,7 +157,7 @@ public void onAfterLoad(AfterLoadEvent event) { public void onAfterConvert(AfterConvertEvent event) { if (LOG.isDebugEnabled()) { - LOG.debug(String.format("onAfterConvert(%s, %s)", event.getDocument(), event.getSource())); + LOG.debug(String.format("onAfterConvert(%s, %s)", SerializationUtils.serializeToJsonSafely(event.getDocument()), SerializationUtils.serializeToJsonSafely(event.getSource()))); } } @@ -169,7 +170,7 @@ public void onAfterConvert(AfterConvertEvent event) { public void onAfterDelete(AfterDeleteEvent event) { if (LOG.isDebugEnabled()) { - LOG.debug(String.format("onAfterDelete(%s)", event.getDocument())); + LOG.debug(String.format("onAfterDelete(%s)", SerializationUtils.serializeToJsonSafely(event.getDocument()))); } } @@ -182,7 +183,7 @@ public void onAfterDelete(AfterDeleteEvent event) { public void onBeforeDelete(BeforeDeleteEvent event) { if (LOG.isDebugEnabled()) { - LOG.debug(String.format("onBeforeDelete(%s)", event.getDocument())); + LOG.debug(String.format("onBeforeDelete(%s)", SerializationUtils.serializeToJsonSafely(event.getDocument()))); } } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListenerUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListenerUnitTests.java index f66592d6ee..eec825bffb 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListenerUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AbstractMongoEventListenerUnitTests.java @@ -17,15 +17,18 @@ import static org.assertj.core.api.Assertions.*; +import java.time.Instant; + import org.bson.Document; import org.junit.jupiter.api.Test; - import org.springframework.context.support.AbstractApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.data.mongodb.core.mapping.Account; import org.springframework.data.mongodb.repository.Contact; import org.springframework.data.mongodb.repository.Person; +import com.mongodb.BasicDBObject; + /** * Unit tests for {@link AbstractMongoEventListener}. * @@ -154,6 +157,14 @@ public void donInvokePersonCallbackForUntypedEvent() { assertThat(listener.invokedOnBeforeDelete).isFalse(); } + @Test // GH-3968 + public void debugLogShouldNotFailMongoDBCodecError() { + + MongoMappingEvent event = new BeforeConvertEvent<>(new BasicDBObject("date", Instant.now()), "collection-1"); + UntypedEventListener listener = new UntypedEventListener(); + listener.onApplicationEvent(event); + } + class SamplePersonEventListener extends AbstractMongoEventListener { boolean invokedOnBeforeConvert; diff --git a/spring-data-mongodb/src/test/resources/logback.xml b/spring-data-mongodb/src/test/resources/logback.xml index a36841c97c..215d3ffc88 100644 --- a/spring-data-mongodb/src/test/resources/logback.xml +++ b/spring-data-mongodb/src/test/resources/logback.xml @@ -12,6 +12,7 @@ --> +