This is an automated email from the ASF dual-hosted git repository.

iluo pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-dubbo.git


The following commit(s) were added to refs/heads/master by this push:
     new a6d8f1c      #1597: CacheFilter,when value is null,it will throw 
NPE(if use ehcache for jcache),why not check null here (#1828)
a6d8f1c is described below

commit a6d8f1c5b20d30b3fe3206332d56bc6de1baa282
Author: Ian Luo <[email protected]>
AuthorDate: Tue May 22 15:25:35 2018 +0800

        #1597: CacheFilter,when value is null,it will throw NPE(if use ehcache 
for jcache),why not check null here (#1828)
---
 .../alibaba/dubbo/cache/filter/CacheFilter.java    |  2 +-
 .../dubbo/cache/filter/CacheFilterTest.java        | 33 ++++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletion(-)

diff --git 
a/dubbo-filter/dubbo-filter-cache/src/main/java/com/alibaba/dubbo/cache/filter/CacheFilter.java
 
b/dubbo-filter/dubbo-filter-cache/src/main/java/com/alibaba/dubbo/cache/filter/CacheFilter.java
index 5e064e4..e034cbb 100644
--- 
a/dubbo-filter/dubbo-filter-cache/src/main/java/com/alibaba/dubbo/cache/filter/CacheFilter.java
+++ 
b/dubbo-filter/dubbo-filter-cache/src/main/java/com/alibaba/dubbo/cache/filter/CacheFilter.java
@@ -52,7 +52,7 @@ public class CacheFilter implements Filter {
                     return new RpcResult(value);
                 }
                 Result result = invoker.invoke(invocation);
-                if (!result.hasException()) {
+                if (!result.hasException() && result.getValue() != null) {
                     cache.put(key, result.getValue());
                 }
                 return result;
diff --git 
a/dubbo-filter/dubbo-filter-cache/src/test/java/com/alibaba/dubbo/cache/filter/CacheFilterTest.java
 
b/dubbo-filter/dubbo-filter-cache/src/test/java/com/alibaba/dubbo/cache/filter/CacheFilterTest.java
index 0fa6d69..760605c 100644
--- 
a/dubbo-filter/dubbo-filter-cache/src/test/java/com/alibaba/dubbo/cache/filter/CacheFilterTest.java
+++ 
b/dubbo-filter/dubbo-filter-cache/src/test/java/com/alibaba/dubbo/cache/filter/CacheFilterTest.java
@@ -44,6 +44,8 @@ public class CacheFilterTest {
     private Invoker<?> invoker = mock(Invoker.class);
     private Invoker<?> invoker1 = mock(Invoker.class);
     private Invoker<?> invoker2 = mock(Invoker.class);
+    private Invoker<?> invoker3 = mock(Invoker.class);
+    private Invoker<?> invoker4 = mock(Invoker.class);
     private String cacheType;
     private CacheFactory cacheFactory;
 
@@ -77,6 +79,11 @@ public class CacheFilterTest {
         given(invoker2.invoke(invocation)).willReturn(new RpcResult("value2"));
         given(invoker2.getUrl()).willReturn(url);
 
+        given(invoker3.invoke(invocation)).willReturn(new RpcResult(new 
RuntimeException()));
+        given(invoker3.getUrl()).willReturn(url);
+
+        given(invoker4.invoke(invocation)).willReturn(new RpcResult());
+        given(invoker4.getUrl()).willReturn(url);
     }
 
     @Test
@@ -89,6 +96,7 @@ public class CacheFilterTest {
         RpcResult rpcResult1 = (RpcResult) cacheFilter.invoke(invoker1, 
invocation);
         RpcResult rpcResult2 = (RpcResult) cacheFilter.invoke(invoker2, 
invocation);
         Assert.assertEquals(rpcResult1.getValue(), rpcResult2.getValue());
+        Assert.assertEquals(rpcResult1.getValue(), "value");
     }
 
     @Test
@@ -101,5 +109,30 @@ public class CacheFilterTest {
         RpcResult rpcResult1 = (RpcResult) cacheFilter.invoke(invoker1, 
invocation);
         RpcResult rpcResult2 = (RpcResult) cacheFilter.invoke(invoker2, 
invocation);
         Assert.assertEquals(rpcResult1.getValue(), rpcResult2.getValue());
+        Assert.assertEquals(rpcResult1.getValue(), "value");
+    }
+
+    @Test
+    public void testException() {
+        invocation.setMethodName("echo1");
+        invocation.setParameterTypes(new Class<?>[]{String.class});
+        invocation.setArguments(new Object[]{"arg2"});
+
+        cacheFilter.invoke(invoker3, invocation);
+        RpcResult rpcResult = (RpcResult) cacheFilter.invoke(invoker2, 
invocation);
+        Assert.assertEquals(rpcResult.getValue(), "value2");
+    }
+
+    @Test
+    public void testNull() {
+        invocation.setMethodName("echo1");
+        invocation.setParameterTypes(new Class<?>[]{String.class});
+        invocation.setArguments(new Object[]{"arg3"});
+
+        cacheFilter.invoke(invoker4, invocation);
+        RpcResult rpcResult1 = (RpcResult) cacheFilter.invoke(invoker1, 
invocation);
+        RpcResult rpcResult2 = (RpcResult) cacheFilter.invoke(invoker2, 
invocation);
+        Assert.assertEquals(rpcResult1.getValue(), "value1");
+        Assert.assertEquals(rpcResult2.getValue(), "value1");
     }
 }

-- 
To stop receiving notification emails like this one, please contact
[email protected].

Reply via email to