Skip to content
This repository was archived by the owner on Dec 25, 2024. It is now read-only.

Commit 1563295

Browse files
authored
Java client, adds parameter classes (#398)
* Adds parameter base classes * Generates parameter classes * Fixes java parameter filenames, fixes java errors * Fixes in + style value for parameters * Adds 4 separate base classes for parameters * Fixes mvn test run * Fixes build and test errors * Adds parameter tests * Adds parameter docs * Fixes readme links to parameter docs * Docs regen * Samples regen
1 parent 6f5ca75 commit 1563295

File tree

151 files changed

+5951
-62
lines changed

Some content is hidden

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

151 files changed

+5951
-62
lines changed

docs/generators/java.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
179179
| ---- | --------- | ---------- |
180180
|schemas|✓|OAS3
181181
|responses|✓|OAS3
182-
|parameters||OAS3
182+
|parameters||OAS3
183183
|examples|✗|OAS3
184184
|requestBodies|✓|OAS3
185185
|headers|✓|OAS3
@@ -221,7 +221,7 @@ These options may be applied as additional-properties (cli) or configOptions (pl
221221
|Security|✗|OAS2,OAS3
222222
|ComponentSchemas|✓|OAS3
223223
|ComponentResponses|✓|OAS3
224-
|ComponentParameters||OAS3
224+
|ComponentParameters||OAS3
225225
|ComponentRequestBodies|✓|OAS3
226226
|ComponentHeaders|✓|OAS3
227227
|ComponentSecuritySchemes|✓|OAS3

samples/client/3_0_3_unit_test/java/.openapi-generator/FILES

+12-1
Original file line numberDiff line numberDiff line change
@@ -194,11 +194,20 @@ src/main/java/org/openapijsonschematools/client/header/HeaderBase.java
194194
src/main/java/org/openapijsonschematools/client/header/PrefixSeparatorIterator.java
195195
src/main/java/org/openapijsonschematools/client/header/Rfc6570Serializer.java
196196
src/main/java/org/openapijsonschematools/client/header/SchemaHeader.java
197-
src/main/java/org/openapijsonschematools/client/header/StyleSimpleSerializer.java
197+
src/main/java/org/openapijsonschematools/client/header/StyleSerializer.java
198198
src/main/java/org/openapijsonschematools/client/mediatype/Encoding.java
199199
src/main/java/org/openapijsonschematools/client/mediatype/MediaType.java
200+
src/main/java/org/openapijsonschematools/client/parameter/ContentNonQueryParameter.java
201+
src/main/java/org/openapijsonschematools/client/parameter/ContentParameter.java
202+
src/main/java/org/openapijsonschematools/client/parameter/ContentQueryParameter.java
203+
src/main/java/org/openapijsonschematools/client/parameter/NonQueryParameter.java
204+
src/main/java/org/openapijsonschematools/client/parameter/ParameterBase.java
200205
src/main/java/org/openapijsonschematools/client/parameter/ParameterInType.java
201206
src/main/java/org/openapijsonschematools/client/parameter/ParameterStyle.java
207+
src/main/java/org/openapijsonschematools/client/parameter/QueryParameter.java
208+
src/main/java/org/openapijsonschematools/client/parameter/SchemaNonQueryParameter.java
209+
src/main/java/org/openapijsonschematools/client/parameter/SchemaParameter.java
210+
src/main/java/org/openapijsonschematools/client/parameter/SchemaQueryParameter.java
202211
src/main/java/org/openapijsonschematools/client/requestbody/GenericRequestBody.java
203212
src/main/java/org/openapijsonschematools/client/requestbody/RequestBodySerializer.java
204213
src/main/java/org/openapijsonschematools/client/requestbody/SerializedRequestBody.java
@@ -310,6 +319,8 @@ src/main/java/org/openapijsonschematools/client/servers/ServerWithoutVariables.j
310319
src/test/java/org/openapijsonschematools/client/configurations/JsonSchemaKeywordFlagsTest.java
311320
src/test/java/org/openapijsonschematools/client/header/ContentHeaderTest.java
312321
src/test/java/org/openapijsonschematools/client/header/SchemaHeaderTest.java
322+
src/test/java/org/openapijsonschematools/client/parameter/SchemaNonQueryParameterTest.java
323+
src/test/java/org/openapijsonschematools/client/parameter/SchemaQueryParameterTest.java
313324
src/test/java/org/openapijsonschematools/client/requestbody/RequestBodySerializerTest.java
314325
src/test/java/org/openapijsonschematools/client/response/ResponseDeserializerTest.java
315326
src/test/java/org/openapijsonschematools/client/schemas/AnyTypeSchemaTest.java

samples/client/3_0_3_unit_test/java/src/main/java/org/openapijsonschematools/client/header/SchemaHeader.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ private static HttpHeaders toHeaders(String name, String value) {
3333
public HttpHeaders serialize(@Nullable Object inData, String name, boolean validate, SchemaConfiguration configuration) {
3434
var castInData = validate ? schema.validate(inData, configuration) : inData;
3535
boolean usedExplode = explode != null && explode;
36-
var value = StyleSimpleSerializer.serializeSimple(castInData, name, usedExplode, false);
36+
var value = StyleSerializer.serializeSimple(castInData, name, usedExplode, false);
3737
return toHeaders(name, value);
3838
}
3939

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
package org.openapijsonschematools.client.header;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
5+
public class StyleSerializer extends Rfc6570Serializer {
6+
public static String serializeSimple(
7+
@Nullable Object inData,
8+
String name,
9+
boolean explode,
10+
boolean percentEncode
11+
) {
12+
var prefixSeparatorIterator = new PrefixSeparatorIterator("", ",");
13+
return rfc6570Expansion(
14+
name,
15+
inData,
16+
explode,
17+
percentEncode,
18+
prefixSeparatorIterator
19+
);
20+
}
21+
22+
public static String serializeForm(
23+
@Nullable Object inData,
24+
String name,
25+
boolean explode,
26+
boolean percentEncode,
27+
@Nullable PrefixSeparatorIterator iterator,
28+
boolean isCookie
29+
) {
30+
// todo check that the prefix and suffix matches this one
31+
String prefix = isCookie ? "" : "?";
32+
PrefixSeparatorIterator usedIterator = iterator == null ? new PrefixSeparatorIterator(prefix, "&") : iterator;
33+
return rfc6570Expansion(
34+
name,
35+
inData,
36+
explode,
37+
percentEncode,
38+
usedIterator
39+
);
40+
}
41+
42+
public static String serializeMatrix(
43+
@Nullable Object inData,
44+
String name,
45+
boolean explode
46+
) {
47+
PrefixSeparatorIterator usedIterator = new PrefixSeparatorIterator(";", ";");
48+
return rfc6570Expansion(
49+
name,
50+
inData,
51+
explode,
52+
true,
53+
usedIterator
54+
);
55+
}
56+
57+
public static String serializeLabel(
58+
@Nullable Object inData,
59+
String name,
60+
boolean explode
61+
) {
62+
PrefixSeparatorIterator usedIterator = new PrefixSeparatorIterator(".", ".");
63+
return rfc6570Expansion(
64+
name,
65+
inData,
66+
explode,
67+
true,
68+
usedIterator
69+
);
70+
}
71+
72+
public static String serializeSpaceDelimited(
73+
@Nullable Object inData,
74+
String name,
75+
boolean explode,
76+
@Nullable PrefixSeparatorIterator iterator
77+
) {
78+
PrefixSeparatorIterator usedIterator = iterator == null ? new PrefixSeparatorIterator("", "%20") : iterator;
79+
return rfc6570Expansion(
80+
name,
81+
inData,
82+
explode,
83+
true,
84+
usedIterator
85+
);
86+
}
87+
88+
public static String serializePipeDelimited(
89+
@Nullable Object inData,
90+
String name,
91+
boolean explode,
92+
@Nullable PrefixSeparatorIterator iterator
93+
) {
94+
PrefixSeparatorIterator usedIterator = iterator == null ? new PrefixSeparatorIterator("", "|") : iterator;
95+
return rfc6570Expansion(
96+
name,
97+
inData,
98+
explode,
99+
true,
100+
usedIterator
101+
);
102+
}
103+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package org.openapijsonschematools.client.parameter;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
5+
import org.openapijsonschematools.client.mediatype.MediaType;
6+
7+
import java.util.Map;
8+
9+
public class ContentNonQueryParameter extends ContentParameter implements NonQueryParameter {
10+
11+
public ContentNonQueryParameter(String name, ParameterInType inType, boolean required, @Nullable ParameterStyle style, @Nullable Boolean explode, @Nullable Boolean allowReserved, Map<String, MediaType<?, ?>> content) {
12+
super(name, inType, required, style, explode, allowReserved, content);
13+
}
14+
15+
@Override
16+
public Map<String, String> serialize(@Nullable Object inData, boolean validate, SchemaConfiguration configuration) {
17+
return super.serialize(inData, validate, configuration);
18+
}
19+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
package org.openapijsonschematools.client.parameter;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
5+
import org.openapijsonschematools.client.contenttype.ContentTypeDetector;
6+
import org.openapijsonschematools.client.contenttype.ContentTypeSerializer;
7+
import org.openapijsonschematools.client.mediatype.MediaType;
8+
9+
import java.util.Map;
10+
11+
public class ContentParameter extends ParameterBase {
12+
public final Map<String, MediaType<?, ?>> content;
13+
14+
public ContentParameter(String name, ParameterInType inType, boolean required, @Nullable ParameterStyle style, @Nullable Boolean explode, @Nullable Boolean allowReserved, Map<String, MediaType<?, ?>> content) {
15+
super(name, inType, required, style, explode, allowReserved);
16+
this.content = content;
17+
}
18+
19+
protected Map<String, String> serialize(@Nullable Object inData, boolean validate, SchemaConfiguration configuration) {
20+
for (Map.Entry<String, MediaType<?, ?>> entry: content.entrySet()) {
21+
var castInData = validate ? entry.getValue().schema().validate(inData, configuration) : inData ;
22+
String contentType = entry.getKey();
23+
if (ContentTypeDetector.contentTypeIsJson(contentType)) {
24+
var value = ContentTypeSerializer.toJson(castInData);
25+
return Map.of(name, value);
26+
} else {
27+
throw new RuntimeException("Serialization of "+contentType+" has not yet been implemented");
28+
}
29+
}
30+
throw new RuntimeException("Invalid value for content, it was empty and must have 1 key value pair");
31+
}
32+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.openapijsonschematools.client.parameter;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
5+
import org.openapijsonschematools.client.header.PrefixSeparatorIterator;
6+
import org.openapijsonschematools.client.mediatype.MediaType;
7+
8+
import java.util.Map;
9+
10+
public class ContentQueryParameter extends ContentParameter implements QueryParameter {
11+
12+
public ContentQueryParameter(String name, ParameterInType inType, boolean required, @Nullable ParameterStyle style, @Nullable Boolean explode, @Nullable Boolean allowReserved, Map<String, MediaType<?, ?>> content) {
13+
super(name, inType, required, style, explode, allowReserved, content);
14+
}
15+
16+
@Override
17+
public Map<String, String> serialize(@Nullable Object inData, boolean validate, SchemaConfiguration configuration, PrefixSeparatorIterator iterator) {
18+
return super.serialize(inData, validate, configuration);
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package org.openapijsonschematools.client.parameter;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
5+
6+
import java.util.Map;
7+
8+
public interface NonQueryParameter {
9+
Map<String, String> serialize(@Nullable Object inData, boolean validate, SchemaConfiguration configuration);
10+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package org.openapijsonschematools.client.parameter;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.header.HeaderBase;
5+
import org.openapijsonschematools.client.header.PrefixSeparatorIterator;
6+
7+
public class ParameterBase extends HeaderBase {
8+
public final String name;
9+
public final ParameterInType inType;
10+
11+
public ParameterBase(String name, ParameterInType inType, boolean required, @Nullable ParameterStyle style, @Nullable Boolean explode, @Nullable Boolean allowReserved) {
12+
super(required, style, explode, allowReserved);
13+
this.name = name;
14+
this.inType = inType;
15+
}
16+
17+
protected ParameterStyle getStyle() {
18+
if (style != null) {
19+
return style;
20+
}
21+
if (inType == ParameterInType.QUERY || inType == ParameterInType.COOKIE) {
22+
return ParameterStyle.FORM;
23+
}
24+
// ParameterInType.HEADER || ParameterInType.PATH
25+
return ParameterStyle.SIMPLE;
26+
}
27+
28+
public PrefixSeparatorIterator getPrefixSeparatorIterator() {
29+
ParameterStyle usedStyle = getStyle();
30+
if (usedStyle == ParameterStyle.FORM) {
31+
return new PrefixSeparatorIterator("?", "&");
32+
} else if (usedStyle == ParameterStyle.SPACE_DELIMITED) {
33+
return new PrefixSeparatorIterator("", "%20");
34+
} else if (usedStyle == ParameterStyle.PIPE_DELIMITED) {
35+
return new PrefixSeparatorIterator("", "|");
36+
}
37+
throw new RuntimeException("No iterator possible for style="+usedStyle);
38+
}
39+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package org.openapijsonschematools.client.parameter;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
5+
import org.openapijsonschematools.client.header.PrefixSeparatorIterator;
6+
7+
import java.util.Map;
8+
9+
public interface QueryParameter {
10+
Map<String, String> serialize(@Nullable Object inData, boolean validate, SchemaConfiguration configuration, PrefixSeparatorIterator iterator);
11+
PrefixSeparatorIterator getPrefixSeparatorIterator();
12+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package org.openapijsonschematools.client.parameter;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
5+
import org.openapijsonschematools.client.header.PrefixSeparatorIterator;
6+
import org.openapijsonschematools.client.schemas.validation.JsonSchema;
7+
8+
import java.util.Map;
9+
10+
public class SchemaNonQueryParameter extends SchemaParameter implements NonQueryParameter {
11+
12+
public SchemaNonQueryParameter(String name, ParameterInType inType, boolean required, @Nullable ParameterStyle style, @Nullable Boolean explode, @Nullable Boolean allowReserved, JsonSchema<?> schema) {
13+
super(name, inType, required, style, explode, allowReserved, schema);
14+
}
15+
16+
@Override
17+
public Map<String, String> serialize(@Nullable Object inData, boolean validate, SchemaConfiguration configuration) {
18+
return super.serialize(inData, validate, configuration, null);
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package org.openapijsonschematools.client.parameter;
2+
3+
import org.checkerframework.checker.nullness.qual.Nullable;
4+
import org.openapijsonschematools.client.configurations.SchemaConfiguration;
5+
import org.openapijsonschematools.client.header.PrefixSeparatorIterator;
6+
import org.openapijsonschematools.client.header.StyleSerializer;
7+
import org.openapijsonschematools.client.schemas.validation.JsonSchema;
8+
import org.openapijsonschematools.client.header.HeaderBase;
9+
import org.openapijsonschematools.client.header.PrefixSeparatorIterator;
10+
import org.openapijsonschematools.client.header.StyleSerializer;
11+
import org.openapijsonschematools.client.schemas.validation.JsonSchema;
12+
import java.util.Map;
13+
14+
public class SchemaParameter extends ParameterBase {
15+
public final JsonSchema<?> schema;
16+
17+
public SchemaParameter(String name, ParameterInType inType, boolean required, @Nullable ParameterStyle style, @Nullable Boolean explode, @Nullable Boolean allowReserved, JsonSchema<?> schema) {
18+
super(name, inType, required, style, explode, allowReserved);
19+
this.schema = schema;
20+
}
21+
22+
protected Map<String, String> serialize(@Nullable Object inData, boolean validate, SchemaConfiguration configuration, @Nullable PrefixSeparatorIterator iterator) {
23+
var castInData = validate ? schema.validate(inData, configuration) : inData;
24+
ParameterStyle usedStyle = getStyle();
25+
boolean percentEncode = inType == ParameterInType.QUERY || inType == ParameterInType.PATH;
26+
String value;
27+
boolean usedExplode = explode == null ? usedStyle == ParameterStyle.FORM : explode;
28+
if (usedStyle == ParameterStyle.SIMPLE) {
29+
// header OR path
30+
value = StyleSerializer.serializeSimple(castInData, name, usedExplode, percentEncode);
31+
} else if (usedStyle == ParameterStyle.FORM) {
32+
// query OR cookie
33+
boolean isCookie = inType == ParameterInType.COOKIE;
34+
value = StyleSerializer.serializeForm(castInData, name, usedExplode, percentEncode, iterator, isCookie);
35+
} else if (usedStyle == ParameterStyle.LABEL) {
36+
// path
37+
value = StyleSerializer.serializeLabel(castInData, name, usedExplode);
38+
} else if (usedStyle == ParameterStyle.MATRIX) {
39+
// path
40+
value = StyleSerializer.serializeMatrix(castInData, name, usedExplode);
41+
} else if (usedStyle == ParameterStyle.SPACE_DELIMITED) {
42+
// query
43+
value = StyleSerializer.serializeSpaceDelimited(castInData, name, usedExplode, iterator);
44+
} else if (usedStyle == ParameterStyle.PIPE_DELIMITED) {
45+
// query
46+
value = StyleSerializer.serializePipeDelimited(castInData, name, usedExplode, iterator);
47+
} else {
48+
// usedStyle == ParameterStyle.DEEP_OBJECT
49+
// query
50+
throw new RuntimeException("Style deep object serialization has not yet been implemented.");
51+
}
52+
return Map.of(name, value);
53+
}
54+
}

0 commit comments

Comments
 (0)