diff --git a/apache-geode-extensions/src/main/java/org/springframework/geode/pdx/PdxInstanceWrapper.java b/apache-geode-extensions/src/main/java/org/springframework/geode/pdx/PdxInstanceWrapper.java index 3ab006ba..7158330c 100644 --- a/apache-geode-extensions/src/main/java/org/springframework/geode/pdx/PdxInstanceWrapper.java +++ b/apache-geode-extensions/src/main/java/org/springframework/geode/pdx/PdxInstanceWrapper.java @@ -118,7 +118,7 @@ public class PdxInstanceWrapper implements PdxInstance, Sendable { * never {@literal null}. * @see org.apache.geode.pdx.PdxInstance */ - protected PdxInstance getDelegate() { + public PdxInstance getDelegate() { return this.delegate; } diff --git a/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverter.java b/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverter.java index 61b5b4ec..bdefcbba 100644 --- a/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverter.java +++ b/spring-geode/src/main/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverter.java @@ -19,6 +19,7 @@ import org.apache.geode.pdx.JSONFormatter; import org.apache.geode.pdx.PdxInstance; import org.springframework.geode.data.json.converter.JsonToPdxConverter; +import org.springframework.geode.pdx.PdxInstanceWrapper; import org.springframework.lang.NonNull; /** @@ -42,14 +43,41 @@ public class JSONFormatterJsonToPdxConverter implements JsonToPdxConverter { } /** - * Converts the given JSON to {@link PdxInstance PDX}. + * Converts the given {@link String JSON} to {@link PdxInstance PDX}. * * @param json {@link String} containing JSON to convert to PDX; must not be {@literal null}. * @return JSON for the given {@link PdxInstance PDX}. + * @see org.springframework.geode.pdx.PdxInstanceWrapper#from(PdxInstance) + * @see org.apache.geode.pdx.JSONFormatter#fromJSON(String) + * @see org.apache.geode.pdx.PdxInstance + * @see #jsonFormatterFromJson(String) + * @see #wrap(PdxInstance) + */ + protected @NonNull PdxInstance convertJsonToPdx(@NonNull String json) { + return wrap(jsonFormatterFromJson(json)); + } + + /** + * Converts {@link String JSON} into {@link PdxInstance PDX} using {@link JSONFormatter#fromJSON(String)}. + * + * @param json {@link String JSON} to convert to {@link PdxInstance PDX}; must not be {@literal null}. + * @return {@link PdxInstance PDX} generated from the given, required {@link String JSON}; never {@literal null}. * @see org.apache.geode.pdx.JSONFormatter#fromJSON(String) * @see org.apache.geode.pdx.PdxInstance */ - protected @NonNull PdxInstance convertJsonToPdx(@NonNull String json) { + protected @NonNull PdxInstance jsonFormatterFromJson(@NonNull String json) { return JSONFormatter.fromJSON(json); } + + /** + * Wraps the given {@link PdxInstance} in a new instance of {@link PdxInstanceWrapper}. + * + * @param pdxInstance {@link PdxInstance} to wrap. + * @return a new instance of {@link PdxInstanceWrapper} wrapping the given {@link PdxInstance}. + * @see org.springframework.geode.pdx.PdxInstanceWrapper + * @see org.apache.geode.pdx.PdxInstance + */ + protected @NonNull PdxInstanceWrapper wrap(@NonNull PdxInstance pdxInstance) { + return PdxInstanceWrapper.from(pdxInstance); + } } diff --git a/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverterUnitTests.java b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverterUnitTests.java index 5304b330..cf1084d5 100644 --- a/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverterUnitTests.java +++ b/spring-geode/src/test/java/org/springframework/geode/data/json/converter/support/JSONFormatterJsonToPdxConverterUnitTests.java @@ -27,6 +27,8 @@ import org.junit.Test; import org.apache.geode.pdx.PdxInstance; +import org.springframework.geode.pdx.PdxInstanceWrapper; + /** * Unit Tests for {@link JSONFormatterJsonToPdxConverter}. * @@ -35,6 +37,7 @@ import org.apache.geode.pdx.PdxInstance; * @see org.mockito.Mockito * @see org.apache.geode.pdx.PdxInstance * @see org.springframework.geode.data.json.converter.support.JSONFormatterJsonToPdxConverter + * @see org.springframework.geode.pdx.PdxInstanceWrapper * @since 1.3.0 */ public class JSONFormatterJsonToPdxConverterUnitTests { @@ -48,10 +51,15 @@ public class JSONFormatterJsonToPdxConverterUnitTests { JSONFormatterJsonToPdxConverter converter = spy(new JSONFormatterJsonToPdxConverter()); - doReturn(mockPdxInstance).when(converter).convertJsonToPdx(json); + doReturn(mockPdxInstance).when(converter).jsonFormatterFromJson(json); - assertThat(converter.convert(json)).isEqualTo(mockPdxInstance); + PdxInstance pdx = converter.convert(json); + + assertThat(pdx).isInstanceOf(PdxInstanceWrapper.class); + assertThat(((PdxInstanceWrapper) pdx).getDelegate()).isEqualTo(mockPdxInstance); verify(converter, times(1)).convertJsonToPdx(eq(json)); + verify(converter, times(1)).jsonFormatterFromJson(eq(json)); + verify(converter, times(1)).wrap(eq(mockPdxInstance)); } }