Skip to content

Commit 9751c44

Browse files
committed
fix for #15 removing default parameter style information
1 parent 02675ab commit 9751c44

File tree

4 files changed

+103
-3
lines changed

4 files changed

+103
-3
lines changed

‎pom.xml

+3-3
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
<version>1.10.1-SNAPSHOT</version>
2929
<properties>
3030
<openapi.generator.version>6.2.0</openapi.generator.version>
31-
<jackson.version>2.14.0</jackson.version>
31+
<jackson.version>2.14.2</jackson.version>
3232
</properties>
3333
<dependencies>
3434
<!-- https://mvnrepository.com/artifact/org.openapitools/openapi-generator -->
@@ -61,7 +61,7 @@
6161
<dependency>
6262
<groupId>io.swagger.parser.v3</groupId>
6363
<artifactId>swagger-parser-v3</artifactId>
64-
<version>2.1.8</version>
64+
<version>2.1.12</version>
6565
</dependency>
6666
<dependency>
6767
<groupId>com.networknt</groupId>
@@ -100,7 +100,7 @@
100100
<dependency>
101101
<groupId>net.javacrumbs.json-unit</groupId>
102102
<artifactId>json-unit-assertj</artifactId>
103-
<version>2.36.0</version>
103+
<version>2.37.0</version>
104104
<scope>test</scope>
105105
</dependency>
106106
</dependencies>

‎src/main/java/com/amartus/sonata/blender/impl/postprocess/ComposedPostprocessor.java

+1
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ public class ComposedPostprocessor implements Consumer<OpenAPI> {
4646
new ConvertOneOfToAllOffInheritance(),
4747
new UpdateDiscriminatorMapping(),
4848
new ConstrainDiscriminatorValueWithEnum(),
49+
new RemoveDefaultParameterValues(),
4950
new RemoveSchemaExtensions(Set.of(
5051
"x-try-renaming-on"
5152
))
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
package com.amartus.sonata.blender.impl.postprocess;
2+
3+
import io.swagger.v3.oas.models.Components;
4+
import io.swagger.v3.oas.models.OpenAPI;
5+
import io.swagger.v3.oas.models.Operation;
6+
import io.swagger.v3.oas.models.PathItem;
7+
import io.swagger.v3.oas.models.headers.Header;
8+
import io.swagger.v3.oas.models.parameters.CookieParameter;
9+
import io.swagger.v3.oas.models.parameters.Parameter;
10+
import io.swagger.v3.oas.models.parameters.QueryParameter;
11+
12+
import java.util.List;
13+
import java.util.Map;
14+
import java.util.Optional;
15+
import java.util.function.Consumer;
16+
import java.util.function.Function;
17+
18+
public class RemoveDefaultParameterValues implements Consumer<OpenAPI> {
19+
20+
21+
@Override
22+
public void accept(OpenAPI api) {
23+
nullSafe(api.getPaths()).forEach(this::process);
24+
nullSafe(Optional
25+
.ofNullable(api.getComponents())
26+
.map(Components::getPathItems).orElse(null)
27+
).forEach(this::process);
28+
Optional.ofNullable(api.getComponents())
29+
.stream().flatMap(it -> nullSafe(it.getParameters()).entrySet().stream())
30+
.forEach(it -> process(it.getValue()));
31+
32+
}
33+
34+
private <T,V> Map<T, V> nullSafe(Map<T, V> v) {
35+
if(v == null) return Map.of();
36+
return v;
37+
}
38+
39+
private <T> List<T> nullSafe(List<T> v) {
40+
return Optional.ofNullable(v).orElse(List.of());
41+
}
42+
protected void process(String name, PathItem item) {
43+
nullSafe(item.readOperations())
44+
.forEach(this::process);
45+
}
46+
47+
private void process(Operation operation) {
48+
nullSafe(operation.getParameters()).forEach(this::process);
49+
nullSafe(operation.getResponses()).values().stream()
50+
.flatMap(it -> nullSafe(it.getHeaders()).values().stream())
51+
.forEach(this::process);
52+
}
53+
54+
private final Function<Parameter, Parameter.StyleEnum> defaultFormat = par -> {
55+
if(par instanceof QueryParameter || par instanceof CookieParameter) {
56+
return Parameter.StyleEnum.FORM;
57+
}
58+
return Parameter.StyleEnum.SIMPLE;
59+
};
60+
61+
private void process(Header header) {
62+
if(header == null) {
63+
return;
64+
}
65+
if(header.getStyle() == Header.StyleEnum.SIMPLE) {
66+
if(header.getExplode() == Boolean.FALSE) {
67+
header.setExplode(null);
68+
}
69+
header.setStyle(null);
70+
}
71+
}
72+
73+
private void process(Parameter parameter) {
74+
var defStyle = defaultFormat.apply(parameter);
75+
76+
if(defaultExplode(defStyle, parameter.getExplode())) {
77+
parameter.setExplode(null);
78+
}
79+
80+
if(parameter.getStyle() == defStyle) {
81+
parameter.setStyle(null);
82+
}
83+
}
84+
85+
private boolean defaultExplode(Parameter.StyleEnum defStyle, Boolean explode) {
86+
return (defStyle == Parameter.StyleEnum.FORM) == explode;
87+
}
88+
}

‎src/test/java/com/amartus/sonata/blender/impl/ValidateSpecificationTest.java

+11
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,9 @@
2525
import java.util.stream.Stream;
2626

2727
import static net.javacrumbs.jsonunit.assertj.JsonAssertions.assertThatJson;
28+
import static org.assertj.core.api.Assertions.contentOf;
2829
import static org.assertj.core.api.Assertions.entry;
30+
import static org.assertj.core.api.Assertions.assertThat;
2931
import static org.junit.jupiter.api.Assertions.assertTrue;
3032

3133
public class ValidateSpecificationTest {
@@ -118,6 +120,15 @@ public void strictModeSupportsInheritance() throws IOException {
118120
);
119121
}
120122

123+
@Test
124+
public void doesNotHaveDefaultValuesForParameters() throws IOException {
125+
Stream<String> args = args(target);
126+
var builder = builder();
127+
builder.build().parse(args.toArray(String[]::new)).run();
128+
129+
assertThat(contentOf(target.toFile())).doesNotContain("exploded", "style");
130+
}
131+
121132
@Test
122133
public void respectTarget() throws Exception {
123134
Stream<String> args = Streams.concat(args(target), Stream.of("--auto-discover"));

0 commit comments

Comments
 (0)