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

liubao 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 6dc11dd  [SCB-979] add reminder log on the selection of 
SwaggerGeneratorContext
6dc11dd is described below

commit 6dc11dd1000d11dae2f2b082ecc87fc12a13e3e5
Author: yaohaishi <[email protected]>
AuthorDate: Tue Oct 30 17:27:27 2018 +0800

    [SCB-979] add reminder log on the selection of SwaggerGeneratorContext
---
 .../core/CompositeSwaggerGeneratorContext.java     | 23 ++++++++++++++++------
 .../pojo/PojoSwaggerGeneratorContext.java          | 16 +++++++++++++++
 2 files changed, 33 insertions(+), 6 deletions(-)

diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/CompositeSwaggerGeneratorContext.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/CompositeSwaggerGeneratorContext.java
index ef39793..70adc13 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/CompositeSwaggerGeneratorContext.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/core/CompositeSwaggerGeneratorContext.java
@@ -18,16 +18,25 @@
 package org.apache.servicecomb.swagger.generator.core;
 
 import java.util.List;
+import java.util.Map;
 
+import org.apache.servicecomb.foundation.common.concurrent.ConcurrentHashMapEx;
 import org.apache.servicecomb.foundation.common.utils.SPIServiceUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.context.EmbeddedValueResolverAware;
 import org.springframework.stereotype.Component;
 import org.springframework.util.StringValueResolver;
 
 @Component
 public class CompositeSwaggerGeneratorContext implements 
EmbeddedValueResolverAware {
+
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(CompositeSwaggerGeneratorContext.class);
+
   private List<SwaggerGeneratorContext> contextList;
 
+  private Map<Class<?>, SwaggerGeneratorContext> 
producerClassSwaggerContextCacheMap = new ConcurrentHashMapEx<>();
+
   public CompositeSwaggerGeneratorContext() {
     contextList = 
SPIServiceUtils.getSortedService(SwaggerGeneratorContext.class);
   }
@@ -46,12 +55,14 @@ public class CompositeSwaggerGeneratorContext implements 
EmbeddedValueResolverAw
   }
 
   public SwaggerGeneratorContext selectContext(Class<?> cls) {
-    for (SwaggerGeneratorContext context : contextList) {
-      if (context.canProcess(cls)) {
-        return context;
+    return producerClassSwaggerContextCacheMap.computeIfAbsent(cls, 
producerClass -> {
+      for (SwaggerGeneratorContext context : contextList) {
+        if (context.canProcess(cls)) {
+          LOGGER.info("select [{}] for [{}] to generate schema.", 
context.getClass().getName(), cls.getName());
+          return context;
+        }
       }
-    }
-
-    throw new Error("impossible, must be bug.");
+      throw new Error("impossible, must be bug.");
+    });
   }
 }
diff --git 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoSwaggerGeneratorContext.java
 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoSwaggerGeneratorContext.java
index 816ad6c..eb8ecc8 100644
--- 
a/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoSwaggerGeneratorContext.java
+++ 
b/swagger/swagger-generator/generator-core/src/main/java/org/apache/servicecomb/swagger/generator/pojo/PojoSwaggerGeneratorContext.java
@@ -16,6 +16,7 @@
  */
 package org.apache.servicecomb.swagger.generator.pojo;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
@@ -31,11 +32,16 @@ import 
org.apache.servicecomb.swagger.generator.core.utils.ParamUtils;
 import 
org.apache.servicecomb.swagger.generator.pojo.converter.parameter.PendingBodyParameterConverter;
 import 
org.apache.servicecomb.swagger.generator.pojo.extend.parameter.PendingBodyParameter;
 import 
org.apache.servicecomb.swagger.generator.pojo.processor.parameter.PojoDefaultParameterProcessor;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 import io.swagger.models.parameters.BodyParameter;
 import io.swagger.models.parameters.Parameter;
 
 public class PojoSwaggerGeneratorContext extends 
AbstractSwaggerGeneratorContext {
+
+  private static final Logger LOGGER = 
LoggerFactory.getLogger(PojoSwaggerGeneratorContext.class);
+
   static {
     ConverterMgr.addConverter(PendingBodyParameter.class, new 
PendingBodyParameterConverter());
   }
@@ -47,6 +53,16 @@ public class PojoSwaggerGeneratorContext extends 
AbstractSwaggerGeneratorContext
 
   @Override
   public boolean canProcess(Class<?> cls) {
+    for (Annotation annotation : cls.getAnnotations()) {
+      // we check the annotations by class name to avoid importing extra 
dependencies in this module
+      if 
("javax.ws.rs.Path".equals(annotation.annotationType().getCanonicalName())
+          || "org.springframework.web.bind.annotation.RequestMapping"
+          .equals(annotation.annotationType().getCanonicalName())) {
+        LOGGER.info(
+            "There is @RequestMapping or @Path annotation on the REST 
interface class, but POJO swagger context is chosen. "
+                + "If this is unexpected, maybe you should check your 
dependency jar files.");
+      }
+    }
     return true;
   }
 

Reply via email to