add oas-generator-servicecomb to support parse servicecomb code

Signed-off-by: kakulisen <18813972746@163.com>
diff --git a/oas-generator/oas-generator-servicecomb/pom.xml b/oas-generator/oas-generator-servicecomb/pom.xml
new file mode 100644
index 0000000..55cf0c9
--- /dev/null
+++ b/oas-generator/oas-generator-servicecomb/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+  <parent>
+    <artifactId>oas-generator</artifactId>
+    <groupId>org.apache.servicecomb.toolkit</groupId>
+    <version>0.2.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>oas-generator-servicecomb</artifactId>
+
+  <dependencies>
+    <dependency>
+      <groupId>org.apache.servicecomb.toolkit</groupId>
+      <artifactId>oas-generator-jaxrs</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.servicecomb.toolkit</groupId>
+      <artifactId>oas-generator-spring</artifactId>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>provider-rest-common</artifactId>
+      <version>1.2.0</version>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.servicecomb</groupId>
+      <artifactId>provider-pojo</artifactId>
+      <version>1.2.0</version>
+      <exclusions>
+        <exclusion>
+          <groupId>commons-lang</groupId>
+          <artifactId>commons-lang</artifactId>
+        </exclusion>
+      </exclusions>
+    </dependency>
+    
+  </dependencies>
+
+</project>
\ No newline at end of file
diff --git a/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombJaxrsParser.java b/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombJaxrsParser.java
new file mode 100644
index 0000000..6b79e9b
--- /dev/null
+++ b/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombJaxrsParser.java
@@ -0,0 +1,34 @@
+/*
+ * 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 org.apache.servicecomb.toolkit.generator.parser;
+
+import javax.ws.rs.Path;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+
+public class ServicecombJaxrsParser extends JaxRsAnnotationParser {
+
+  @Override
+  public boolean canProcess(Class<?> cls) {
+    if (cls.getAnnotation(RestSchema.class) != null && cls.getAnnotation(Path.class) != null) {
+      return true;
+    }
+
+    return false;
+  }
+}
diff --git a/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombPojoParser.java b/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombPojoParser.java
new file mode 100644
index 0000000..beb42d5
--- /dev/null
+++ b/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombPojoParser.java
@@ -0,0 +1,74 @@
+/*
+ * 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 org.apache.servicecomb.toolkit.generator.parser;
+
+import java.lang.reflect.Method;
+
+import org.apache.commons.lang3.StringUtils;
+import org.apache.servicecomb.provider.pojo.RpcSchema;
+import org.apache.servicecomb.toolkit.generator.OperationContext;
+
+import io.swagger.v3.oas.models.PathItem.HttpMethod;
+
+public class ServicecombPojoParser extends AbstractAnnotationParser {
+
+  @Override
+  public int getOrder() {
+    return 0;
+  }
+
+  @Override
+  public boolean canProcess(Class<?> cls) {
+    if (cls.getAnnotation(RpcSchema.class) != null) {
+      return true;
+    }
+
+    return false;
+  }
+
+
+  @Override
+  public void postParseMethodAnnotation(OperationContext context) {
+    super.postParseMethodAnnotation(context);
+
+    Method currentMethod = context.getMethod();
+
+    if (StringUtils.isEmpty(context.getHttpMethod())) {
+      context.setHttpMethod(HttpMethod.POST.toString());
+    }
+
+    if (StringUtils.isEmpty(context.getOperationId())) {
+      context.setOperationId(currentMethod.getName());
+    }
+
+    if (StringUtils.isEmpty(context.getPath())) {
+      context.setPath(correctPath(currentMethod.getName()));
+    }
+
+    if (context.getApiResponses() == null || context.getApiResponses().size() == 0) {
+      context.correctResponse(context.getApiResponses());
+    }
+  }
+
+  private String correctPath(String path) {
+    if (path == null || path.startsWith("/")) {
+      return path;
+    }
+    return "/" + path;
+  }
+}
diff --git a/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombSpringmvcParser.java b/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombSpringmvcParser.java
new file mode 100644
index 0000000..7f59bc2
--- /dev/null
+++ b/oas-generator/oas-generator-servicecomb/src/main/java/org/apache/servicecomb/toolkit/generator/parser/ServicecombSpringmvcParser.java
@@ -0,0 +1,33 @@
+/*
+ * 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 org.apache.servicecomb.toolkit.generator.parser;
+
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+public class ServicecombSpringmvcParser extends SpringmvcAnnotationParser {
+
+  @Override
+  public boolean canProcess(Class<?> cls) {
+    if (cls.getAnnotation(RestSchema.class) != null && cls.getAnnotation(RequestMapping.class) != null) {
+      return true;
+    }
+
+    return false;
+  }
+}
diff --git a/oas-generator/oas-generator-servicecomb/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.generator.parser.api.OpenApiAnnotationParser b/oas-generator/oas-generator-servicecomb/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.generator.parser.api.OpenApiAnnotationParser
new file mode 100644
index 0000000..0658b91
--- /dev/null
+++ b/oas-generator/oas-generator-servicecomb/src/main/resources/META-INF/services/org.apache.servicecomb.toolkit.generator.parser.api.OpenApiAnnotationParser
@@ -0,0 +1,20 @@
+#
+# 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.
+#
+
+org.apache.servicecomb.toolkit.generator.parser.ServicecombJaxrsParser
+org.apache.servicecomb.toolkit.generator.parser.ServicecombSpringmvcParser
+org.apache.servicecomb.toolkit.generator.parser.ServicecombPojoParser
\ No newline at end of file
diff --git a/oas-generator/oas-generator-servicecomb/src/test/java/org/apache/servicecomb/toolkit/generator/ServiceCombParserTest.java b/oas-generator/oas-generator-servicecomb/src/test/java/org/apache/servicecomb/toolkit/generator/ServiceCombParserTest.java
new file mode 100644
index 0000000..78c6bfc
--- /dev/null
+++ b/oas-generator/oas-generator-servicecomb/src/test/java/org/apache/servicecomb/toolkit/generator/ServiceCombParserTest.java
@@ -0,0 +1,76 @@
+/*
+ * 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 org.apache.servicecomb.toolkit.generator;
+
+import javax.ws.rs.Path;
+
+import org.apache.servicecomb.provider.pojo.RpcSchema;
+import org.apache.servicecomb.provider.rest.common.RestSchema;
+import org.apache.servicecomb.toolkit.generator.parser.ServicecombJaxrsParser;
+import org.apache.servicecomb.toolkit.generator.parser.ServicecombPojoParser;
+import org.apache.servicecomb.toolkit.generator.parser.ServicecombSpringmvcParser;
+import org.junit.Assert;
+import org.junit.Test;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+public class ServiceCombParserTest {
+
+  @Test
+  public void parse() {
+
+    ServicecombJaxrsParser servicecombJaxrsParser = new ServicecombJaxrsParser();
+    ServicecombPojoParser servicecombPojoParser = new ServicecombPojoParser();
+    ServicecombSpringmvcParser servicecombSpringmvcParser = new ServicecombSpringmvcParser();
+
+    boolean canProcess = servicecombJaxrsParser.canProcess(ServicecombJaxrs.class);
+    Assert.assertTrue(canProcess);
+
+    canProcess = servicecombSpringmvcParser.canProcess(ServicecombSpringmvc.class);
+    Assert.assertTrue(canProcess);
+
+    canProcess = servicecombPojoParser.canProcess(ServicecombPojo.class);
+    Assert.assertTrue(canProcess);
+
+    OasContext pojoOasContext = new OasContext(servicecombPojoParser);
+    servicecombPojoParser.parser(ServicecombPojo.class, pojoOasContext);
+    Assert.assertNull(pojoOasContext.getBasePath());
+  }
+
+
+  @RestSchema(schemaId = "servicecombJaxrs")
+  @Path("/")
+  class ServicecombJaxrs {
+
+    @Path("/path")
+    public Object path() {
+      return null;
+    }
+  }
+
+  @RestSchema(schemaId = "servicecombSpringmvc")
+  @RequestMapping
+  class ServicecombSpringmvc {
+  }
+
+  @RpcSchema
+  class ServicecombPojo {
+    public Object path() {
+      return null;
+    }
+  }
+}
diff --git a/oas-generator/pom.xml b/oas-generator/pom.xml
index 849e520..9603fdb 100644
--- a/oas-generator/pom.xml
+++ b/oas-generator/pom.xml
@@ -29,6 +29,7 @@
     <module>oas-generator-core</module>
     <module>oas-generator-jaxrs</module>
     <module>oas-generator-spring</module>
+    <module>oas-generator-servicecomb</module>
   </modules>
 
   <artifactId>oas-generator</artifactId>