You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicecomb.apache.org by li...@apache.org on 2020/11/19 06:49:43 UTC

[servicecomb-java-chassis] branch master updated: [SCB-2120]fix operation override when using schema interface (#2066)

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/servicecomb-java-chassis.git


The following commit(s) were added to refs/heads/master by this push:
     new 30c1653  [SCB-2120]fix operation override when using schema interface (#2066)
30c1653 is described below

commit 30c1653adcc51e6313a7be507e411d8d0b5e61a1
Author: bao liu <bi...@qq.com>
AuthorDate: Thu Nov 19 14:42:01 2020 +0800

    [SCB-2120]fix operation override when using schema interface (#2066)
---
 .../demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java |  4 ++++
 .../schema/deserializer/MessageReadSchema.java      | 14 ++++++++------
 .../swagger/engine/SwaggerEnvironment.java          | 21 ++++++++++++---------
 3 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java
index 6800bab..862db16 100644
--- a/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java
+++ b/demo/demo-jaxrs/jaxrs-server/src/main/java/org/apache/servicecomb/demo/jaxrs/server/SchemeInterfaceJaxrsImpl.java
@@ -31,6 +31,10 @@ public class SchemeInterfaceJaxrsImpl implements SchemeInterfaceJaxrs {
     return a - b;
   }
 
+  public int add(String a, String b) {
+    return Integer.valueOf(a) + Integer.valueOf(b);
+  }
+
   @Override
   public Page<String> interfaceModel(Page<String> model) {
     return model;
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/MessageReadSchema.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/MessageReadSchema.java
index 4cd66e9..b8d16cf 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/MessageReadSchema.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/schema/deserializer/MessageReadSchema.java
@@ -164,12 +164,14 @@ public class MessageReadSchema<T> implements SchemaEx<T> {
         n = input.readFieldNumber();
       }
     } catch (Throwable e) {
-      Field protoField = fieldSchema.getProtoField();
-      LOGGER.error("Failed to mergeFrom, field={}:{}, type={}",
-          protoField.getType().getCanonicalName(),
-          protoField.getName(),
-          protoField.getTypeName(),
-          e.getMessage());
+      if (fieldSchema != null) {
+        Field protoField = fieldSchema.getProtoField();
+        LOGGER.error("Failed to mergeFrom, field={}:{}, type={}",
+            protoField.getType().getCanonicalName(),
+            protoField.getName(),
+            protoField.getTypeName(),
+            e.getMessage());
+      }
       throw e;
     }
   }
diff --git a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerEnvironment.java b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerEnvironment.java
index 49618a0..d18b596 100644
--- a/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerEnvironment.java
+++ b/swagger/swagger-invocation/invocation-core/src/main/java/org/apache/servicecomb/swagger/engine/SwaggerEnvironment.java
@@ -104,7 +104,9 @@ public class SwaggerEnvironment {
   }
 
   public SwaggerProducer createProducer(Object producerInstance, Class<?> schemaInterface, Swagger swagger) {
-    swagger = checkAndGenerateSwagger(producerInstance, schemaInterface, swagger);
+    Class<?> producerCls = targetSwaggerClass(producerInstance, schemaInterface);
+
+    swagger = checkAndGenerateSwagger(producerCls, swagger);
 
     Map<Class<?>, ContextArgumentMapperFactory> contextFactories = SPIServiceUtils
         .getOrLoadSortedService(ProducerContextArgumentMapperFactory.class)
@@ -115,7 +117,6 @@ public class SwaggerEnvironment {
 
     SwaggerOperations swaggerOperations = new SwaggerOperations(swagger);
 
-    Class<?> producerCls = BeanUtils.getImplClassFromBean(producerInstance);
     Map<String, Method> visibleProducerMethods = MethodUtils.findSwaggerMethodsMapOfOperationId(producerCls);
 
     SwaggerProducer producer = new SwaggerProducer();
@@ -159,15 +160,17 @@ public class SwaggerEnvironment {
     return producer;
   }
 
-  private Swagger checkAndGenerateSwagger(Object producerInstance, Class<?> schemaInterface, Swagger swagger) {
+  private Swagger checkAndGenerateSwagger(Class<?> swaggerClass, Swagger swagger) {
     if (swagger == null) {
-      if (schemaInterface != null && !Object.class.equals(schemaInterface)) {
-        swagger = SwaggerGenerator.generate(schemaInterface);
-      } else {
-        Class<?> producerCls = BeanUtils.getImplClassFromBean(producerInstance);
-        swagger = SwaggerGenerator.generate(producerCls);
-      }
+      swagger = SwaggerGenerator.generate(swaggerClass);
     }
     return swagger;
   }
+
+  private Class<?> targetSwaggerClass(Object producerInstance, Class<?> schemaInterface) {
+    if (schemaInterface != null && !Object.class.equals(schemaInterface)) {
+      return schemaInterface;
+    }
+    return BeanUtils.getImplClassFromBean(producerInstance);
+  }
 }