From 520d35b1d65724b1f241a7524d98fe20cb012cdd Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Sun, 25 Jun 2017 14:44:13 +1200 Subject: [PATCH] #963 - NullPointerException on no version provided (when setVersion(null) is used) --- .../generatedproperty/GeneratedCounter.java | 3 ++ .../GeneratedCounterInteger.java | 7 ++-- .../GeneratedCounterLong.java | 7 ++-- .../GeneratedCounterLongTest.java | 35 +++++++++++++++++++ 4 files changed, 48 insertions(+), 4 deletions(-) create mode 100644 src/test/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLongTest.java diff --git a/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java b/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java index 10ccdfd0f..8ca83156a 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java +++ b/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java @@ -29,6 +29,9 @@ public class GeneratedCounter implements GeneratedProperty { @Override public Object getUpdateValue(BeanProperty prop, EntityBean bean, long now) { Number currVal = (Number) prop.getValue(bean); + if (currVal == null) { + throw new IllegalStateException("version property has been set to null on bean: " + bean); + } Integer nextVal = currVal.intValue() + 1; return BasicTypeConverter.convert(nextVal, numberType); } diff --git a/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterInteger.java b/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterInteger.java index 01c33b649..88cd3a866 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterInteger.java +++ b/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterInteger.java @@ -25,8 +25,11 @@ public class GeneratedCounterInteger implements GeneratedProperty { */ @Override public Object getUpdateValue(BeanProperty prop, EntityBean bean, long now) { - Integer i = (Integer) prop.getValue(bean); - return i + 1; + Integer val = (Integer) prop.getValue(bean); + if (val == null) { + throw new IllegalStateException("version property has been set to null on bean: " + bean); + } + return val + 1; } /** diff --git a/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLong.java b/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLong.java index 830b9af15..310242465 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLong.java +++ b/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLong.java @@ -25,8 +25,11 @@ public class GeneratedCounterLong implements GeneratedProperty { */ @Override public Object getUpdateValue(BeanProperty prop, EntityBean bean, long now) { - Long i = (Long) prop.getValue(bean); - return i + 1; + Long val = (Long) prop.getValue(bean); + if (val == null) { + throw new IllegalStateException("version property has been set to null on bean: " + bean); + } + return val + 1; } /** diff --git a/src/test/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLongTest.java b/src/test/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLongTest.java new file mode 100644 index 000000000..c1d76e037 --- /dev/null +++ b/src/test/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLongTest.java @@ -0,0 +1,35 @@ +package io.ebeaninternal.server.deploy.generatedproperty; + +import io.ebean.BaseTestCase; +import io.ebean.bean.EntityBean; +import io.ebeaninternal.server.deploy.BeanProperty; +import org.junit.Test; +import org.tests.model.basic.Customer; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class GeneratedCounterLongTest extends BaseTestCase { + + private GeneratedCounterLong counter = new GeneratedCounterLong(); + + private BeanProperty version = getBeanDescriptor(Customer.class).getBeanProperty("version"); + + @Test(expected = IllegalStateException.class) + public void when_null_expect_IllegalStateException() throws Exception { + + Customer customer = new Customer(); + counter.getUpdateValue(version, (EntityBean)customer, System.currentTimeMillis()); + } + + @Test + public void when_set_expect_incremented() throws Exception { + + Customer customer = new Customer(); + customer.setVersion(7L); + Object value = counter.getUpdateValue(version, (EntityBean) customer, System.currentTimeMillis()); + + assertThat(value).isEqualTo(8L); + } + +}