Skip to content

Commit b6ecacc

Browse files
authored
Merge branch 'OpenAPITools:master' into master
2 parents 15ab408 + 8167aa1 commit b6ecacc

File tree

430 files changed

+3466
-146
lines changed

Some content is hidden

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

430 files changed

+3466
-146
lines changed

bin/utils/test_file_list.yaml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@
2525
sha256: 04715cabbe9bd27ff98dd56e3db489ebc9ffbf98d9af104a6707b0a40ab4f8fe
2626
- filename: "samples/client/echo_api/java/resttemplate/src/test/java/org/openapitools/client/api/AuthApiTest.java"
2727
sha256: 38193bbad7f3eef087bc1474352e484178b14a2b8c0e0ba0cd4e4960516a14f9
28+
- filename: "samples/client/petstore/java/resttemplate/src/test/java/org/openapitools/client/JacksonTest.java"
29+
sha256: 90e511a75178f26c8b73a6c77d16d7f134c51f959e8c72191bbe935b08436b22
2830
- filename: "samples/client/petstore/java/jersey2-java8/src/test/java/org/openapitools/client/api/PetApiTest.java"
2931
sha256: 24c6a39a9d7327d397dc038c368a19c84f14ed96a69fe28d53719b3eaf0a725c
3032
- filename: "samples/client/petstore/java/jersey3/src/test/java/org/openapitools/client/api/PetApiTest.java"
@@ -49,6 +51,10 @@
4951
sha256: 67a9e63e13ebddac21cb236aa015edce30f5d3bd8d6adcf50044cad00d48c45e
5052
- filename: "samples/openapi3/client/petstore/java/jersey2-java8/src/test/java/org/openapitools/client/model/ZebraTest.java"
5153
sha256: 15eeb6d8a9a79d0f1930b861540d9c5780d6c49ea4fdb68269ac3e7ec481e142
54+
- filename: "samples/client/petstore/java/webclient/src/test/java/org/openapitools/client/JacksonTest.java"
55+
sha256: 45cdaba3d2adc212cd4f0184ad475419a95e2326254c2ef84175e210c922b2f3
56+
- filename: "samples/client/petstore/java/feign/src/test/java/org/openapitools/client/JacksonTest.java"
57+
sha256: 45cdaba3d2adc212cd4f0184ad475419a95e2326254c2ef84175e210c922b2f3
5258
# rust axum test files
5359
- filename: "samples/server/petstore/rust-axum/output/rust-axum-oneof/tests/oneof_with_discriminator.rs"
5460
sha256: 2d4f5a069fdcb3057bb078d5e75b3de63cd477b97725e457079df24bd2c30600

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/JavaClientCodegen.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -506,6 +506,14 @@ public void processOpts() {
506506
supportingFiles.add(new SupportingFile("ParamExpander.mustache", invokerFolder, "ParamExpander.java"));
507507
}
508508
supportingFiles.add(new SupportingFile("EncodingUtils.mustache", invokerFolder, "EncodingUtils.java"));
509+
510+
// Composed schemas can have the 'additionalProperties' keyword, as specified in JSON schema.
511+
// In principle, this should be enabled by default for all code generators. However due to limitations
512+
// in other code generators, support needs to be enabled on a case-by-case basis.
513+
// The flag below should be set for all Java libraries, but the templates need to be ported
514+
// one by one for each library.
515+
supportsAdditionalPropertiesWithComposedSchema = true;
516+
509517
} else if (OKHTTP_GSON.equals(getLibrary()) || StringUtils.isEmpty(getLibrary())) {
510518
// the "okhttp-gson" library template requires "ApiCallback.mustache" for async call
511519
supportingFiles.add(new SupportingFile("ApiCallback.mustache", invokerFolder, "ApiCallback.java"));
@@ -583,8 +591,24 @@ public void processOpts() {
583591
} else if (RESTTEMPLATE.equals(getLibrary())) {
584592
forceSerializationLibrary(SERIALIZATION_LIBRARY_JACKSON);
585593
supportingFiles.add(new SupportingFile("auth/Authentication.mustache", authFolder, "Authentication.java"));
594+
595+
// Composed schemas can have the 'additionalProperties' keyword, as specified in JSON schema.
596+
// In principle, this should be enabled by default for all code generators. However due to limitations
597+
// in other code generators, support needs to be enabled on a case-by-case basis.
598+
// The flag below should be set for all Java libraries, but the templates need to be ported
599+
// one by one for each library.
600+
supportsAdditionalPropertiesWithComposedSchema = true;
601+
586602
} else if (WEBCLIENT.equals(getLibrary())) {
587603
forceSerializationLibrary(SERIALIZATION_LIBRARY_JACKSON);
604+
605+
// Composed schemas can have the 'additionalProperties' keyword, as specified in JSON schema.
606+
// In principle, this should be enabled by default for all code generators. However due to limitations
607+
// in other code generators, support needs to be enabled on a case-by-case basis.
608+
// The flag below should be set for all Java libraries, but the templates need to be ported
609+
// one by one for each library.
610+
supportsAdditionalPropertiesWithComposedSchema = true;
611+
588612
} else if (RESTCLIENT.equals(getLibrary())) {
589613
forceSerializationLibrary(SERIALIZATION_LIBRARY_JACKSON);
590614
applyJakartaPackage();

modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/RustClientCodegen.java

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -633,6 +633,18 @@ public OperationsMap postProcessOperationsWithModels(OperationsMap objs, List<Mo
633633
List<CodegenOperation> operations = objectMap.getOperation();
634634
for (CodegenOperation operation : operations) {
635635
if (operation.pathParams != null && operation.pathParams.size() > 0) {
636+
637+
// For types with `isAnyType` we assume it's a `serde_json::Value` type.
638+
// However for path, query, and headers it's unlikely to be JSON so we default to `String`.
639+
// Note that we keep the default `serde_json::Value` for body parameters.
640+
for (var param : operation.allParams) {
641+
if (param.isAnyType && (param.isPathParam || param.isQueryParam || param.isHeaderParam)) {
642+
param.dataType = "String";
643+
param.isPrimitiveType = true;
644+
param.isString = true;
645+
}
646+
}
647+
636648
for (var pathParam : operation.pathParams) {
637649
if (!pathParam.baseName.contains("-")) {
638650
continue;

modules/openapi-generator/src/main/resources/Java/libraries/feign/pojo.mustache

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,7 +263,8 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
263263
}{{#hasVars}}
264264
{{classname}} {{classVarName}} = ({{classname}}) o;
265265
return {{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}equalsNullable(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{#isByteArray}}Arrays{{/isByteArray}}{{^isByteArray}}Objects{{/isByteArray}}.equals(this.{{name}}, {{classVarName}}.{{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}} &&
266-
{{/-last}}{{/vars}}{{#parent}} &&
266+
{{/-last}}{{/vars}}{{#additionalPropertiesType}} &&
267+
Objects.equals(this.additionalProperties, {{classVarName}}.additionalProperties){{/additionalPropertiesType}}{{#parent}} &&
267268
super.equals(o){{/parent}};{{/hasVars}}{{^hasVars}}
268269
return {{#parent}}super.equals(o){{/parent}}{{^parent}}true{{/parent}};{{/hasVars}}
269270
{{/useReflectionEqualsHashCode}}
@@ -279,7 +280,7 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
279280
return HashCodeBuilder.reflectionHashCode(this);
280281
{{/useReflectionEqualsHashCode}}
281282
{{^useReflectionEqualsHashCode}}
282-
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}});
283+
return Objects.hash({{#vars}}{{#vendorExtensions.x-is-jackson-optional-nullable}}hashCodeNullable({{name}}){{/vendorExtensions.x-is-jackson-optional-nullable}}{{^vendorExtensions.x-is-jackson-optional-nullable}}{{^isByteArray}}{{name}}{{/isByteArray}}{{#isByteArray}}Arrays.hashCode({{name}}){{/isByteArray}}{{/vendorExtensions.x-is-jackson-optional-nullable}}{{^-last}}, {{/-last}}{{/vars}}{{#parent}}{{#hasVars}}, {{/hasVars}}super.hashCode(){{/parent}}{{#additionalPropertiesType}}, additionalProperties{{/additionalPropertiesType}});
283284
{{/useReflectionEqualsHashCode}}
284285
}{{#vendorExtensions.x-jackson-optional-nullable-helpers}}
285286
@@ -300,6 +301,9 @@ public class {{classname}} {{#parent}}extends {{{.}}} {{/parent}}{{#vendorExtens
300301
{{#vars}}
301302
sb.append(" {{name}}: ").append({{#isPassword}}"*"{{/isPassword}}{{^isPassword}}toIndentedString({{name}}){{/isPassword}}).append("\n");
302303
{{/vars}}
304+
{{#additionalPropertiesType}}
305+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
306+
{{/additionalPropertiesType}}
303307
sb.append("}");
304308
return sb.toString();
305309
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
{{#additionalPropertiesType}}
2+
/**
3+
* A container for additional, undeclared properties.
4+
* This is a holder for any undeclared properties as specified with
5+
* the 'additionalProperties' keyword in the OAS document.
6+
*/
7+
private Map<String, {{{.}}}> additionalProperties;
8+
9+
/**
10+
* Set the additional (undeclared) property with the specified name and value.
11+
* If the property does not already exist, create it otherwise replace it.
12+
* @param key the name of the property
13+
* @param value the value of the property
14+
* @return self reference
15+
*/
16+
@JsonAnySetter
17+
public {{classname}} putAdditionalProperty(String key, {{{.}}} value) {
18+
if (this.additionalProperties == null) {
19+
this.additionalProperties = new HashMap<String, {{{.}}}>();
20+
}
21+
this.additionalProperties.put(key, value);
22+
return this;
23+
}
24+
25+
/**
26+
* Return the additional (undeclared) properties.
27+
* @return the additional (undeclared) properties
28+
*/
29+
@JsonAnyGetter
30+
public Map<String, {{{.}}}> getAdditionalProperties() {
31+
return additionalProperties;
32+
}
33+
34+
/**
35+
* Return the additional (undeclared) property with the specified name.
36+
* @param key the name of the property
37+
* @return the additional (undeclared) property with the specified name
38+
*/
39+
public {{{.}}} getAdditionalProperty(String key) {
40+
if (this.additionalProperties == null) {
41+
return null;
42+
}
43+
return this.additionalProperties.get(key);
44+
}
45+
{{/additionalPropertiesType}}
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
{{>licenseInfo}}
2+
3+
package {{package}};
4+
5+
{{#useReflectionEqualsHashCode}}
6+
import org.apache.commons.lang3.builder.EqualsBuilder;
7+
import org.apache.commons.lang3.builder.HashCodeBuilder;
8+
{{/useReflectionEqualsHashCode}}
9+
{{#models}}
10+
{{#model}}
11+
{{#additionalPropertiesType}}
12+
import java.util.Map;
13+
import java.util.HashMap;
14+
import com.fasterxml.jackson.annotation.JsonAnyGetter;
15+
import com.fasterxml.jackson.annotation.JsonAnySetter;
16+
{{/additionalPropertiesType}}
17+
{{/model}}
18+
{{/models}}
19+
import java.util.Objects;
20+
import java.util.Arrays;
21+
{{#imports}}
22+
import {{import}};
23+
{{/imports}}
24+
{{#serializableModel}}
25+
import java.io.Serializable;
26+
{{/serializableModel}}
27+
{{#jackson}}
28+
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
29+
import com.fasterxml.jackson.annotation.JsonTypeName;
30+
{{#withXml}}
31+
import com.fasterxml.jackson.dataformat.xml.annotation.*;
32+
{{/withXml}}
33+
{{#vendorExtensions.x-has-readonly-properties}}
34+
import com.fasterxml.jackson.annotation.JsonCreator;
35+
{{/vendorExtensions.x-has-readonly-properties}}
36+
{{/jackson}}
37+
{{#withXml}}
38+
import {{javaxPackage}}.xml.bind.annotation.*;
39+
import {{javaxPackage}}.xml.bind.annotation.adapters.*;
40+
import io.github.threetenjaxb.core.*;
41+
{{/withXml}}
42+
{{#jsonb}}
43+
import java.lang.reflect.Type;
44+
import {{javaxPackage}}.json.bind.annotation.JsonbTypeDeserializer;
45+
import {{javaxPackage}}.json.bind.annotation.JsonbTypeSerializer;
46+
import {{javaxPackage}}.json.bind.serializer.DeserializationContext;
47+
import {{javaxPackage}}.json.bind.serializer.JsonbDeserializer;
48+
import {{javaxPackage}}.json.bind.serializer.JsonbSerializer;
49+
import {{javaxPackage}}.json.bind.serializer.SerializationContext;
50+
import {{javaxPackage}}.json.stream.JsonGenerator;
51+
import {{javaxPackage}}.json.stream.JsonParser;
52+
import {{javaxPackage}}.json.bind.annotation.JsonbProperty;
53+
{{#vendorExtensions.x-has-readonly-properties}}
54+
import {{javaxPackage}}.json.bind.annotation.JsonbCreator;
55+
{{/vendorExtensions.x-has-readonly-properties}}
56+
{{/jsonb}}
57+
{{#parcelableModel}}
58+
import android.os.Parcelable;
59+
import android.os.Parcel;
60+
{{/parcelableModel}}
61+
{{#useBeanValidation}}
62+
import {{javaxPackage}}.validation.constraints.*;
63+
import {{javaxPackage}}.validation.Valid;
64+
{{/useBeanValidation}}
65+
{{#performBeanValidation}}
66+
import org.hibernate.validator.constraints.*;
67+
{{/performBeanValidation}}
68+
{{#supportUrlQuery}}
69+
import java.io.UnsupportedEncodingException;
70+
import java.net.URLEncoder;
71+
import java.util.StringJoiner;
72+
{{/supportUrlQuery}}
73+
74+
{{#models}}
75+
{{#model}}
76+
{{#isEnum}}{{>modelEnum}}{{/isEnum}}{{^isEnum}}{{#vendorExtensions.x-is-one-of-interface}}{{>oneof_interface}}{{/vendorExtensions.x-is-one-of-interface}}{{^vendorExtensions.x-is-one-of-interface}}{{>pojo}}{{/vendorExtensions.x-is-one-of-interface}}{{/isEnum}}
77+
{{/model}}
78+
{{/models}}

0 commit comments

Comments
 (0)