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>