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/23 08:26:20 UTC

[incubator-servicecomb-java-chassis] 02/04: JAV-582 springmvc responseEntity switch to new mechanism

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

commit f6bc728b34ca3537fdf29579e253a9d236128e46
Author: wujimin <wu...@huawei.com>
AuthorDate: Thu Dec 21 11:21:57 2017 +0800

    JAV-582 springmvc responseEntity switch to new mechanism
---
 .../AbstractOneGenericResponseProcessor.java}      |  8 +--
 .../TestAbstractOneGenericResponseProcessor.java   | 61 ++++++++++++++++++++++
 .../SpringmvcSwaggerGeneratorContext.java          |  9 ----
 .../response/ResponseEntityProcessor.java          | 21 ++------
 ...mb.swagger.generator.core.ResponseTypeProcessor | 18 +++++++
 .../springmvc/TestResponseEntityProcessor.java     | 32 ++++++++++++
 6 files changed, 121 insertions(+), 28 deletions(-)

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-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/AbstractOneGenericResponseProcessor.java
similarity index 88%
copy from swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/processor/response/ResponseEntityProcessor.java
copy to swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/AbstractOneGenericResponseProcessor.java
index 888bece..9dadaa4 100644
--- a/swagger/swagger-generator/generator-springmvc/src/main/java/io/servicecomb/swagger/generator/springmvc/processor/response/ResponseEntityProcessor.java
+++ b/swagger/swagger-generator/generator-core/src/main/java/io/servicecomb/swagger/generator/core/processor/response/AbstractOneGenericResponseProcessor.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package io.servicecomb.swagger.generator.springmvc.processor.response;
+package io.servicecomb.swagger.generator.core.processor.response;
 
 import java.lang.reflect.ParameterizedType;
 import java.lang.reflect.Type;
@@ -25,8 +25,10 @@ import io.servicecomb.swagger.generator.core.utils.ParamUtils;
 import io.swagger.converter.ModelConverters;
 import io.swagger.models.properties.Property;
 
-public class ResponseEntityProcessor implements ResponseTypeProcessor {
-
+// eg:
+// ResponseEntiry<T>
+// CompletableFurture<T>
+public abstract class AbstractOneGenericResponseProcessor implements ResponseTypeProcessor {
   @Override
   public Property process(OperationGenerator operationGenerator) {
     ParameterizedType type =
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 0000000..5826bd0
--- /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-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 b9503ed..a7a9fa1 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 @@ package io.servicecomb.swagger.generator.springmvc;
 
 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.RequestMa
 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 @@ public class SpringmvcSwaggerGeneratorContext extends RestSwaggerGeneratorContex
   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 888bece..9f528ae 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 0000000..7936eea
--- /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 0000000..6eef82f
--- /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());
+  }
+}

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