From 5b10c053de794ad26ad080799a003bd2e067ab40 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler?= Date: Fri, 20 Aug 2021 15:13:42 +0200 Subject: [PATCH] FIX: NPE when accessing mutableNext in EBI --- .../io/ebean/bean/EntityBeanIntercept.java | 3 ++- .../org/tests/json/TestJsonNullValues.java | 24 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/ebean-api/src/main/java/io/ebean/bean/EntityBeanIntercept.java b/ebean-api/src/main/java/io/ebean/bean/EntityBeanIntercept.java index 527860200..9924bf4f7 100644 --- a/ebean-api/src/main/java/io/ebean/bean/EntityBeanIntercept.java +++ b/ebean-api/src/main/java/io/ebean/bean/EntityBeanIntercept.java @@ -1232,7 +1232,8 @@ public final class EntityBeanIntercept implements Serializable { if (mutableNext == null) { return null; } - return mutableNext[propertyIndex].content(); + final MutableValueNext next = mutableNext[propertyIndex]; + return next != null ? next.content() : null; } } diff --git a/ebean-core/src/test/java/org/tests/json/TestJsonNullValues.java b/ebean-core/src/test/java/org/tests/json/TestJsonNullValues.java index 533116fd1..7ae086e8d 100644 --- a/ebean-core/src/test/java/org/tests/json/TestJsonNullValues.java +++ b/ebean-core/src/test/java/org/tests/json/TestJsonNullValues.java @@ -5,6 +5,8 @@ import io.ebean.DB; import org.junit.Test; import org.tests.model.json.EBasicOldValue; +import java.util.ArrayList; + import static org.assertj.core.api.Assertions.assertThat; public class TestJsonNullValues extends BaseTestCase { @@ -39,4 +41,26 @@ public class TestJsonNullValues extends BaseTestCase { assertThat(bean.getIntMap()).isEmpty(); } + @Test + public void testSetOneToNullAnotherToEmpty() { + EBasicOldValue bean = new EBasicOldValue(); + DB.save(bean); + bean = DB.find(EBasicOldValue.class, bean.getId()); + + bean.setStringList(null); + bean.setStringSet(null); + + DB.save(bean); + bean = DB.find(EBasicOldValue.class, bean.getId()); + + bean.setStringList(new ArrayList<>()); + bean.setStringSet(null); + + DB.save(bean); + bean = DB.find(EBasicOldValue.class, bean.getId()); + + assertThat(bean.getStringList()).isEmpty(); + assertThat(bean.getStringSet()).isEmpty(); + } + }