Skip to content

Commit 50aa735

Browse files
authored
Merge pull request #2357 from swagger-api/2.0
swagger integration and #2312 improvements and fixes
2 parents 44997dc + c864f1b commit 50aa735

File tree

117 files changed

+2793
-1473
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

117 files changed

+2793
-1473
lines changed

modules/swagger-core/src/main/java/io/swagger/config/ConfigFactory.java

-5
This file was deleted.

modules/swagger-core/src/main/java/io/swagger/config/FilterFactory.java

-15
This file was deleted.

modules/swagger-core/src/main/java/io/swagger/config/Scanner.java

-11
This file was deleted.

modules/swagger-core/src/main/java/io/swagger/config/ScannerFactory.java

-13
This file was deleted.

modules/swagger-core/src/main/java/io/swagger/config/SwaggerConfig.java

-10
This file was deleted.

modules/swagger-core/src/main/java/io/swagger/jackson/ModelResolver.java

+11-39
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,6 @@ else if(PrimitiveType.fromType(type) != null) {
286286
if (resolvedModel != null) {
287287
return resolvedModel;
288288
}
289-
// TODO #2312 - needs clone implemented in #2227
290289
// uses raw class, as it does not consider super class while handling schema annotation for composed model props
291290
List<Class<?>> composedSchemaReferencedClasses = getComposedSchemaReferencedClasses(type.getRawClass());
292291
boolean isComposedSchema = composedSchemaReferencedClasses != null;
@@ -471,44 +470,20 @@ else if(PrimitiveType.fromType(type) != null) {
471470
else {
472471
property = context.resolve(cls, annotations);
473472
}
474-
/*else if (or.toLowerCase().startsWith("map[")) {
475-
// TODO #2312
476-
// int pos = or.indexOf(",");
477-
// if (pos > 0) {
478-
// String innerType = or.substring(pos + 1, or.length() - 1);
479-
// MapProperty p = new MapProperty();
480-
// Property primitiveProperty = PrimitiveType.createProperty(innerType);
481-
// if (primitiveProperty != null) {
482-
// p.setAdditionalProperties(primitiveProperty);
483-
// } else {
484-
// innerJavaType = getInnerType(innerType);
485-
// p.setAdditionalProperties(context.resolveProperty(innerJavaType, annotations));
486-
// }
487-
// property = p;
488-
// }
489-
} else {
490-
Schema primitiveProperty = PrimitiveType.createProperty(or);
491-
if (primitiveProperty != null) {
492-
property = primitiveProperty;
493-
} else {
494-
innerJavaType = getInnerType(or);
495-
property = context.resolve(innerJavaType, annotations);
496-
}
497-
}
498-
if (innerJavaType != null) {
499-
context.resolve(innerJavaType);
500-
}*/
473+
// TODO #2312 possibly consider also type or remove from annotation and use only "implementation"
501474
}
502475

503476
// no property from override, construct from propType
504477
if (property == null) {
505478
if (mp != null && StringUtils.isNotEmpty(mp.ref())) {
506479
property = new Schema().$ref(mp.ref());
480+
/*
507481
} else if (member.getAnnotation(JsonIdentityInfo.class) != null) {
508482
// TODO #2312
509-
// property = GeneratorWrapper.processJsonIdentity(propType, context, _mapper,
510-
// member.getAnnotation(JsonIdentityInfo.class),
511-
// member.getAnnotation(JsonIdentityReference.class));
483+
property = GeneratorWrapper.processJsonIdentity(propType, context, _mapper,
484+
member.getAnnotation(JsonIdentityInfo.class),
485+
member.getAnnotation(JsonIdentityReference.class));
486+
*/
512487
}
513488
if (property == null) {
514489
JsonUnwrapped uw = member.getAnnotation(JsonUnwrapped.class);
@@ -574,7 +549,7 @@ else if(PrimitiveType.fromType(type) != null) {
574549
}
575550
}
576551
JAXBAnnotationsHelper.apply(member, property);
577-
applyBeanValidatorAnnotations(property, annotations);
552+
applyBeanValidatorAnnotations(property, annotations, model);
578553
}
579554
}
580555

@@ -862,30 +837,27 @@ private static GeneratorWrapper getWrapper(Class<?> generator) {
862837

863838
private static Schema process(Schema id, String propertyName, JavaType type,
864839
ModelConverterContext context) {
865-
// id.setTitle(propertyName);
866840
Schema model = context.resolve(type);
867-
Schema mi = (Schema) model;
841+
Schema mi = model;
868842
mi.getProperties().put(propertyName, id);
869843
return new Schema().$ref(StringUtils.isNotEmpty(mi.get$ref())
870-
? mi.get$ref() : mi.getTitle());
844+
? mi.get$ref() : mi.getName());
871845
}
872846
}
873847

874-
protected void applyBeanValidatorAnnotations(Schema property, Annotation[] annotations) {
848+
protected void applyBeanValidatorAnnotations(Schema property, Annotation[] annotations, Schema parent) {
875849
Map<String, Annotation> annos = new HashMap<String, Annotation>();
876850
if (annotations != null) {
877851
for (Annotation anno : annotations) {
878852
annos.put(anno.annotationType().getName(), anno);
879853
}
880854
}
881-
// TODO #2312
882855
if (annos.containsKey("javax.validation.constraints.NotNull")) {
883-
// property.setRequired(true);
856+
parent.addRequiredItem(property.getName());
884857
}
885858
if (annos.containsKey("javax.validation.constraints.Min")) {
886859
if ("integer".equals(property.getType()) || "number". equals(property.getType())) {
887860
Min min = (Min) annos.get("javax.validation.constraints.Min");
888-
// AbstractNumericProperty ap = (AbstractNumericProperty) property;
889861
property.setMinimum(new BigDecimal(min.value()));
890862
}
891863
}

modules/swagger-core/src/main/java/io/swagger/util/DeserializationModule.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import io.swagger.oas.models.media.Schema;
66
import io.swagger.oas.models.parameters.Parameter;
77
import io.swagger.oas.models.responses.ApiResponse;
8-
8+
import io.swagger.oas.models.security.SecurityScheme;
99

1010
public class DeserializationModule extends SimpleModule {
1111

@@ -23,8 +23,7 @@ public DeserializationModule(boolean includePathDeserializer,
2323
this.addDeserializer(Parameter.class, new ParameterDeserializer());
2424
// this.addDeserializer(RequestBody.class, new RequestBodyDeserializer());
2525

26-
// TODO #2312
27-
// this.addDeserializer(SecurityDefinition.class, new SecurityDefinitionDeserializer());
26+
this.addDeserializer(SecurityScheme.class, new SecuritySchemeDeserializer());
2827
}
2928

3029
public DeserializationModule() {

modules/swagger-core/src/main/java/io/swagger/util/SecurityDefinitionDeserializer.java

-35
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package io.swagger.util;
2+
3+
import com.fasterxml.jackson.core.JsonParseException;
4+
import com.fasterxml.jackson.core.JsonParser;
5+
import com.fasterxml.jackson.core.JsonProcessingException;
6+
import com.fasterxml.jackson.databind.DeserializationContext;
7+
import com.fasterxml.jackson.databind.JsonDeserializer;
8+
import com.fasterxml.jackson.databind.JsonNode;
9+
import io.swagger.oas.models.security.OAuthFlows;
10+
import io.swagger.oas.models.security.SecurityScheme;
11+
12+
import java.io.IOException;
13+
import java.util.Arrays;
14+
15+
public class SecuritySchemeDeserializer extends JsonDeserializer<SecurityScheme> {
16+
@Override
17+
public SecurityScheme deserialize(JsonParser jp, DeserializationContext ctxt)
18+
throws IOException, JsonProcessingException {
19+
SecurityScheme result = null;
20+
21+
22+
JsonNode node = jp.getCodec().readTree(jp);
23+
24+
JsonNode inNode = node.get("type");
25+
26+
if (inNode != null) {
27+
String type = inNode.asText();
28+
if (Arrays.stream(SecurityScheme.Type.values()).noneMatch(t -> t.toString().equals(type))){
29+
// wrong type, throw exception
30+
throw new JsonParseException(jp, String.format("SecurityScheme type %s not allowed", type));
31+
}
32+
result = new SecurityScheme()
33+
.description(getFieldText("description", node));
34+
35+
if ("http".equals(type)) {
36+
result
37+
.type(SecurityScheme.Type.HTTP)
38+
.scheme(getFieldText("scheme", node))
39+
.bearerFormat(getFieldText("bearerFormat", node));
40+
} else if ("apiKey".equals(type)) {
41+
result
42+
.type(SecurityScheme.Type.APIKEY)
43+
.name(getFieldText("name", node))
44+
.in(getIn(getFieldText("in", node)));
45+
} else if ("openIdConnect".equals(type)) {
46+
result
47+
.type(SecurityScheme.Type.OPENIDCONNECT)
48+
.openIdConnectUrl(getFieldText("openIdConnectUrl", node));
49+
} else if ("oauth2".equals(type)) {
50+
result
51+
.type(SecurityScheme.Type.OAUTH2)
52+
.flows(Json.mapper().convertValue(node.get("flows"), OAuthFlows.class));
53+
}
54+
}
55+
56+
return result;
57+
}
58+
59+
private SecurityScheme.In getIn(String value) {
60+
return Arrays.stream(SecurityScheme.In.values()).filter(i -> i.toString().equals(value)).findFirst().orElse(null);
61+
}
62+
63+
private String getFieldText(String fieldName, JsonNode node) {
64+
JsonNode inNode = node.get(fieldName);
65+
if (inNode != null) {
66+
return inNode.asText();
67+
}
68+
return null;
69+
}
70+
}

0 commit comments

Comments
 (0)