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>'].