Skip to content

Commit 8167aa1

Browse files
authored
[java][feign] Fix model combining properties and additional properties (#19713)
1 parent c3c2e7a commit 8167aa1

File tree

13 files changed

+105
-48
lines changed

13 files changed

+105
-48
lines changed

bin/utils/test_file_list.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@
5353
sha256: 15eeb6d8a9a79d0f1930b861540d9c5780d6c49ea4fdb68269ac3e7ec481e142
5454
- filename: "samples/client/petstore/java/webclient/src/test/java/org/openapitools/client/JacksonTest.java"
5555
sha256: 45cdaba3d2adc212cd4f0184ad475419a95e2326254c2ef84175e210c922b2f3
56+
- filename: "samples/client/petstore/java/feign/src/test/java/org/openapitools/client/JacksonTest.java"
57+
sha256: 45cdaba3d2adc212cd4f0184ad475419a95e2326254c2ef84175e210c922b2f3
5658
# rust axum test files
5759
- filename: "samples/server/petstore/rust-axum/output/rust-axum-oneof/tests/oneof_with_discriminator.rs"
5860
sha256: 2d4f5a069fdcb3057bb078d5e75b3de63cd477b97725e457079df24bd2c30600

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

Lines changed: 8 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"));

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
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesAnyType.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
import com.fasterxml.jackson.annotation.JsonValue;
2929
import io.swagger.annotations.ApiModel;
3030
import io.swagger.annotations.ApiModelProperty;
31-
import java.util.HashMap;
32-
import java.util.Map;
3331
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3432
import com.fasterxml.jackson.annotation.JsonTypeName;
3533

@@ -41,13 +39,12 @@
4139
})
4240
@javax.annotation.concurrent.Immutable
4341
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.12.0-SNAPSHOT")
44-
public class AdditionalPropertiesAnyType extends HashMap<String, Object> {
42+
public class AdditionalPropertiesAnyType {
4543
public static final String JSON_PROPERTY_NAME = "name";
4644
@javax.annotation.Nullable
4745
private String name;
4846

4947
public AdditionalPropertiesAnyType() {
50-
5148
}
5249

5350
public AdditionalPropertiesAnyType name(@javax.annotation.Nullable String name) {
@@ -134,8 +131,8 @@ public int hashCode() {
134131
public String toString() {
135132
StringBuilder sb = new StringBuilder();
136133
sb.append("class AdditionalPropertiesAnyType {\n");
137-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
138134
sb.append(" name: ").append(toIndentedString(name)).append("\n");
135+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
139136
sb.append("}");
140137
return sb.toString();
141138
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesArray.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@
2828
import com.fasterxml.jackson.annotation.JsonValue;
2929
import io.swagger.annotations.ApiModel;
3030
import io.swagger.annotations.ApiModelProperty;
31-
import java.util.HashMap;
3231
import java.util.List;
33-
import java.util.Map;
3432
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3533
import com.fasterxml.jackson.annotation.JsonTypeName;
3634

@@ -42,13 +40,12 @@
4240
})
4341
@javax.annotation.concurrent.Immutable
4442
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.12.0-SNAPSHOT")
45-
public class AdditionalPropertiesArray extends HashMap<String, List> {
43+
public class AdditionalPropertiesArray {
4644
public static final String JSON_PROPERTY_NAME = "name";
4745
@javax.annotation.Nullable
4846
private String name;
4947

5048
public AdditionalPropertiesArray() {
51-
5249
}
5350

5451
public AdditionalPropertiesArray name(@javax.annotation.Nullable String name) {
@@ -135,8 +132,8 @@ public int hashCode() {
135132
public String toString() {
136133
StringBuilder sb = new StringBuilder();
137134
sb.append("class AdditionalPropertiesArray {\n");
138-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
139135
sb.append(" name: ").append(toIndentedString(name)).append("\n");
136+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
140137
sb.append("}");
141138
return sb.toString();
142139
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesBoolean.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
import com.fasterxml.jackson.annotation.JsonValue;
2929
import io.swagger.annotations.ApiModel;
3030
import io.swagger.annotations.ApiModelProperty;
31-
import java.util.HashMap;
32-
import java.util.Map;
3331
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3432
import com.fasterxml.jackson.annotation.JsonTypeName;
3533

@@ -41,13 +39,12 @@
4139
})
4240
@javax.annotation.concurrent.Immutable
4341
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.12.0-SNAPSHOT")
44-
public class AdditionalPropertiesBoolean extends HashMap<String, Boolean> {
42+
public class AdditionalPropertiesBoolean {
4543
public static final String JSON_PROPERTY_NAME = "name";
4644
@javax.annotation.Nullable
4745
private String name;
4846

4947
public AdditionalPropertiesBoolean() {
50-
5148
}
5249

5350
public AdditionalPropertiesBoolean name(@javax.annotation.Nullable String name) {
@@ -134,8 +131,8 @@ public int hashCode() {
134131
public String toString() {
135132
StringBuilder sb = new StringBuilder();
136133
sb.append("class AdditionalPropertiesBoolean {\n");
137-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
138134
sb.append(" name: ").append(toIndentedString(name)).append("\n");
135+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
139136
sb.append("}");
140137
return sb.toString();
141138
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesInteger.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
import com.fasterxml.jackson.annotation.JsonValue;
2929
import io.swagger.annotations.ApiModel;
3030
import io.swagger.annotations.ApiModelProperty;
31-
import java.util.HashMap;
32-
import java.util.Map;
3331
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3432
import com.fasterxml.jackson.annotation.JsonTypeName;
3533

@@ -41,13 +39,12 @@
4139
})
4240
@javax.annotation.concurrent.Immutable
4341
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.12.0-SNAPSHOT")
44-
public class AdditionalPropertiesInteger extends HashMap<String, Integer> {
42+
public class AdditionalPropertiesInteger {
4543
public static final String JSON_PROPERTY_NAME = "name";
4644
@javax.annotation.Nullable
4745
private String name;
4846

4947
public AdditionalPropertiesInteger() {
50-
5148
}
5249

5350
public AdditionalPropertiesInteger name(@javax.annotation.Nullable String name) {
@@ -134,8 +131,8 @@ public int hashCode() {
134131
public String toString() {
135132
StringBuilder sb = new StringBuilder();
136133
sb.append("class AdditionalPropertiesInteger {\n");
137-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
138134
sb.append(" name: ").append(toIndentedString(name)).append("\n");
135+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
139136
sb.append("}");
140137
return sb.toString();
141138
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesNumber.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
import io.swagger.annotations.ApiModel;
3030
import io.swagger.annotations.ApiModelProperty;
3131
import java.math.BigDecimal;
32-
import java.util.HashMap;
33-
import java.util.Map;
3432
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3533
import com.fasterxml.jackson.annotation.JsonTypeName;
3634

@@ -42,13 +40,12 @@
4240
})
4341
@javax.annotation.concurrent.Immutable
4442
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.12.0-SNAPSHOT")
45-
public class AdditionalPropertiesNumber extends HashMap<String, BigDecimal> {
43+
public class AdditionalPropertiesNumber {
4644
public static final String JSON_PROPERTY_NAME = "name";
4745
@javax.annotation.Nullable
4846
private String name;
4947

5048
public AdditionalPropertiesNumber() {
51-
5249
}
5350

5451
public AdditionalPropertiesNumber name(@javax.annotation.Nullable String name) {
@@ -135,8 +132,8 @@ public int hashCode() {
135132
public String toString() {
136133
StringBuilder sb = new StringBuilder();
137134
sb.append("class AdditionalPropertiesNumber {\n");
138-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
139135
sb.append(" name: ").append(toIndentedString(name)).append("\n");
136+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
140137
sb.append("}");
141138
return sb.toString();
142139
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesObject.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@
2828
import com.fasterxml.jackson.annotation.JsonValue;
2929
import io.swagger.annotations.ApiModel;
3030
import io.swagger.annotations.ApiModelProperty;
31-
import java.util.HashMap;
3231
import java.util.Map;
3332
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3433
import com.fasterxml.jackson.annotation.JsonTypeName;
@@ -41,13 +40,12 @@
4140
})
4241
@javax.annotation.concurrent.Immutable
4342
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.12.0-SNAPSHOT")
44-
public class AdditionalPropertiesObject extends HashMap<String, Map> {
43+
public class AdditionalPropertiesObject {
4544
public static final String JSON_PROPERTY_NAME = "name";
4645
@javax.annotation.Nullable
4746
private String name;
4847

4948
public AdditionalPropertiesObject() {
50-
5149
}
5250

5351
public AdditionalPropertiesObject name(@javax.annotation.Nullable String name) {
@@ -134,8 +132,8 @@ public int hashCode() {
134132
public String toString() {
135133
StringBuilder sb = new StringBuilder();
136134
sb.append("class AdditionalPropertiesObject {\n");
137-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
138135
sb.append(" name: ").append(toIndentedString(name)).append("\n");
136+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
139137
sb.append("}");
140138
return sb.toString();
141139
}

samples/client/petstore/java/feign-no-nullable/src/main/java/org/openapitools/client/model/AdditionalPropertiesString.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,6 @@
2828
import com.fasterxml.jackson.annotation.JsonValue;
2929
import io.swagger.annotations.ApiModel;
3030
import io.swagger.annotations.ApiModelProperty;
31-
import java.util.HashMap;
32-
import java.util.Map;
3331
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3432
import com.fasterxml.jackson.annotation.JsonTypeName;
3533

@@ -41,13 +39,12 @@
4139
})
4240
@javax.annotation.concurrent.Immutable
4341
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.12.0-SNAPSHOT")
44-
public class AdditionalPropertiesString extends HashMap<String, String> {
42+
public class AdditionalPropertiesString {
4543
public static final String JSON_PROPERTY_NAME = "name";
4644
@javax.annotation.Nullable
4745
private String name;
4846

4947
public AdditionalPropertiesString() {
50-
5148
}
5249

5350
public AdditionalPropertiesString name(@javax.annotation.Nullable String name) {
@@ -134,8 +131,8 @@ public int hashCode() {
134131
public String toString() {
135132
StringBuilder sb = new StringBuilder();
136133
sb.append("class AdditionalPropertiesString {\n");
137-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
138134
sb.append(" name: ").append(toIndentedString(name)).append("\n");
135+
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
139136
sb.append("}");
140137
return sb.toString();
141138
}

0 commit comments

Comments
 (0)