From ceb7c8a07794df0a485dda333a3e19ecca2f7e79 Mon Sep 17 00:00:00 2001 From: reta Date: Wed, 26 Mar 2014 13:46:17 +0100 Subject: [PATCH] DATAREDIS-289 - Avoid NPE in DefaultValueOperations#append() in case of pipelining or/and multi/exec calls. We now return null if DefaultValueOperations#append() was applied to a non-existing list and thus returned null. Previously a NPE was thrown in case of pipelining or/and multi/exec calls. Original pull request: #48. --- .../data/redis/core/DefaultValueOperations.java | 3 ++- .../springframework/data/redis/core/RedisTemplateTests.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/core/DefaultValueOperations.java b/src/main/java/org/springframework/data/redis/core/DefaultValueOperations.java index 1e148b426..8490e1534 100644 --- a/src/main/java/org/springframework/data/redis/core/DefaultValueOperations.java +++ b/src/main/java/org/springframework/data/redis/core/DefaultValueOperations.java @@ -83,7 +83,8 @@ class DefaultValueOperations extends AbstractOperations implements V return execute(new RedisCallback() { public Integer doInRedis(RedisConnection connection) { - return connection.append(rawKey, rawString).intValue(); + final Long result = connection.append(rawKey, rawString); + return ( result != null ) ? result.intValue() : null; } }, true); } diff --git a/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java b/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java index 57f4e8b73..37c37eb46 100644 --- a/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java +++ b/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java @@ -221,6 +221,7 @@ public class RedisTemplateTests { operations.multi(); operations.opsForValue().set("foo", "5"); operations.opsForValue().get("foo"); + operations.opsForValue().append("foo1", "5"); operations.opsForList().leftPush("foolist", "6"); operations.opsForList().range("foolist", 0l, 1l); operations.opsForSet().add("fooset", "7"); @@ -242,7 +243,7 @@ public class RedisTemplateTests { Map map = new LinkedHashMap(); map.put(10l, 11l); assertThat(results, - isEqual(Arrays.asList(new Object[] { 5l, 1l, list, 1l, longSet, true, tupleSet, zSet, true, map }))); + isEqual(Arrays.asList(new Object[] { 5l, 1L, 1l, list, 1l, longSet, true, tupleSet, zSet, true, map }))); } @Test