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

xxyu pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/main by this push:
     new 8ed6d5d  fix
8ed6d5d is described below

commit 8ed6d5d69a4b589d183bb679f511f8230daa09bf
Author: yaqian.zhang <598593...@qq.com>
AuthorDate: Wed Nov 10 10:21:04 2021 +0800

    fix
---
 .../apache/kylin/rest/service/QueryService.java    | 26 +++++++++++++++++-----
 .../kylin/rest/service/QueryServiceTest.java       |  6 +++++
 2 files changed, 26 insertions(+), 6 deletions(-)

diff --git 
a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java 
b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
index fcf3be2..a8ba1f9 100644
--- a/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
+++ b/server-base/src/main/java/org/apache/kylin/rest/service/QueryService.java
@@ -1263,12 +1263,7 @@ public class QueryService extends BasicService {
             throws SQLException {
         boolean isNull = (null == param.getValue());
 
-        Class<?> clazz;
-        try {
-            clazz = Class.forName(param.getClassName());
-        } catch (ClassNotFoundException e) {
-            throw new InternalErrorException(e);
-        }
+        Class<?> clazz = getValidClass(param.getClassName());
 
         Rep rep = Rep.of(clazz);
 
@@ -1337,6 +1332,25 @@ public class QueryService extends BasicService {
         }
     }
 
+    public Class<?> getValidClass(String className) {
+        Class<?> clazz;
+        try {
+            List<String> classList = new ArrayList<>();
+            Rep.VALUE_MAP.keySet().forEach(key -> {
+                classList.add(key.getName());
+            });
+            if (classList.contains(className)) {
+                clazz = Class.forName(className);
+            } else {
+                clazz = Class.forName("java.lang.Object");
+            }
+            logger.debug("Class parameter for sql is: " + clazz.getName());
+        } catch (ClassNotFoundException e) {
+            throw new InternalErrorException(e);
+        }
+        return clazz;
+    }
+
     public void setCacheManager(CacheManager cacheManager) {
         this.cacheManager = cacheManager;
     }
diff --git 
a/server/src/test/java/org/apache/kylin/rest/service/QueryServiceTest.java 
b/server/src/test/java/org/apache/kylin/rest/service/QueryServiceTest.java
index acf9e19..e1b646c 100644
--- a/server/src/test/java/org/apache/kylin/rest/service/QueryServiceTest.java
+++ b/server/src/test/java/org/apache/kylin/rest/service/QueryServiceTest.java
@@ -120,4 +120,10 @@ public class QueryServiceTest extends ServiceTestBase {
             Assert.assertTrue(wrapper == null || wrapper.get() == null);
         }
     }
+
+    @Test
+    public void testClassName() throws ClassNotFoundException {
+        Assert.assertEquals(Class.forName("java.lang.Object"), 
queryService.getValidClass("java.io.DataInputStream"));
+        Assert.assertEquals(Class.forName("java.lang.String"), 
queryService.getValidClass("java.lang.String"));
+    }
 }

Reply via email to