Skip to content

Commit 919d1a8

Browse files
Merge pull request #20 from oyeli/Issue-19
Issue 19
2 parents c2bbf1a + 832d750 commit 919d1a8

36 files changed

+781
-205
lines changed

src/main/java/com/github/sylvainlaurent/maven/swaggervalidator/ValidateMojo.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,12 +42,16 @@ public class ValidateMojo extends AbstractMojo {
4242
@Parameter(defaultValue = "true")
4343
private boolean failOnErrors;
4444

45+
@Parameter
46+
private String[] customMimeTypes;
47+
4548
private final ValidationService validationService = new ValidationService();
4649

4750
@Override
4851
public void execute() throws MojoExecutionException {
4952
validationService.setCustomModelValidatorsPackage(customModelValidatorsPackage);
5053
validationService.setCustomPathValidatorsPackage(customPathValidatorsPackage);
54+
validationService.setCustomMimeTypes(customMimeTypes);
5155

5256
Instrumentation.init();
5357

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package com.github.sylvainlaurent.maven.swaggervalidator.semantic;
2+
3+
public interface OperationConstants {
4+
String OPERATION_TYPE_GET = "get";
5+
String OPERATION_TYPE_DELETE = "delete";
6+
String OPERATION_PARAMETRES_BODY = "body";
7+
String OPERATION_PARAMETRES_FORM = "formData";
8+
}

src/main/java/com/github/sylvainlaurent/maven/swaggervalidator/semantic/VisitedItemsHolder.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.github.sylvainlaurent.maven.swaggervalidator.semantic;
22

33
import java.util.ArrayDeque;
4+
import java.util.Collection;
5+
import java.util.Collections;
46
import java.util.Deque;
57

68
import com.github.sylvainlaurent.maven.swaggervalidator.semantic.node.VisitableModel;
@@ -31,4 +33,8 @@ public void pop() {
3133
public String getCurrentPath() {
3234
return String.join(".", (Iterable<String>) () -> visitedItems.descendingIterator());
3335
}
36+
37+
public Collection<String> getVisitedItems() {
38+
return Collections.unmodifiableCollection(visitedItems);
39+
}
3440
}

src/main/java/com/github/sylvainlaurent/maven/swaggervalidator/semantic/node/model/ComposedModelWrapper.java

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.github.sylvainlaurent.maven.swaggervalidator.semantic.node.model;
22

3-
import java.util.ArrayList;
43
import java.util.List;
54
import java.util.Map;
65

@@ -64,16 +63,6 @@ public String getDiscriminator() {
6463
return ((ModelImpl) model.getChild()).getDiscriminator();
6564
}
6665

67-
public List<String> getRequired() {
68-
if (model.getChild() == null || !(model.getChild() instanceof ModelImpl)) {
69-
return new ArrayList<>();
70-
}
71-
// looks like it's always of this type
72-
List<String> required = ((ModelImpl) model.getChild()).getRequired();
73-
74-
return required == null ? new ArrayList<>() : required;
75-
}
76-
7766
// returns only properties from this model, not parents
7867
@Override
7968
public Map<String, VisitableProperty<? extends Property>> getProperties() {

src/main/java/com/github/sylvainlaurent/maven/swaggervalidator/semantic/node/model/ModelImplWrapper.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,16 @@
11
package com.github.sylvainlaurent.maven.swaggervalidator.semantic.node.model;
22

3-
import static java.util.Collections.emptyList;
43
import static org.apache.commons.collections4.ListUtils.emptyIfNull;
54
import static org.apache.commons.lang3.reflect.FieldUtils.readField;
65

76
import java.math.BigDecimal;
7+
import java.util.ArrayList;
88
import java.util.List;
99
import java.util.stream.Collectors;
1010

1111
import com.github.sylvainlaurent.maven.swaggervalidator.semantic.ModelVisitor;
1212
import com.github.sylvainlaurent.maven.swaggervalidator.semantic.VisitablePropertyFactory;
1313
import com.github.sylvainlaurent.maven.swaggervalidator.semantic.node.VisitableProperty;
14-
1514
import io.swagger.models.ModelImpl;
1615
import io.swagger.models.properties.Property;
1716

@@ -26,11 +25,13 @@ public ModelImplWrapper(String name, ModelImpl model) {
2625

2726
@SuppressWarnings("unchecked")
2827
public List<String> getRequired() {
28+
List<String> requiredProperties;
2929
try {
30-
return emptyIfNull((List<String>) readField(model, "required", true));
30+
requiredProperties = new ArrayList<>(emptyIfNull((List<String>) readField(model, "required", true)));
3131
} catch (IllegalAccessException ex) {
32-
return emptyList();
32+
requiredProperties = new ArrayList<>();
3333
}
34+
return requiredProperties;
3435
}
3536

3637
public List<String> getReadOlyProperties() {

src/main/java/com/github/sylvainlaurent/maven/swaggervalidator/semantic/node/path/OperationWrapper.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ public class OperationWrapper implements PathObject {
2525
private String summary;
2626
private String description;
2727
private String operationId;
28-
private List<String> consumes = new ArrayList<>();
29-
private List<String> produces = new ArrayList<>();
28+
private List<String> consumes;
29+
private List<String> produces;
3030
private List<SchemeWrapper> schemes = new ArrayList<>();
3131
private List<Map<String, List<String>>> security = new ArrayList<>();
3232
private Boolean deprecated;
@@ -46,10 +46,10 @@ public OperationWrapper(String name, Operation operation, PathWrapper path) {
4646
this.tags.addAll(operation.getTags());
4747
}
4848
if (operation.getConsumes() != null) {
49-
this.consumes.addAll(operation.getConsumes());
49+
this.consumes = new ArrayList<>(operation.getConsumes());
5050
}
5151
if (operation.getProduces() != null) {
52-
this.produces.addAll(operation.getProduces());
52+
this.produces = new ArrayList<>(operation.getProduces());
5353
}
5454
if (operation.getSecurity() != null) {
5555
this.security.addAll(operation.getSecurity());
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package com.github.sylvainlaurent.maven.swaggervalidator.semantic.validator;
2+
3+
import static org.apache.commons.lang3.reflect.FieldUtils.readDeclaredStaticField;
4+
5+
import java.util.Arrays;
6+
import java.util.HashSet;
7+
import java.util.Map;
8+
import java.util.Set;
9+
import java.util.stream.Collectors;
10+
11+
import io.swagger.models.Swagger;
12+
13+
public class MediaType {
14+
private static final Set<String> DEFINED_MEDIA_TYPES = getDefinedMimeTypes();
15+
16+
@SuppressWarnings("unchecked")
17+
private static Set<String> getDefinedMimeTypes() {
18+
Set<String> set;
19+
try {
20+
set = ((Map<com.google.common.net.MediaType, com.google.common.net.MediaType>) readDeclaredStaticField(
21+
com.google.common.net.MediaType.class, "KNOWN_TYPES", true)).keySet().stream()
22+
.map(x -> x.withoutParameters().toString()).collect(Collectors.toSet());
23+
} catch (IllegalAccessException e) {
24+
set = new HashSet<>();
25+
}
26+
return set;
27+
}
28+
29+
public static Set<String> getMimeTypes() {
30+
return DEFINED_MEDIA_TYPES;
31+
}
32+
33+
public static void addCustomMimeTypes(String[] customMimeTypes) {
34+
if (customMimeTypes != null) {
35+
DEFINED_MEDIA_TYPES.addAll(Arrays.asList(customMimeTypes));
36+
}
37+
}
38+
}

src/main/java/com/github/sylvainlaurent/maven/swaggervalidator/semantic/validator/ValidationContext.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,26 @@
11
package com.github.sylvainlaurent.maven.swaggervalidator.semantic.validator;
22

33
import static org.apache.commons.collections4.MapUtils.emptyIfNull;
4+
import static org.apache.commons.lang3.reflect.FieldUtils.readDeclaredStaticField;
45

56
import java.util.ArrayList;
7+
import java.util.Arrays;
68
import java.util.HashMap;
9+
import java.util.HashSet;
710
import java.util.List;
811
import java.util.Map;
12+
import java.util.Set;
913

1014
import com.github.sylvainlaurent.maven.swaggervalidator.semantic.VisitableParameterFactory;
1115
import com.github.sylvainlaurent.maven.swaggervalidator.semantic.node.VisitableParameter;
1216
import com.github.sylvainlaurent.maven.swaggervalidator.semantic.node.path.PathWrapper;
13-
1417
import io.swagger.models.Model;
1518
import io.swagger.models.Path;
1619
import io.swagger.models.Swagger;
1720
import io.swagger.models.auth.SecuritySchemeDefinition;
1821
import io.swagger.models.parameters.Parameter;
1922

2023
public class ValidationContext {
21-
2224
protected List<PathWrapper> paths = new ArrayList<>();
2325
protected Map<String, Model> definitions = new HashMap<>();
2426
private Swagger swagger;

0 commit comments

Comments
 (0)