You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@servicecomb.apache.org by GitBox <gi...@apache.org> on 2017/12/22 02:54:27 UTC

[GitHub] WillemJiang closed pull request #455: [JAV-582] Contract from completablefuture

WillemJiang closed pull request #455: [JAV-582] Contract from completablefuture
URL: https://github.com/apache/incubator-servicecomb-java-chassis/pull/455
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/AbstractSwaggerGeneratorContext.java b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/AbstractSwaggerGeneratorContext.java
index e835bfad0..922624c29 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/AbstractSwaggerGeneratorContext.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/AbstractSwaggerGeneratorContext.java
@@ -140,7 +140,9 @@ protected void initDefaultParameterProcessor() {
   }
 
   protected void initResponseTypeProcessorMgr() {
-
+    SPIServiceUtils.getAllService(ResponseTypeProcessor.class).forEach(p -> {
+      responseTypeProcessorMgr.register(p.getResponseType(), p);
+    });
   }
 
   public void setDefaultParamProcessor(DefaultParameterProcessor defaultParamProcessor) {
diff --git a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/ResponseTypeProcessor.java b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/ResponseTypeProcessor.java
index 2537da0fe..bb0369ba6 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/ResponseTypeProcessor.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/ResponseTypeProcessor.java
@@ -19,6 +19,8 @@
 import io.swagger.models.properties.Property;
 
 public interface ResponseTypeProcessor {
+  Class<?> getResponseType();
+
   // void???????processor????
   Property process(OperationGenerator operationGenerator);
 }
diff --git a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/AbstractOneGenericResponseProcessor.java b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/AbstractOneGenericResponseProcessor.java
new file mode 100644
index 000000000..9dadaa420
--- /dev/null
+++ b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/AbstractOneGenericResponseProcessor.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.servicecomb.swagger.generator.core.processor.response;
+
+import java.lang.reflect.ParameterizedType;
+import java.lang.reflect.Type;
+
+import io.servicecomb.swagger.generator.core.OperationGenerator;
+import io.servicecomb.swagger.generator.core.ResponseTypeProcessor;
+import io.servicecomb.swagger.generator.core.utils.ParamUtils;
+import io.swagger.converter.ModelConverters;
+import io.swagger.models.properties.Property;
+
+// eg:
+// ResponseEntiry<T>
+// CompletableFurture<T>
+public abstract class AbstractOneGenericResponseProcessor implements ResponseTypeProcessor {
+  @Override
+  public Property process(OperationGenerator operationGenerator) {
+    ParameterizedType type =
+        (ParameterizedType) operationGenerator.getProviderMethod().getGenericReturnType();
+
+    Type responseType = type.getActualTypeArguments()[0];
+    ParamUtils.addDefinitions(operationGenerator.getSwagger(), responseType);
+    return ModelConverters.getInstance().readAsProperty(responseType);
+  }
+}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/CompletableFutureProcessor.java b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/CompletableFutureProcessor.java
new file mode 100644
index 000000000..af424a1de
--- /dev/null
+++ b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/CompletableFutureProcessor.java
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2017 Huawei Technologies Co., Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package io.servicecomb.swagger.generator.core.processor.response;
+
+import java.util.concurrent.CompletableFuture;
+
+public class CompletableFutureProcessor extends AbstractOneGenericResponseProcessor {
+  @Override
+  public Class<?> getResponseType() {
+    return CompletableFuture.class;
+  }
+}
diff --git a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/DefaultResponseTypeProcessor.java b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/DefaultResponseTypeProcessor.java
index 6dba022bf..cac3e0c6e 100644
--- a/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/DefaultResponseTypeProcessor.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/DefaultResponseTypeProcessor.java
@@ -25,6 +25,11 @@
 import io.swagger.models.properties.Property;
 
 public class DefaultResponseTypeProcessor implements ResponseTypeProcessor {
+  @Override
+  public Class<?> getResponseType() {
+    // not care for this.
+    return null;
+  }
 
   @Override
   public Property process(OperationGenerator operationGenerator) {
diff --git a/swagger/swagger-generator/generator-core/src/main/resources/META-INF/services/io.servicecomb.swagger.generator.core.ResponseTypeProcessor b/swagger/swagger-generator/generator-core/src/main/resources/META-INF/services/io.servicecomb.swagger.generator.core.ResponseTypeProcessor
new file mode 100644
index 000000000..7f9c7b8c8
--- /dev/null
+++ b/swagger/swagger-generator/generator-core/src/main/resources/META-INF/services/io.servicecomb.swagger.generator.core.ResponseTypeProcessor
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+io.servicecomb.swagger.generator.core.processor.response.CompletableFutureProcessor
\ No newline at end of file
diff --git a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestSwaggerUtils.java b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestSwaggerUtils.java
index 1b523ad13..94aa03965 100644
--- a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestSwaggerUtils.java
+++ b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/TestSwaggerUtils.java
@@ -212,6 +212,11 @@ public void testApiOperation() {
     testSchemaMethod("apiOperation", "testApiOperation");
   }
 
+  @Test
+  public void testCompletableFuture() {
+    testSchemaMethod("completableFuture", "testCompletableFuture");
+  }
+
   @Test
   public void testDate() {
     SwaggerGenerator generator = testSchemaMethod("date", "testDate");
diff --git a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/processor/response/TestAbstractOneGenericResponseProcessor.java b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/processor/response/TestAbstractOneGenericResponseProcessor.java
new file mode 100644
index 000000000..5826bd0a3
--- /dev/null
+++ b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/processor/response/TestAbstractOneGenericResponseProcessor.java
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.servicecomb.swagger.generator.core.processor.response;
+
+import java.lang.reflect.Method;
+
+import javax.xml.ws.Holder;
+
+import org.hamcrest.Matchers;
+import org.junit.Assert;
+import org.junit.Test;
+
+import io.servicecomb.foundation.common.utils.ReflectUtils;
+import io.servicecomb.swagger.generator.core.OperationGenerator;
+import io.servicecomb.swagger.generator.core.ResponseTypeProcessor;
+import io.swagger.models.properties.Property;
+import io.swagger.models.properties.StringProperty;
+import mockit.Expectations;
+import mockit.Mocked;
+
+public class TestAbstractOneGenericResponseProcessor {
+  static ResponseTypeProcessor processor = new AbstractOneGenericResponseProcessor() {
+    @SuppressWarnings("unused")
+    public Holder<String> generic() {
+      return null;
+    }
+
+    @Override
+    public Class<?> getResponseType() {
+      return null;
+    }
+  };
+
+  @Test
+  public void process(@Mocked OperationGenerator operationGenerator) {
+    Method providerMethod = ReflectUtils.findMethod(processor.getClass(), "generic");
+    new Expectations() {
+      {
+        operationGenerator.getProviderMethod();
+        result = providerMethod;
+      }
+    };
+    Property property = processor.process(operationGenerator);
+
+    Assert.assertThat(property, Matchers.instanceOf(StringProperty.class));
+  }
+}
diff --git a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/processor/response/TestCompletableFutureProcessor.java b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/processor/response/TestCompletableFutureProcessor.java
new file mode 100644
index 000000000..294b8d5ae
--- /dev/null
+++ b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/processor/response/TestCompletableFutureProcessor.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.servicecomb.swagger.generator.core.processor.response;
+
+import java.util.concurrent.CompletableFuture;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TestCompletableFutureProcessor {
+  CompletableFutureProcessor processor = new CompletableFutureProcessor();
+
+  @Test
+  public void getResponseType() {
+    Assert.assertEquals(CompletableFuture.class, processor.getResponseType());
+  }
+}
diff --git a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/schema/Schema.java b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/schema/Schema.java
index 95d09d6aa..914c0de0e 100644
--- a/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/schema/Schema.java
+++ b/swagger/swagger-generator/generator-core/src/test/java/io/servicecomb/swagger/generator/core/schema/Schema.java
@@ -22,6 +22,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.concurrent.CompletableFuture;
 
 import io.swagger.annotations.ApiOperation;
 import io.swagger.annotations.ApiResponse;
@@ -156,6 +157,10 @@ public void testMapList(Map<String, List<User>> value) {
 
   }
 
+  public CompletableFuture<String> testCompletableFuture() {
+    return null;
+  }
+
   public void testAllType(AllType obj) {
   }
 
diff --git a/swagger/swagger-generator/generator-core/src/test/resources/schemas/allMethod.yaml b/swagger/swagger-generator/generator-core/src/test/resources/schemas/allMethod.yaml
index 3514fa8eb..0ab203d13 100644
--- a/swagger/swagger-generator/generator-core/src/test/resources/schemas/allMethod.yaml
+++ b/swagger/swagger-generator/generator-core/src/test/resources/schemas/allMethod.yaml
@@ -209,6 +209,15 @@ paths:
       responses:
         200:
           description: "response of 200"
+  /testCompletableFuture:
+    post:
+      operationId: "testCompletableFuture"
+      parameters: []
+      responses:
+        200:
+          description: "response of 200"
+          schema:
+            type: "string"
   /testDouble:
     post:
       operationId: "testDouble"
diff --git a/swagger/swagger-generator/generator-core/src/test/resources/schemas/completableFuture.yaml b/swagger/swagger-generator/generator-core/src/test/resources/schemas/completableFuture.yaml
new file mode 100644
index 000000000..3168264dc
--- /dev/null
+++ b/swagger/swagger-generator/generator-core/src/test/resources/schemas/completableFuture.yaml
@@ -0,0 +1,21 @@
+---
+swagger: "2.0"
+info:
+  version: "1.0.0"
+  title: "swagger definition for io.servicecomb.swagger.generator.core.schema.Schema"
+  x-java-interface: "gen.cse.ms.ut.SchemaIntf"
+basePath: "/Schema"
+consumes:
+- "application/json"
+produces:
+- "application/json"
+paths:
+  /testCompletableFuture:
+    post:
+      operationId: "testCompletableFuture"
+      parameters: []
+      responses:
+        200:
+          description: "response of 200"
+          schema:
+            type: "string"
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/JaxrsSwaggerGeneratorContext.java b/swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/JaxrsSwaggerGeneratorContext.java
index dcbf1bcb7..3ab4321c2 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/JaxrsSwaggerGeneratorContext.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/JaxrsSwaggerGeneratorContext.java
@@ -33,7 +33,6 @@
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.QueryParam;
-import javax.ws.rs.core.Response;
 
 import io.servicecomb.swagger.generator.core.utils.ClassUtils;
 import io.servicecomb.swagger.generator.jaxrs.processor.annotation.ConsumesAnnotationProcessor;
@@ -47,7 +46,6 @@
 import io.servicecomb.swagger.generator.jaxrs.processor.annotation.ProducesAnnotationProcessor;
 import io.servicecomb.swagger.generator.jaxrs.processor.annotation.QueryParamAnnotationProcessor;
 import io.servicecomb.swagger.generator.jaxrs.processor.parameter.JaxrsDefaultParameterProcessor;
-import io.servicecomb.swagger.generator.jaxrs.processor.response.ResponseProcessor;
 import io.servicecomb.swagger.generator.rest.RestSwaggerGeneratorContext;
 
 public class JaxrsSwaggerGeneratorContext extends RestSwaggerGeneratorContext {
@@ -113,11 +111,4 @@ protected void initParameterAnnotationMgr() {
     parameterAnnotationMgr.register(HeaderParam.class, new HeaderParamAnnotationProcessor());
     parameterAnnotationMgr.register(QueryParam.class, new QueryParamAnnotationProcessor());
   }
-
-  @Override
-  protected void initResponseTypeProcessorMgr() {
-    super.initResponseTypeProcessorMgr();
-
-    responseTypeProcessorMgr.register(Response.class, new ResponseProcessor());
-  }
 }
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/processor/response/ResponseProcessor.java b/swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/processor/response/JaxrsResponseProcessor.java
similarity index 91%
rename from swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/processor/response/ResponseProcessor.java
rename to swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/processor/response/JaxrsResponseProcessor.java
index 59e9b7034..12366c164 100644
--- a/swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/processor/response/ResponseProcessor.java
+++ b/swagger/swagger-generator/generator-jaxrs/src/main/java/io/servicecomb/swagger/generator/jaxrs/processor/response/JaxrsResponseProcessor.java
@@ -20,6 +20,7 @@
 import java.util.List;
 
 import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
 
 import io.servicecomb.swagger.generator.core.OperationGenerator;
 import io.servicecomb.swagger.generator.core.ResponseTypeProcessor;
@@ -27,7 +28,11 @@
 import io.swagger.converter.ModelConverters;
 import io.swagger.models.properties.Property;
 
-public class ResponseProcessor implements ResponseTypeProcessor {
+public class JaxrsResponseProcessor implements ResponseTypeProcessor {
+  @Override
+  public Class<?> getResponseType() {
+    return Response.class;
+  }
 
   @Override
   public Property process(OperationGenerator operationGenerator) {
diff --git a/swagger/swagger-generator/generator-jaxrs/src/main/resources/META-INF/services/io.servicecomb.swagger.generator.core.ResponseTypeProcessor b/swagger/swagger-generator/generator-jaxrs/src/main/resources/META-INF/services/io.servicecomb.swagger.generator.core.ResponseTypeProcessor
new file mode 100644
index 000000000..eb2f38ba2
--- /dev/null
+++ b/swagger/swagger-generator/generator-jaxrs/src/main/resources/META-INF/services/io.servicecomb.swagger.generator.core.ResponseTypeProcessor
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+io.servicecomb.swagger.generator.jaxrs.processor.response.JaxrsResponseProcessor
\ No newline at end of file
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/SpringmvcSwaggerGeneratorContext.java b/swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/SpringmvcSwaggerGeneratorContext.java
index b9503edba..a7a9fa113 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/SpringmvcSwaggerGeneratorContext.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/SpringmvcSwaggerGeneratorContext.java
@@ -19,7 +19,6 @@
 
 import java.lang.reflect.Method;
 
-import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.CookieValue;
 import org.springframework.web.bind.annotation.DeleteMapping;
 import org.springframework.web.bind.annotation.GetMapping;
@@ -51,7 +50,6 @@
 import io.servicecomb.swagger.generator.springmvc.processor.annotation.RequestParamAnnotationProcessor;
 import io.servicecomb.swagger.generator.springmvc.processor.annotation.RequestPartAnnotationProcessor;
 import io.servicecomb.swagger.generator.springmvc.processor.parameter.SpringmvcDefaultParameterProcessor;
-import io.servicecomb.swagger.generator.springmvc.processor.response.ResponseEntityProcessor;
 
 public class SpringmvcSwaggerGeneratorContext extends RestSwaggerGeneratorContext {
   private static final int ORDER = 1000;
@@ -117,11 +115,4 @@ protected void initParameterTypeProcessorMgr() {
   protected void initDefaultParameterProcessor() {
     defaultParameterProcessor = new SpringmvcDefaultParameterProcessor();
   }
-
-  @Override
-  protected void initResponseTypeProcessorMgr() {
-    super.initResponseTypeProcessorMgr();
-
-    responseTypeProcessorMgr.register(ResponseEntity.class, new ResponseEntityProcessor());
-  }
 }
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/processor/response/ResponseEntityProcessor.java b/swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/processor/response/ResponseEntityProcessor.java
index 888becea3..9f528aec0 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/processor/response/ResponseEntityProcessor.java
+++ b/swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/processor/response/ResponseEntityProcessor.java
@@ -16,24 +16,13 @@
  */
 package io.servicecomb.swagger.generator.springmvc.processor.response;
 
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
+import org.springframework.http.ResponseEntity;
 
-import io.servicecomb.swagger.generator.core.OperationGenerator;
-import io.servicecomb.swagger.generator.core.ResponseTypeProcessor;
-import io.servicecomb.swagger.generator.core.utils.ParamUtils;
-import io.swagger.converter.ModelConverters;
-import io.swagger.models.properties.Property;
-
-public class ResponseEntityProcessor implements ResponseTypeProcessor {
+import io.servicecomb.swagger.generator.core.processor.response.AbstractOneGenericResponseProcessor;
 
+public class ResponseEntityProcessor extends AbstractOneGenericResponseProcessor {
   @Override
-  public Property process(OperationGenerator operationGenerator) {
-    ParameterizedType type =
-        (ParameterizedType) operationGenerator.getProviderMethod().getGenericReturnType();
-
-    Type responseType = type.getActualTypeArguments()[0];
-    ParamUtils.addDefinitions(operationGenerator.getSwagger(), responseType);
-    return ModelConverters.getInstance().readAsProperty(responseType);
+  public Class<?> getResponseType() {
+    return ResponseEntity.class;
   }
 }
diff --git a/swagger/swagger-generator/generator-springmvc/src/main/resources/META-INF/services/io.servicecomb.swagger.generator.core.ResponseTypeProcessor b/swagger/swagger-generator/generator-springmvc/src/main/resources/META-INF/services/io.servicecomb.swagger.generator.core.ResponseTypeProcessor
new file mode 100644
index 000000000..7936eea42
--- /dev/null
+++ b/swagger/swagger-generator/generator-springmvc/src/main/resources/META-INF/services/io.servicecomb.swagger.generator.core.ResponseTypeProcessor
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+io.servicecomb.swagger.generator.springmvc.processor.response.ResponseEntityProcessor
\ No newline at end of file
diff --git a/swagger/swagger-generator/generator-springmvc/src/test/java/io/servicecomb/swagger/generator/springmvc/TestResponseEntityProcessor.java b/swagger/swagger-generator/generator-springmvc/src/test/java/io/servicecomb/swagger/generator/springmvc/TestResponseEntityProcessor.java
new file mode 100644
index 000000000..6eef82f27
--- /dev/null
+++ b/swagger/swagger-generator/generator-springmvc/src/test/java/io/servicecomb/swagger/generator/springmvc/TestResponseEntityProcessor.java
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package io.servicecomb.swagger.generator.springmvc;
+
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.http.ResponseEntity;
+
+import io.servicecomb.swagger.generator.springmvc.processor.response.ResponseEntityProcessor;
+
+public class TestResponseEntityProcessor {
+  ResponseEntityProcessor processor = new ResponseEntityProcessor();
+
+  @Test
+  public void getResponseType() {
+    Assert.assertEquals(ResponseEntity.class, processor.getResponseType());
+  }
+}


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services