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 2019/01/16 08:37:19 UTC

[servicecomb-java-chassis] 01/03: [SCB-945] use annotation format to declare additional information

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

commit ad0ee204b593c75fe5b22480b78b8e397170503e
Author: wujimin <wu...@huawei.com>
AuthorDate: Fri Nov 30 22:12:57 2018 +0800

    [SCB-945] use annotation format to declare additional information
---
 .../protobuf/internal/converter/ProtoMethod.java   | 10 ----
 .../protobuf/internal/converter/ProtoResponse.java | 10 ----
 .../internal/converter/ProtoToStringGenerator.java | 21 ++++++-
 .../converter/SwaggerToProtoGenerator.java         | 53 +++++++++--------
 .../internal/converter/SwaggerTypeAdapter.java     |  4 ++
 .../converter/TestSwaggerToProtoGenerator.java     | 66 ++++++++++++----------
 .../foundation/protobuf/internal/ProtoConst.java   |  4 +-
 7 files changed, 92 insertions(+), 76 deletions(-)

diff --git a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoMethod.java b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoMethod.java
index 4ae87ae..e8d8a09 100644
--- a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoMethod.java
+++ b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoMethod.java
@@ -28,8 +28,6 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 public class ProtoMethod {
   private String argTypeName;
 
-  private boolean argWrapped;
-
   @JsonProperty
   // key is status
   private Map<Integer, ProtoResponse> responses = new HashMap<>();
@@ -44,14 +42,6 @@ public class ProtoMethod {
     this.argTypeName = argTypeName;
   }
 
-  public boolean isArgWrapped() {
-    return argWrapped;
-  }
-
-  public void setArgWrapped(boolean argWrapped) {
-    this.argWrapped = argWrapped;
-  }
-
   public void addResponse(String status, ProtoResponse response) {
     if (status.equals("default")) {
       defaultResponse = response;
diff --git a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoResponse.java b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoResponse.java
index feaa406..19510f6 100644
--- a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoResponse.java
+++ b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoResponse.java
@@ -19,8 +19,6 @@ package org.apache.servicecomb.codec.protobuf.internal.converter;
 public class ProtoResponse {
   private String typeName;
 
-  private boolean wrapped;
-
   public String getTypeName() {
     return typeName;
   }
@@ -28,12 +26,4 @@ public class ProtoResponse {
   public void setTypeName(String typeName) {
     this.typeName = typeName;
   }
-
-  public boolean isWrapped() {
-    return wrapped;
-  }
-
-  public void setWrapped(boolean wrapped) {
-    this.wrapped = wrapped;
-  }
 }
diff --git a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoToStringGenerator.java b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoToStringGenerator.java
index 4e1b9ed..589cad8 100644
--- a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoToStringGenerator.java
+++ b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/ProtoToStringGenerator.java
@@ -18,6 +18,10 @@ package org.apache.servicecomb.codec.protobuf.internal.converter;
 
 import static org.apache.servicecomb.foundation.common.utils.StringBuilderUtils.appendLine;
 
+import java.util.List;
+
+import com.google.common.base.Strings;
+
 import io.protostuff.compiler.model.Enum;
 import io.protostuff.compiler.model.EnumConstant;
 import io.protostuff.compiler.model.Field;
@@ -59,9 +63,7 @@ public class ProtoToStringGenerator {
   private void serviceToString(Service service, StringBuilder sb) {
     appendLine(sb, "service %s {", service.getName());
     for (ServiceMethod serviceMethod : service.getMethods()) {
-      if (!serviceMethod.getCommentLines().isEmpty()) {
-        appendLine(sb, "  //" + serviceMethod.getComments());
-      }
+      commentsToString(serviceMethod.getCommentLines(), sb, 2);
       appendLine(sb, "  rpc %s (%s) returns (%s);\n", serviceMethod.getName(), serviceMethod.getArgTypeName(),
           serviceMethod.getReturnTypeName());
     }
@@ -79,7 +81,20 @@ public class ProtoToStringGenerator {
     sb.append("}\n\n");
   }
 
+  private void commentsToString(List<String> comments, StringBuilder sb, int padLeft) {
+    if (comments.isEmpty()) {
+      return;
+    }
+
+    String pad = Strings.repeat(" ", padLeft) + "//";
+    for (String comment : comments) {
+      sb.append(pad);
+      appendLine(sb, comment);
+    }
+  }
+
   private void messageToString(Message message, StringBuilder sb) {
+    commentsToString(message.getCommentLines(), sb, 0);
     appendLine(sb, "message %s {", message.getName());
     for (Field field : message.getFields()) {
       sb.append("  ");
diff --git a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
index cd8942a..8980c1f 100644
--- a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
+++ b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerToProtoGenerator.java
@@ -22,6 +22,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
@@ -89,6 +90,7 @@ public class SwaggerToProtoGenerator {
     }
   }
 
+  @SuppressWarnings("unchecked")
   private void convertDefinition(String modelName, ModelImpl model) {
     Map<String, Property> properties = model.getProperties();
     if (properties == null) {
@@ -96,12 +98,23 @@ public class SwaggerToProtoGenerator {
       properties = Collections.emptyMap();
     }
 
-    // complex
-    messages.add(modelName);
-    appendLine(msgStringBuilder, "message %s {", modelName);
+    createMessage(modelName, (Map<String, Object>) (Object) properties);
+  }
+
+  private void createMessage(String protoName, Map<String, Object> properties, String... annotations) {
+    if (!messages.add(protoName)) {
+      // already created
+      return;
+    }
+
+    for (String annotation : annotations) {
+      msgStringBuilder.append("//");
+      appendLine(msgStringBuilder, annotation);
+    }
+    appendLine(msgStringBuilder, "message %s {", protoName);
     int tag = 1;
-    for (Entry<String, Property> entry : properties.entrySet()) {
-      Property property = entry.getValue();
+    for (Entry<String, Object> entry : properties.entrySet()) {
+      Object property = entry.getValue();
       String propertyType = convertSwaggerType(property);
 
       appendLine(msgStringBuilder, "  %s %s = %d;", propertyType, entry.getKey(), tag);
@@ -160,6 +173,10 @@ public class SwaggerToProtoGenerator {
             Json.encode(swaggerType)));
   }
 
+  private void wrapPropertyToMessage(String protoName, Property property) {
+    createMessage(protoName, Collections.singletonMap("value", property), ProtoConst.ANNOTATION_WRAP_PROPERTY);
+  }
+
   private String tryFindEnumType(List<String> enums) {
     if (enums != null && !enums.isEmpty()) {
       String strEnums = enums.toString();
@@ -225,19 +242,19 @@ public class SwaggerToProtoGenerator {
     appendLine(serviceBuilder, "service MainService {");
     for (Path path : paths.values()) {
       for (Operation operation : path.getOperationMap().values()) {
-        convertOpeation(operation);
+        convertOperation(operation);
       }
     }
     serviceBuilder.setLength(serviceBuilder.length() - 1);
     appendLine(serviceBuilder, "}");
   }
 
-  private void convertOpeation(Operation operation) {
+  private void convertOperation(Operation operation) {
     ProtoMethod protoMethod = new ProtoMethod();
     fillRequestType(operation, protoMethod);
     fillResponseType(operation, protoMethod);
 
-    appendLine(serviceBuilder, "  //%s%s", ProtoConst.OP_HINT, Json.encode(protoMethod));
+    appendLine(serviceBuilder, "  //%s%s", ProtoConst.ANNOTATION_RPC, Json.encode(protoMethod));
     appendLine(serviceBuilder, "  rpc %s (%s) returns (%s);\n", operation.getOperationId(),
         protoMethod.getArgTypeName(),
         protoMethod.findResponse(Status.OK.getStatusCode()).getTypeName());
@@ -262,23 +279,20 @@ public class SwaggerToProtoGenerator {
     String wrapName = operation.getOperationId() + "RequestWrap";
     createWrapArgs(wrapName, parameters);
 
-    protoMethod.setArgWrapped(true);
     protoMethod.setArgTypeName(wrapName);
   }
 
   private void fillResponseType(Operation operation, ProtoMethod protoMethod) {
     for (Entry<String, Response> entry : operation.getResponses().entrySet()) {
       String type = convertSwaggerType(entry.getValue().getSchema());
+      boolean wrapped = !messages.contains(type);
 
       ProtoResponse protoResponse = new ProtoResponse();
-      protoResponse.setWrapped(!messages.contains(type));
       protoResponse.setTypeName(type);
 
-      if (protoResponse.isWrapped()) {
+      if (wrapped) {
         String wrapName = operation.getOperationId() + "ResponseWrap" + entry.getKey();
-        appendLine(msgStringBuilder, "message %s {", wrapName);
-        appendLine(msgStringBuilder, "  %s response = 1;", type);
-        appendLine(msgStringBuilder, "}");
+        wrapPropertyToMessage(wrapName, entry.getValue().getSchema());
 
         protoResponse.setTypeName(wrapName);
       }
@@ -287,16 +301,11 @@ public class SwaggerToProtoGenerator {
   }
 
   private void createWrapArgs(String wrapName, List<Parameter> parameters) {
-    appendLine(msgStringBuilder, "message %s {", wrapName);
-
-    int idx = 1;
+    Map<String, Object> properties = new LinkedHashMap<>();
     for (Parameter parameter : parameters) {
-      String type = convertSwaggerType(parameter);
-      appendLine(msgStringBuilder, "  %s %s = %d;", type, parameter.getName(), idx);
-      idx++;
+      properties.put(parameter.getName(), parameter);
     }
-
-    appendLine(msgStringBuilder, "}");
+    createMessage(wrapName, properties, ProtoConst.ANNOTATION_WRAP_ARGUMENTS);
   }
 
   protected Proto createProto() {
diff --git a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerTypeAdapter.java b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerTypeAdapter.java
index 235ebe8..dacaf6d 100644
--- a/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerTypeAdapter.java
+++ b/common/common-protobuf/src/main/java/org/apache/servicecomb/codec/protobuf/internal/converter/SwaggerTypeAdapter.java
@@ -24,6 +24,10 @@ import io.swagger.models.properties.Property;
 
 public interface SwaggerTypeAdapter {
   static SwaggerTypeAdapter create(Object swaggerType) {
+    if (swaggerType instanceof SwaggerTypeAdapter) {
+      return (SwaggerTypeAdapter) swaggerType;
+    }
+
     if (swaggerType instanceof Property) {
       return new PropertyAdapter((Property) swaggerType);
     }
diff --git a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java b/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java
index 4b604a4..be61f2f 100644
--- a/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java
+++ b/common/common-protobuf/src/test/java/org/apache/servicecomb/codec/protobuf/internal/converter/TestSwaggerToProtoGenerator.java
@@ -17,7 +17,6 @@
 package org.apache.servicecomb.codec.protobuf.internal.converter;
 
 import org.apache.servicecomb.codec.protobuf.internal.converter.model.ProtoSchema;
-import org.apache.servicecomb.foundation.test.scaffolding.model.Color;
 import org.apache.servicecomb.swagger.generator.core.SwaggerGenerator;
 import org.apache.servicecomb.swagger.generator.core.SwaggerGeneratorContext;
 import org.apache.servicecomb.swagger.generator.springmvc.SpringmvcSwaggerGeneratorContext;
@@ -26,7 +25,6 @@ import org.junit.Test;
 
 import io.protostuff.compiler.model.Proto;
 import io.swagger.models.Swagger;
-import io.vertx.core.json.Json;
 
 public class TestSwaggerToProtoGenerator {
   static String protoContent = "syntax = \"proto3\";\n"
@@ -50,6 +48,7 @@ public class TestSwaggerToProtoGenerator {
       + "  Ref1 ref = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapArguments\n"
       + "message baseRequestWrap {\n"
       + "  bool boolValue = 1;\n"
       + "  int32 iValue = 2;\n"
@@ -64,62 +63,77 @@ public class TestSwaggerToProtoGenerator {
       + "  Empty empty = 11;\n"
       + "}\n"
       + "\n"
+      + "//@WrapProperty\n"
       + "message baseResponseWrap444 {\n"
-      + "  Enum_2610aa5dc6cd086cf20168892802c9c765a557f4951557340ad9f0982c53e055 response = 1;\n"
+      + "  Enum_2610aa5dc6cd086cf20168892802c9c765a557f4951557340ad9f0982c53e055 value = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapProperty\n"
       + "message baseResponseWrap200 {\n"
-      + "  int32 response = 1;\n"
+      + "  int32 value = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapArguments\n"
       + "message bytesRequestWrap {\n"
       + "  bytes value = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapProperty\n"
       + "message bytesResponseWrap200 {\n"
-      + "  bytes response = 1;\n"
+      + "  bytes value = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapArguments\n"
       + "message colorBodyRequestWrap {\n"
       + "  Enum_2610aa5dc6cd086cf20168892802c9c765a557f4951557340ad9f0982c53e055 color = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapProperty\n"
       + "message colorBodyResponseWrap200 {\n"
-      + "  Enum_2610aa5dc6cd086cf20168892802c9c765a557f4951557340ad9f0982c53e055 response = 1;\n"
+      + "  Enum_2610aa5dc6cd086cf20168892802c9c765a557f4951557340ad9f0982c53e055 value = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapArguments\n"
       + "message listObjRequestWrap {\n"
       + "  repeated google.protobuf.Any objs = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapProperty\n"
       + "message listObjResponseWrap200 {\n"
-      + "  repeated google.protobuf.Any response = 1;\n"
+      + "  repeated google.protobuf.Any value = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapArguments\n"
       + "message listUserRequestWrap {\n"
       + "  repeated User users = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapProperty\n"
       + "message listUserResponseWrap200 {\n"
-      + "  repeated User response = 1;\n"
+      + "  repeated User value = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapArguments\n"
       + "message mapObjRequestWrap {\n"
       + "  map<string, google.protobuf.Any> objs = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapProperty\n"
       + "message mapObjResponseWrap200 {\n"
-      + "  map<string, google.protobuf.Any> response = 1;\n"
+      + "  map<string, google.protobuf.Any> value = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapArguments\n"
       + "message mapUserRequestWrap {\n"
       + "  map<string, User> users = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapProperty\n"
       + "message mapUserResponseWrap200 {\n"
-      + "  map<string, User> response = 1;\n"
+      + "  map<string, User> value = 1;\n"
       + "}\n"
       + "\n"
+      + "//@WrapArguments\n"
       + "message userWrapInProtobufRequestWrap {\n"
       + "  User user = 1;\n"
       + "  int32 ivalue = 2;\n"
@@ -132,40 +146,40 @@ public class TestSwaggerToProtoGenerator {
       + "}\n"
       + "\n"
       + "service MainService {\n"
-      + "  //scb:{\"argTypeName\":\"baseRequestWrap\",\"argWrapped\":true,\"responses\":{\"200\":{\"typeName\":\"baseResponseWrap200\",\"wrapped\":true},\"444\":{\"typeName\":\"baseResponseWrap444\",\"wrapped\":true}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"baseRequestWrap\",\"responses\":{\"200\":{\"typeName\":\"baseResponseWrap200\"},\"444\":{\"typeName\":\"baseResponseWrap444\"}}}\n"
       + "  rpc base (baseRequestWrap) returns (baseResponseWrap200);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"bytesRequestWrap\",\"argWrapped\":true,\"responses\":{\"200\":{\"typeName\":\"bytesResponseWrap200\",\"wrapped\":true}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"bytesRequestWrap\",\"responses\":{\"200\":{\"typeName\":\"bytesResponseWrap200\"}}}\n"
       + "  rpc bytes (bytesRequestWrap) returns (bytesResponseWrap200);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"colorBodyRequestWrap\",\"argWrapped\":true,\"responses\":{\"200\":{\"typeName\":\"colorBodyResponseWrap200\",\"wrapped\":true}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"colorBodyRequestWrap\",\"responses\":{\"200\":{\"typeName\":\"colorBodyResponseWrap200\"}}}\n"
       + "  rpc colorBody (colorBodyRequestWrap) returns (colorBodyResponseWrap200);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"listObjRequestWrap\",\"argWrapped\":true,\"responses\":{\"200\":{\"typeName\":\"listObjResponseWrap200\",\"wrapped\":true}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"listObjRequestWrap\",\"responses\":{\"200\":{\"typeName\":\"listObjResponseWrap200\"}}}\n"
       + "  rpc listObj (listObjRequestWrap) returns (listObjResponseWrap200);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"listUserRequestWrap\",\"argWrapped\":true,\"responses\":{\"200\":{\"typeName\":\"listUserResponseWrap200\",\"wrapped\":true}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"listUserRequestWrap\",\"responses\":{\"200\":{\"typeName\":\"listUserResponseWrap200\"}}}\n"
       + "  rpc listUser (listUserRequestWrap) returns (listUserResponseWrap200);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"mapObjRequestWrap\",\"argWrapped\":true,\"responses\":{\"200\":{\"typeName\":\"mapObjResponseWrap200\",\"wrapped\":true}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"mapObjRequestWrap\",\"responses\":{\"200\":{\"typeName\":\"mapObjResponseWrap200\"}}}\n"
       + "  rpc mapObj (mapObjRequestWrap) returns (mapObjResponseWrap200);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"mapUserRequestWrap\",\"argWrapped\":true,\"responses\":{\"200\":{\"typeName\":\"mapUserResponseWrap200\",\"wrapped\":true}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"mapUserRequestWrap\",\"responses\":{\"200\":{\"typeName\":\"mapUserResponseWrap200\"}}}\n"
       + "  rpc mapUser (mapUserRequestWrap) returns (mapUserResponseWrap200);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"google.protobuf.Empty\",\"argWrapped\":false,\"responses\":{\"200\":{\"typeName\":\"google.protobuf.Empty\",\"wrapped\":false}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"google.protobuf.Empty\",\"responses\":{\"200\":{\"typeName\":\"google.protobuf.Empty\"}}}\n"
       + "  rpc noParamVoid (google.protobuf.Empty) returns (google.protobuf.Empty);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"google.protobuf.Any\",\"argWrapped\":false,\"responses\":{\"200\":{\"typeName\":\"google.protobuf.Any\",\"wrapped\":false}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"google.protobuf.Any\",\"responses\":{\"200\":{\"typeName\":\"google.protobuf.Any\"}}}\n"
       + "  rpc obj (google.protobuf.Any) returns (google.protobuf.Any);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"Ref1\",\"argWrapped\":false,\"responses\":{\"200\":{\"typeName\":\"Ref2\",\"wrapped\":false}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"Ref1\",\"responses\":{\"200\":{\"typeName\":\"Ref2\"}}}\n"
       + "  rpc ref (Ref1) returns (Ref2);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"User\",\"argWrapped\":false,\"responses\":{\"200\":{\"typeName\":\"User\",\"wrapped\":false}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"User\",\"responses\":{\"200\":{\"typeName\":\"User\"}}}\n"
       + "  rpc user (User) returns (User);\n"
       + "\n"
-      + "  //scb:{\"argTypeName\":\"userWrapInProtobufRequestWrap\",\"argWrapped\":true,\"responses\":{\"200\":{\"typeName\":\"User\",\"wrapped\":false}}}\n"
+      + "  //@Rpc{\"argTypeName\":\"userWrapInProtobufRequestWrap\",\"responses\":{\"200\":{\"typeName\":\"User\"}}}\n"
       + "  rpc userWrapInProtobuf (userWrapInProtobufRequestWrap) returns (User);\n"
       + "}\n";
 
@@ -180,12 +194,4 @@ public class TestSwaggerToProtoGenerator {
 
     Assert.assertEquals(protoContent, new ProtoToStringGenerator(proto).protoToString());
   }
-
-  public static void main(String[] args) {
-    String json = Json.encode(Color.BLUE);
-    System.out.println(json);
-    System.out.println(Json.decodeValue(json, Color.class));
-    System.out.println(Json.decodeValue("2", Color.class));
-    System.out.println(Json.mapper.convertValue("BLUE", Color.class));
-  }
 }
diff --git a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/ProtoConst.java b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/ProtoConst.java
index 8d5b1d6..cc2c0ba 100644
--- a/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/ProtoConst.java
+++ b/foundations/foundation-protobuf/src/main/java/org/apache/servicecomb/foundation/protobuf/internal/ProtoConst.java
@@ -31,9 +31,11 @@ public final class ProtoConst {
   private ProtoConst() {
   }
 
+  public static String ANNOTATION_WRAP_ARGUMENTS = "@WrapArguments";
+
   public static String ANNOTATION_WRAP_PROPERTY = "@WrapProperty";
 
-  public static String OP_HINT = " scb:";
+  public static String ANNOTATION_RPC = "@Rpc";
 
   public static String PACK_SCHEMA = "type.googleapis.com/";