From fa9b2e1ae6f76c9775249158ae5370fc509468b7 Mon Sep 17 00:00:00 2001 From: John Blum Date: Tue, 12 May 2020 22:01:22 -0700 Subject: [PATCH] Fix infinite recursion bug leading to a StackOverflowError. Renamed the convertObjectToJson(:Object) method in the JSONFormatterPdxToJsonConverter class to convertPojoToJson(:Object). Resolves gh-67. --- .../support/JSONFormatterPdxToJsonConverter.java | 10 +++++----- .../JSONFormatterPdxToJsonConverterUnitTests.java | 10 +++++----- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverter.java b/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverter.java index 1f398089..21993e55 100644 --- a/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverter.java +++ b/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverter.java @@ -62,7 +62,7 @@ public class JSONFormatterPdxToJsonConverter extends JacksonObjectToJsonConverte .filter(PdxInstance.class::isInstance) .map(PdxInstance.class::cast) .map(this::convertPdxToJson) - .orElseGet(() -> convertObjectToJson(source)); + .orElseGet(() -> convertPojoToJson(source)); } /** @@ -72,7 +72,7 @@ public class JSONFormatterPdxToJsonConverter extends JacksonObjectToJsonConverte * @return the JSON generated from the given {@link Object}. * @see JacksonObjectToJsonConverter#convert(Object) */ - protected @Nullable String convertObjectToJson(Object source) { + protected @Nullable String convertPojoToJson(Object source) { return super.convert(source); } @@ -86,8 +86,8 @@ public class JSONFormatterPdxToJsonConverter extends JacksonObjectToJsonConverte * @see #jsonFormatterToJson(PdxInstance) */ protected @NonNull String convertPdxToJson(@NonNull PdxInstance pdxInstance) { - //return JSONFormatter.toJSON(pdxInstance); - //return JSONFormatter.toJSON(decorate(pdxInstance)); + //return jsonFormatterToJson(pdxInstance); + //return jsonFormatterToJson(decorate(pdxInstance)); return decorate(pdxInstance, jsonFormatterToJson(pdxInstance)); } @@ -192,7 +192,7 @@ public class JSONFormatterPdxToJsonConverter extends JacksonObjectToJsonConverte catch (JsonProcessingException cause) { if (hasValidClassName(pdxInstance)) { - return convertObjectToJson(pdxInstance.getObject()); + return convertPojoToJson(pdxInstance.getObject()); } String message = String.format("Failed to parse JSON [%s]", json); diff --git a/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverterUnitTests.java b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverterUnitTests.java index cc3f7bf6..7161b6d2 100644 --- a/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverterUnitTests.java +++ b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterPdxToJsonConverterUnitTests.java @@ -74,11 +74,11 @@ public class JSONFormatterPdxToJsonConverterUnitTests { JSONFormatterPdxToJsonConverter converter = spy(new JSONFormatterPdxToJsonConverter()); - doReturn(json).when(converter).convertObjectToJson(eq(object)); + doReturn(json).when(converter).convertPojoToJson(eq(object)); assertThat(converter.convert(object)).isEqualTo(json); - verify(converter, times(1)).convertObjectToJson(eq(object)); + verify(converter, times(1)).convertPojoToJson(eq(object)); verify(converter, never()).convertPdxToJson(any()); } @@ -96,7 +96,7 @@ public class JSONFormatterPdxToJsonConverterUnitTests { assertThat(converter.convert(mockPdxInstance)).isEqualTo(json); verify(converter, times(1)).convertPdxToJson(eq(mockPdxInstance)); - verify(converter, never()).convertObjectToJson(any()); + verify(converter, never()).convertPojoToJson(any()); verifyNoInteractions(mockPdxInstance); } @@ -370,7 +370,7 @@ public class JSONFormatterPdxToJsonConverterUnitTests { doReturn(false).when(mockPdxInstance).hasField(anyString()); doReturn(mockObjectMapper).when(converter).newObjectMapper(eq(json)); doThrow(new JsonGenerationException("TEST", (JsonGenerator) null)).when(mockObjectMapper).readTree(eq(json)); - doReturn(json).when(converter).convertObjectToJson(eq(jonDoe)); + doReturn(json).when(converter).convertPojoToJson(eq(jonDoe)); assertThat(converter.decorate(mockPdxInstance, json)).isEqualTo(json); @@ -380,7 +380,7 @@ public class JSONFormatterPdxToJsonConverterUnitTests { verify(mockObjectMapper, times(1)).readTree(eq(json)); verify(mockPdxInstance, times(1)).getClassName(); verify(mockPdxInstance, times(1)).getObject(); - verify(converter, times(1)).convertObjectToJson(eq(jonDoe)); + verify(converter, times(1)).convertPojoToJson(eq(jonDoe)); verifyNoMoreInteractions(mockPdxInstance, mockObjectMapper); }