Improve allowNullValue handling when a null value is provided
This commit improves `AbstractValueAdaptingCache` to throw a dedicated exception if `allowNullValues` is `false` and a `null` value is provided anyway. This avoid a lower-level exception from the cache library that will miss some context. Issue: SPR-15173
This commit is contained in:
@@ -102,14 +102,7 @@ public class CaffeineCacheManagerTests {
|
||||
assertEquals("value1", cache1x.get("key1").get());
|
||||
cache1x.put("key2", 2);
|
||||
assertEquals(2, cache1x.get("key2").get());
|
||||
try {
|
||||
cache1x.put("key3", null);
|
||||
fail("Should have thrown NullPointerException");
|
||||
}
|
||||
catch (NullPointerException ex) {
|
||||
// expected
|
||||
}
|
||||
|
||||
|
||||
cm.setAllowNullValues(true);
|
||||
Cache cache1y = cm.getCache("c1");
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -20,7 +20,7 @@ import com.github.benmanes.caffeine.cache.Caffeine;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import org.springframework.cache.AbstractCacheTests;
|
||||
import org.springframework.cache.AbstractValueAdaptingCacheTests;
|
||||
import org.springframework.cache.Cache;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
@@ -29,21 +29,31 @@ import static org.junit.Assert.*;
|
||||
* @author Ben Manes
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
public class CaffeineCacheTests extends AbstractCacheTests<CaffeineCache> {
|
||||
public class CaffeineCacheTests extends AbstractValueAdaptingCacheTests<CaffeineCache> {
|
||||
|
||||
private com.github.benmanes.caffeine.cache.Cache<Object, Object> nativeCache;
|
||||
|
||||
private CaffeineCache cache;
|
||||
|
||||
private CaffeineCache cacheNoNull;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
nativeCache = Caffeine.newBuilder().build();
|
||||
cache = new CaffeineCache(CACHE_NAME, nativeCache);
|
||||
com.github.benmanes.caffeine.cache.Cache<Object, Object> nativeCacheNoNull
|
||||
= Caffeine.newBuilder().build();
|
||||
cacheNoNull = new CaffeineCache(CACHE_NAME_NO_NULL, nativeCacheNoNull, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CaffeineCache getCache() {
|
||||
return cache;
|
||||
return getCache(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected CaffeineCache getCache(boolean allowNull) {
|
||||
return allowNull ? this.cache : this.cacheNoNull;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -101,14 +101,7 @@ public class GuavaCacheManagerTests {
|
||||
assertEquals("value1", cache1x.get("key1").get());
|
||||
cache1x.put("key2", 2);
|
||||
assertEquals(2, cache1x.get("key2").get());
|
||||
try {
|
||||
cache1x.put("key3", null);
|
||||
fail("Should have thrown NullPointerException");
|
||||
}
|
||||
catch (NullPointerException ex) {
|
||||
// expected
|
||||
}
|
||||
|
||||
|
||||
cm.setAllowNullValues(true);
|
||||
Cache cache1y = cm.getCache("c1");
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2002-2015 the original author or authors.
|
||||
* Copyright 2002-2017 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -25,12 +25,12 @@ import javax.cache.spi.CachingProvider;
|
||||
import org.junit.After;
|
||||
import org.junit.Before;
|
||||
|
||||
import org.springframework.cache.AbstractCacheTests;
|
||||
import org.springframework.cache.AbstractValueAdaptingCacheTests;
|
||||
|
||||
/**
|
||||
* @author Stephane Nicoll
|
||||
*/
|
||||
public class JCacheEhCacheApiTests extends AbstractCacheTests<JCacheCache> {
|
||||
public class JCacheEhCacheApiTests extends AbstractValueAdaptingCacheTests<JCacheCache> {
|
||||
|
||||
private CacheManager cacheManager;
|
||||
|
||||
@@ -38,13 +38,19 @@ public class JCacheEhCacheApiTests extends AbstractCacheTests<JCacheCache> {
|
||||
|
||||
private JCacheCache cache;
|
||||
|
||||
private JCacheCache cacheNoNull;
|
||||
|
||||
|
||||
@Before
|
||||
public void setup() {
|
||||
this.cacheManager = getCachingProvider().getCacheManager();
|
||||
this.cacheManager.createCache(CACHE_NAME, new MutableConfiguration<>());
|
||||
this.cacheManager.createCache(CACHE_NAME_NO_NULL, new MutableConfiguration<>());
|
||||
this.nativeCache = this.cacheManager.getCache(CACHE_NAME);
|
||||
this.cache = new JCacheCache(this.nativeCache);
|
||||
Cache<Object, Object> nativeCacheNoNull =
|
||||
this.cacheManager.getCache(CACHE_NAME_NO_NULL);
|
||||
this.cacheNoNull = new JCacheCache(nativeCacheNoNull, false);
|
||||
}
|
||||
|
||||
protected CachingProvider getCachingProvider() {
|
||||
@@ -58,10 +64,14 @@ public class JCacheEhCacheApiTests extends AbstractCacheTests<JCacheCache> {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
protected JCacheCache getCache() {
|
||||
return this.cache;
|
||||
return getCache(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected JCacheCache getCache(boolean allowNull) {
|
||||
return allowNull ? this.cache : this.cacheNoNull;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user