You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by ni...@apache.org on 2017/12/26 10:32:59 UTC

[incubator-servicecomb-java-chassis] branch master updated: [JAV-590] add null pointer check in ClassUtils

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

ningjiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 7cf73d6  [JAV-590] add null pointer check in ClassUtils
7cf73d6 is described below

commit 7cf73d65ed1294ea8f3a13d4865843e4af6f7a9e
Author: yaohaishi <ya...@huawei.com>
AuthorDate: Tue Dec 26 16:36:14 2017 +0800

    [JAV-590] add null pointer check in ClassUtils
---
 .../swagger/generator/core/utils/ClassUtils.java   | 16 ++++----
 .../swagger/generator/core/TestClassUtils.java     | 44 ++++++++++++++++++++++
 2 files changed, 53 insertions(+), 7 deletions(-)

diff --git a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/utils/ClassUtils.java b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/utils/ClassUtils.java
index 6098ff1..d433c3e 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/utils/ClassUtils.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/utils/ClassUtils.java
@@ -133,13 +133,15 @@ public final class ClassUtils {
     ClassConfig classConfig = new ClassConfig();
     classConfig.setClassName(clsName);
 
-    for (Entry<String, Property> entry : properties.entrySet()) {
-      JavaType propertyJavaType =
-          ConverterMgr.findJavaType(classLoader,
-              packageName,
-              swagger,
-              entry.getValue());
-      classConfig.addField(entry.getKey(), propertyJavaType);
+    if (null != properties) {
+      for (Entry<String, Property> entry : properties.entrySet()) {
+        JavaType propertyJavaType =
+            ConverterMgr.findJavaType(classLoader,
+                packageName,
+                swagger,
+                entry.getValue());
+        classConfig.addField(entry.getKey(), propertyJavaType);
+      }
     }
 
     cls = JavassistUtils.createClass(classLoader, classConfig);
diff --git a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestClassUtils.java b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestClassUtils.java
index d78fa9f..567c5d1 100644
--- a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestClassUtils.java
+++ b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestClassUtils.java
@@ -17,23 +17,32 @@
 
 package io.servicecomb.swagger.generator.core;
 
+import static junit.framework.TestCase.fail;
 import static org.hamcrest.core.Is.is;
 
 import java.lang.reflect.Method;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import javax.ws.rs.Path;
 
 import org.junit.Assert;
 import org.junit.Test;
+import org.mockito.Mockito;
 
+import io.servicecomb.common.javassist.JavassistUtils;
 import io.servicecomb.swagger.generator.core.schema.User;
 import io.servicecomb.swagger.generator.core.unittest.UnitTestSwaggerUtils;
 import io.servicecomb.swagger.generator.core.utils.ClassUtils;
 import io.swagger.annotations.SwaggerDefinition;
+import io.swagger.models.Swagger;
+import javassist.CannotCompileException;
+import javassist.ClassPool;
+import javassist.CtClass;
+import mockit.Deencapsulation;
 
 @SwaggerDefinition
 public class TestClassUtils {
@@ -160,4 +169,39 @@ public class TestClassUtils {
     String result = ClassUtils.correctClassName("..a..a..");
     Assert.assertThat(result, is("_._.a._.a._._"));
   }
+
+  @Test
+  public void testGetOrCreateClass() {
+    String className = this.getClass().getCanonicalName();
+
+    Class<?> result = ClassUtils.getOrCreateClass(null, "", new Swagger(), null, className);
+
+    Assert.assertEquals(this.getClass(), result);
+  }
+
+  @Test
+  public void testGetOrCreateClassOnPropertyIsNull() {
+    ClassLoader classLoader = Mockito.mock(ClassLoader.class);
+    String className = this.getClass().getCanonicalName();
+    ClassPool classPool = Mockito.mock(ClassPool.class);
+    CtClass ctClass = Mockito.mock(CtClass.class);
+
+    Map<ClassLoader, ClassPool> classPoolMap = Deencapsulation.getField(JavassistUtils.class, "CLASSPOOLS");
+    classPoolMap.put(classLoader, classPool);
+
+    try {
+      Mockito.when(classLoader.loadClass(className)).thenReturn(null);
+    } catch (ClassNotFoundException e) {
+      fail("unexpected exception: " + e);
+    }
+    Mockito.when(classPool.getOrNull(className)).thenReturn(ctClass);
+    try {
+      Mockito.when(ctClass.toClass(classLoader, null)).thenReturn(this.getClass());
+    } catch (CannotCompileException e) {
+      fail("unexpected exception: " + e);
+    }
+
+    Class<?> result = ClassUtils.getOrCreateClass(classLoader, "", new Swagger(), null, className);
+    Assert.assertEquals(this.getClass(), result);
+  }
 }

-- 
To stop receiving notification emails like this one, please contact
['"commits@servicecomb.apache.org" <co...@servicecomb.apache.org>'].