Skip to content

Commit 69fe8bb

Browse files
committed
Refine DefinitionMerger
1 parent b80d947 commit 69fe8bb

File tree

22 files changed

+339
-420
lines changed

22 files changed

+339
-420
lines changed

dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/pom.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@
9393
<artifactId>spring-boot-starter-log4j2</artifactId>
9494
</dependency>
9595

96+
<!-- generate json format javadoc for openapi -->
9697
<dependency>
9798
<groupId>com.github.therapi</groupId>
9899
<artifactId>therapi-runtime-javadoc-scribe</artifactId>

dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/src/main/java/org/apache/dubbo/springboot/demo/servlet/Animal.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/src/main/java/org/apache/dubbo/springboot/demo/servlet/Cat.java

Lines changed: 0 additions & 33 deletions
This file was deleted.

dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/src/main/java/org/apache/dubbo/springboot/demo/servlet/Dog.java

Lines changed: 0 additions & 30 deletions
This file was deleted.

dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/src/main/java/org/apache/dubbo/springboot/demo/servlet/GreeterService.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -41,12 +41,4 @@ public interface GreeterService {
4141
* Sends greetings with bi streaming
4242
*/
4343
StreamObserver<HelloRequest> sayHelloBiStream(StreamObserver<HelloReply> responseObserver);
44-
45-
/**
46-
* Create an animal
47-
* @param cat the cat
48-
* @param dog the dog
49-
* @return the animal
50-
*/
51-
Animal createAnimal(Cat cat, Dog dog);
5244
}

dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/src/main/java/org/apache/dubbo/springboot/demo/servlet/GreeterServiceImpl.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,6 @@ public void onCompleted() {
7474
};
7575
}
7676

77-
@Override
78-
public Animal createAnimal(Cat cat, Dog dog) {
79-
return cat;
80-
}
81-
8277
private static HelloReply toReply(String message) {
8378
HelloReply reply = new HelloReply();
8479
reply.setMessage(message);

dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/src/main/java/org/apache/dubbo/springboot/demo/servlet/Live.java

Lines changed: 0 additions & 46 deletions
This file was deleted.

dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/src/main/java/org/apache/dubbo/springboot/demo/servlet/sub/Dog.java

Lines changed: 0 additions & 32 deletions
This file was deleted.

dubbo-demo/dubbo-demo-spring-boot/dubbo-demo-spring-boot-servlet/src/main/resources/application.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,6 @@ dubbo:
3030
openapi:
3131
enabled: true
3232
cache: false
33-
schema-flatten: false
34-
schema-class-excludes:
35-
- a.
36-
- "!b.c."
37-
- "!org.apache.dubbo.springboot.demo."
3833
servlet:
3934
enabled: true
4035
registry:

dubbo-plugin/dubbo-rest-swagger/src/main/java/org/apache/dubbo/rpc/protocol/tri/rest/support/swagger/SwaggerOpenAPIDefinitionResolver.java

Lines changed: 68 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import org.apache.dubbo.rpc.protocol.tri.rest.mapping.meta.MethodMeta;
2626
import org.apache.dubbo.rpc.protocol.tri.rest.mapping.meta.ParameterMeta;
2727
import org.apache.dubbo.rpc.protocol.tri.rest.mapping.meta.ServiceMeta;
28+
import org.apache.dubbo.rpc.protocol.tri.rest.openapi.Constants;
2829
import org.apache.dubbo.rpc.protocol.tri.rest.openapi.OpenAPIDefinitionResolver;
2930
import org.apache.dubbo.rpc.protocol.tri.rest.openapi.OpenAPISchemaPredicate;
3031
import org.apache.dubbo.rpc.protocol.tri.rest.openapi.OpenAPISchemaResolver;
@@ -35,15 +36,20 @@
3536
import org.apache.dubbo.rpc.protocol.tri.rest.openapi.model.OpenAPI;
3637
import org.apache.dubbo.rpc.protocol.tri.rest.openapi.model.Operation;
3738
import org.apache.dubbo.rpc.protocol.tri.rest.openapi.model.Schema;
39+
import org.apache.dubbo.rpc.protocol.tri.rest.openapi.model.Schema.Type;
3840
import org.apache.dubbo.rpc.protocol.tri.rest.openapi.model.Tag;
3941

42+
import java.util.Arrays;
4043
import java.util.Map;
4144

4245
import io.swagger.v3.oas.annotations.ExternalDocumentation;
4346
import io.swagger.v3.oas.annotations.Hidden;
4447
import io.swagger.v3.oas.annotations.OpenAPIDefinition;
4548
import io.swagger.v3.oas.annotations.extensions.ExtensionProperty;
49+
import io.swagger.v3.oas.annotations.media.Schema.AccessMode;
50+
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
4651

52+
import static org.apache.dubbo.rpc.protocol.tri.rest.openapi.Helper.setValue;
4753
import static org.apache.dubbo.rpc.protocol.tri.rest.openapi.Helper.trim;
4854

4955
@Activate(order = 50, onClass = "io.swagger.v3.oas.annotations.OpenAPIDefinition")
@@ -98,7 +104,14 @@ public OpenAPI resolve(OpenAPI openAPI, ServiceMeta serviceMeta, OpenAPIChain ch
98104

99105
openAPI.setExternalDocs(toExternalDocs(anno.externalDocs()));
100106

101-
openAPI.setExtensions(toProperties(anno.extensions()));
107+
Map<String, String> properties = toProperties(anno.extensions());
108+
if (properties != null) {
109+
String group = properties.remove(Constants.X_API_GROUP);
110+
if (group != null) {
111+
openAPI.setGroup(group);
112+
}
113+
openAPI.setExtensions(properties);
114+
}
102115
return openAPI;
103116
}
104117

@@ -142,27 +155,74 @@ public Operation resolve(Operation operation, MethodMeta methodMeta, OperationCo
142155
for (String tag : anno.tags()) {
143156
operation.addTag(tag);
144157
}
158+
Map<String, String> properties = toProperties(anno.extensions());
159+
if (properties != null) {
160+
String group = properties.remove(Constants.X_API_GROUP);
161+
if (group != null) {
162+
operation.setGroup(group);
163+
}
164+
String version = properties.remove(Constants.X_API_VERSION);
165+
if (version != null) {
166+
operation.setVersion(version);
167+
}
168+
operation.setExtensions(properties);
169+
}
145170
return operation
146171
.setSummary(trim(anno.summary()))
147172
.setDescription(trim(anno.description()))
148173
.setExternalDocs(toExternalDocs(anno.externalDocs()))
149174
.setOperationId(trim(anno.operationId()))
150-
.setDeprecated(anno.deprecated() ? Boolean.TRUE : null)
151-
.setExtensions(toProperties(anno.extensions()));
175+
.setDeprecated(anno.deprecated() ? Boolean.TRUE : null);
152176
}
153177

154178
@Override
155179
public Schema resolve(ParameterMeta parameter, SchemaContext context, SchemaChain chain) {
156-
AnnotationMeta<io.swagger.v3.oas.annotations.media.Schema> meta =
180+
AnnotationMeta<io.swagger.v3.oas.annotations.media.Schema> annoMeta =
157181
parameter.getAnnotation(io.swagger.v3.oas.annotations.media.Schema.class);
158-
if (meta == null) {
182+
if (annoMeta == null) {
159183
return chain.resolve(parameter, context);
160184
}
161-
io.swagger.v3.oas.annotations.media.Schema schema = meta.getAnnotation();
162-
if (schema.hidden() || parameter.isHierarchyAnnotated(Hidden.class)) {
185+
io.swagger.v3.oas.annotations.media.Schema anno = annoMeta.getAnnotation();
186+
if (anno.hidden() || parameter.isHierarchyAnnotated(Hidden.class)) {
163187
return null;
164188
}
165-
return chain.resolve(parameter, context);
189+
Schema schema = chain.resolve(parameter, context);
190+
if (schema == null) {
191+
return null;
192+
}
193+
194+
Map<String, String> properties = toProperties(anno.extensions());
195+
if (properties != null) {
196+
String group = properties.remove(Constants.X_API_GROUP);
197+
if (group != null) {
198+
schema.setGroup(group);
199+
}
200+
String version = properties.remove(Constants.X_API_VERSION);
201+
if (version != null) {
202+
schema.setVersion(version);
203+
}
204+
schema.setExtensions(properties);
205+
}
206+
207+
setValue(anno::type, v -> schema.setType(Type.valueOf(v)));
208+
setValue(anno::format, schema::setFormat);
209+
setValue(anno::name, schema::setName);
210+
setValue(anno::title, schema::setTitle);
211+
setValue(anno::description, schema::setDescription);
212+
setValue(anno::defaultValue, schema::setDefaultValue);
213+
setValue(anno::pattern, schema::setPattern);
214+
setValue(anno::example, schema::setExample);
215+
String[] enumItems = trim(anno.allowableValues());
216+
if (enumItems != null) {
217+
schema.setEnumeration(Arrays.asList(enumItems));
218+
}
219+
schema.setRequired(anno.requiredMode() == RequiredMode.REQUIRED ? Boolean.TRUE : null);
220+
schema.setReadOnly(anno.accessMode() == AccessMode.READ_ONLY ? Boolean.TRUE : null);
221+
schema.setWriteOnly(anno.accessMode() == AccessMode.WRITE_ONLY ? Boolean.TRUE : null);
222+
schema.setNullable(anno.nullable() ? Boolean.TRUE : null);
223+
schema.setDeprecated(anno.deprecated() ? Boolean.TRUE : null);
224+
225+
return schema;
166226
}
167227

168228
@Override

0 commit comments

Comments
 (0)