Skip to content

Commit 304b3cb

Browse files
authored
[Java][Native] Fix POJOs with additionalProperties incorrectly extending HashMap (#21367)
* [Java][Native] Fix POJO with additionalProperties to not extend HashMap * [Java][Native] Update samples to remove HashMap extension
1 parent d7a7484 commit 304b3cb

File tree

9 files changed

+23
-40
lines changed

9 files changed

+23
-40
lines changed

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

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,6 +615,13 @@ public void processOpts() {
615615
supportingFiles.add(new SupportingFile("JSON.mustache", invokerFolder, "JSON.java"));
616616
supportingFiles.add(new SupportingFile("AbstractOpenApiSchema.mustache", modelsFolder, "AbstractOpenApiSchema.java"));
617617
forceSerializationLibrary(SERIALIZATION_LIBRARY_JACKSON);
618+
619+
// Composed schemas can have the 'additionalProperties' keyword, as specified in JSON schema.
620+
// In principle, this should be enabled by default for all code generators. However due to limitations
621+
// in other code generators, support needs to be enabled on a case-by-case basis.
622+
// The flag below should be set for all Java libraries, but the templates need to be ported
623+
// one by one for each library.
624+
supportsAdditionalPropertiesWithComposedSchema = true;
618625
} else if (libRestEasy) {
619626
supportingFiles.add(new SupportingFile("JSON.mustache", invokerFolder, "JSON.java"));
620627
forceSerializationLibrary(SERIALIZATION_LIBRARY_JACKSON);

samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/model/Drawing.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,7 @@
3030
import com.fasterxml.jackson.annotation.JsonValue;
3131
import java.util.ArrayList;
3232
import java.util.Arrays;
33-
import java.util.HashMap;
3433
import java.util.List;
35-
import java.util.Map;
3634
import org.openapitools.client.model.Fruit;
3735
import org.openapitools.client.model.NullableShape;
3836
import org.openapitools.client.model.Shape;
@@ -55,7 +53,7 @@
5553
Drawing.JSON_PROPERTY_SHAPES
5654
})
5755
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.15.0-SNAPSHOT")
58-
public class Drawing extends HashMap<String, Fruit> {
56+
public class Drawing {
5957
public static final String JSON_PROPERTY_MAIN_SHAPE = "mainShape";
6058
@javax.annotation.Nullable
6159
private Shape mainShape;
@@ -245,8 +243,7 @@ public boolean equals(Object o) {
245243
Objects.equals(this.shapeOrNull, drawing.shapeOrNull) &&
246244
equalsNullable(this.nullableShape, drawing.nullableShape) &&
247245
Objects.equals(this.shapes, drawing.shapes)&&
248-
Objects.equals(this.additionalProperties, drawing.additionalProperties) &&
249-
super.equals(o);
246+
Objects.equals(this.additionalProperties, drawing.additionalProperties);
250247
}
251248

252249
private static <T> boolean equalsNullable(JsonNullable<T> a, JsonNullable<T> b) {
@@ -255,7 +252,7 @@ private static <T> boolean equalsNullable(JsonNullable<T> a, JsonNullable<T> b)
255252

256253
@Override
257254
public int hashCode() {
258-
return Objects.hash(mainShape, shapeOrNull, hashCodeNullable(nullableShape), shapes, super.hashCode(), additionalProperties);
255+
return Objects.hash(mainShape, shapeOrNull, hashCodeNullable(nullableShape), shapes, additionalProperties);
259256
}
260257

261258
private static <T> int hashCodeNullable(JsonNullable<T> a) {
@@ -269,7 +266,6 @@ private static <T> int hashCodeNullable(JsonNullable<T> a) {
269266
public String toString() {
270267
StringBuilder sb = new StringBuilder();
271268
sb.append("class Drawing {\n");
272-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
273269
sb.append(" mainShape: ").append(toIndentedString(mainShape)).append("\n");
274270
sb.append(" shapeOrNull: ").append(toIndentedString(shapeOrNull)).append("\n");
275271
sb.append(" nullableShape: ").append(toIndentedString(nullableShape)).append("\n");

samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/model/NullableClass.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@
6262
NullableClass.JSON_PROPERTY_OBJECT_ITEMS_NULLABLE
6363
})
6464
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.15.0-SNAPSHOT")
65-
public class NullableClass extends HashMap<String, Object> {
65+
public class NullableClass {
6666
public static final String JSON_PROPERTY_INTEGER_PROP = "integer_prop";
6767
private JsonNullable<Integer> integerProp = JsonNullable.<Integer>undefined();
6868

@@ -603,8 +603,7 @@ public boolean equals(Object o) {
603603
equalsNullable(this.objectNullableProp, nullableClass.objectNullableProp) &&
604604
equalsNullable(this.objectAndItemsNullableProp, nullableClass.objectAndItemsNullableProp) &&
605605
Objects.equals(this.objectItemsNullable, nullableClass.objectItemsNullable)&&
606-
Objects.equals(this.additionalProperties, nullableClass.additionalProperties) &&
607-
super.equals(o);
606+
Objects.equals(this.additionalProperties, nullableClass.additionalProperties);
608607
}
609608

610609
private static <T> boolean equalsNullable(JsonNullable<T> a, JsonNullable<T> b) {
@@ -613,7 +612,7 @@ private static <T> boolean equalsNullable(JsonNullable<T> a, JsonNullable<T> b)
613612

614613
@Override
615614
public int hashCode() {
616-
return Objects.hash(hashCodeNullable(integerProp), hashCodeNullable(numberProp), hashCodeNullable(booleanProp), hashCodeNullable(stringProp), hashCodeNullable(dateProp), hashCodeNullable(datetimeProp), hashCodeNullable(arrayNullableProp), hashCodeNullable(arrayAndItemsNullableProp), arrayItemsNullable, hashCodeNullable(objectNullableProp), hashCodeNullable(objectAndItemsNullableProp), objectItemsNullable, super.hashCode(), additionalProperties);
615+
return Objects.hash(hashCodeNullable(integerProp), hashCodeNullable(numberProp), hashCodeNullable(booleanProp), hashCodeNullable(stringProp), hashCodeNullable(dateProp), hashCodeNullable(datetimeProp), hashCodeNullable(arrayNullableProp), hashCodeNullable(arrayAndItemsNullableProp), arrayItemsNullable, hashCodeNullable(objectNullableProp), hashCodeNullable(objectAndItemsNullableProp), objectItemsNullable, additionalProperties);
617616
}
618617

619618
private static <T> int hashCodeNullable(JsonNullable<T> a) {
@@ -627,7 +626,6 @@ private static <T> int hashCodeNullable(JsonNullable<T> a) {
627626
public String toString() {
628627
StringBuilder sb = new StringBuilder();
629628
sb.append("class NullableClass {\n");
630-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
631629
sb.append(" integerProp: ").append(toIndentedString(integerProp)).append("\n");
632630
sb.append(" numberProp: ").append(toIndentedString(numberProp)).append("\n");
633631
sb.append(" booleanProp: ").append(toIndentedString(booleanProp)).append("\n");

samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/model/TestInlineFreeformAdditionalPropertiesRequest.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
import com.fasterxml.jackson.annotation.JsonTypeName;
3030
import com.fasterxml.jackson.annotation.JsonValue;
3131
import java.util.Arrays;
32-
import java.util.HashMap;
33-
import java.util.Map;
3432
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3533

3634

@@ -42,7 +40,7 @@
4240
TestInlineFreeformAdditionalPropertiesRequest.JSON_PROPERTY_SOME_PROPERTY
4341
})
4442
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.15.0-SNAPSHOT")
45-
public class TestInlineFreeformAdditionalPropertiesRequest extends HashMap<String, Object> {
43+
public class TestInlineFreeformAdditionalPropertiesRequest {
4644
public static final String JSON_PROPERTY_SOME_PROPERTY = "someProperty";
4745
@javax.annotation.Nullable
4846
private String someProperty;
@@ -130,20 +128,18 @@ public boolean equals(Object o) {
130128
}
131129
TestInlineFreeformAdditionalPropertiesRequest testInlineFreeformAdditionalPropertiesRequest = (TestInlineFreeformAdditionalPropertiesRequest) o;
132130
return Objects.equals(this.someProperty, testInlineFreeformAdditionalPropertiesRequest.someProperty)&&
133-
Objects.equals(this.additionalProperties, testInlineFreeformAdditionalPropertiesRequest.additionalProperties) &&
134-
super.equals(o);
131+
Objects.equals(this.additionalProperties, testInlineFreeformAdditionalPropertiesRequest.additionalProperties);
135132
}
136133

137134
@Override
138135
public int hashCode() {
139-
return Objects.hash(someProperty, super.hashCode(), additionalProperties);
136+
return Objects.hash(someProperty, additionalProperties);
140137
}
141138

142139
@Override
143140
public String toString() {
144141
StringBuilder sb = new StringBuilder();
145142
sb.append("class TestInlineFreeformAdditionalPropertiesRequest {\n");
146-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
147143
sb.append(" someProperty: ").append(toIndentedString(someProperty)).append("\n");
148144
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
149145
sb.append("}");

samples/client/petstore/java/native-async/src/main/java/org/openapitools/client/model/Zebra.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,6 @@
2929
import com.fasterxml.jackson.annotation.JsonTypeName;
3030
import com.fasterxml.jackson.annotation.JsonValue;
3131
import java.util.Arrays;
32-
import java.util.HashMap;
33-
import java.util.Map;
3432
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3533

3634

@@ -43,7 +41,7 @@
4341
Zebra.JSON_PROPERTY_CLASS_NAME
4442
})
4543
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.15.0-SNAPSHOT")
46-
public class Zebra extends HashMap<String, Object> {
44+
public class Zebra {
4745
/**
4846
* Gets or Sets type
4947
*/
@@ -197,20 +195,18 @@ public boolean equals(Object o) {
197195
Zebra zebra = (Zebra) o;
198196
return Objects.equals(this.type, zebra.type) &&
199197
Objects.equals(this.className, zebra.className)&&
200-
Objects.equals(this.additionalProperties, zebra.additionalProperties) &&
201-
super.equals(o);
198+
Objects.equals(this.additionalProperties, zebra.additionalProperties);
202199
}
203200

204201
@Override
205202
public int hashCode() {
206-
return Objects.hash(type, className, super.hashCode(), additionalProperties);
203+
return Objects.hash(type, className, additionalProperties);
207204
}
208205

209206
@Override
210207
public String toString() {
211208
StringBuilder sb = new StringBuilder();
212209
sb.append("class Zebra {\n");
213-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
214210
sb.append(" type: ").append(toIndentedString(type)).append("\n");
215211
sb.append(" className: ").append(toIndentedString(className)).append("\n");
216212
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");

samples/client/petstore/java/native/src/main/java/org/openapitools/client/model/Drawing.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,7 @@
3232
import com.fasterxml.jackson.annotation.JsonValue;
3333
import java.util.ArrayList;
3434
import java.util.Arrays;
35-
import java.util.HashMap;
3635
import java.util.List;
37-
import java.util.Map;
3836
import org.openapitools.client.model.Fruit;
3937
import org.openapitools.client.model.NullableShape;
4038
import org.openapitools.client.model.Shape;
@@ -57,7 +55,7 @@
5755
Drawing.JSON_PROPERTY_SHAPES
5856
})
5957
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.15.0-SNAPSHOT")
60-
public class Drawing extends HashMap<String, Fruit> {
58+
public class Drawing {
6159
public static final String JSON_PROPERTY_MAIN_SHAPE = "mainShape";
6260
@javax.annotation.Nullable
6361
private Shape mainShape;
@@ -259,7 +257,6 @@ private static <T> int hashCodeNullable(JsonNullable<T> a) {
259257
public String toString() {
260258
StringBuilder sb = new StringBuilder();
261259
sb.append("class Drawing {\n");
262-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
263260
sb.append(" mainShape: ").append(toIndentedString(mainShape)).append("\n");
264261
sb.append(" shapeOrNull: ").append(toIndentedString(shapeOrNull)).append("\n");
265262
sb.append(" nullableShape: ").append(toIndentedString(nullableShape)).append("\n");

samples/client/petstore/java/native/src/main/java/org/openapitools/client/model/NullableClass.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@
6464
NullableClass.JSON_PROPERTY_OBJECT_ITEMS_NULLABLE
6565
})
6666
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.15.0-SNAPSHOT")
67-
public class NullableClass extends HashMap<String, Object> {
67+
public class NullableClass {
6868
public static final String JSON_PROPERTY_INTEGER_PROP = "integer_prop";
6969
private JsonNullable<Integer> integerProp = JsonNullable.<Integer>undefined();
7070

@@ -609,7 +609,6 @@ private static <T> int hashCodeNullable(JsonNullable<T> a) {
609609
public String toString() {
610610
StringBuilder sb = new StringBuilder();
611611
sb.append("class NullableClass {\n");
612-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
613612
sb.append(" integerProp: ").append(toIndentedString(integerProp)).append("\n");
614613
sb.append(" numberProp: ").append(toIndentedString(numberProp)).append("\n");
615614
sb.append(" booleanProp: ").append(toIndentedString(booleanProp)).append("\n");

samples/client/petstore/java/native/src/main/java/org/openapitools/client/model/TestInlineFreeformAdditionalPropertiesRequest.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
import com.fasterxml.jackson.annotation.JsonTypeName;
3232
import com.fasterxml.jackson.annotation.JsonValue;
3333
import java.util.Arrays;
34-
import java.util.HashMap;
35-
import java.util.Map;
3634
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3735

3836

@@ -44,7 +42,7 @@
4442
TestInlineFreeformAdditionalPropertiesRequest.JSON_PROPERTY_SOME_PROPERTY
4543
})
4644
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.15.0-SNAPSHOT")
47-
public class TestInlineFreeformAdditionalPropertiesRequest extends HashMap<String, Object> {
45+
public class TestInlineFreeformAdditionalPropertiesRequest {
4846
public static final String JSON_PROPERTY_SOME_PROPERTY = "someProperty";
4947
@javax.annotation.Nullable
5048
private String someProperty;
@@ -136,7 +134,6 @@ public int hashCode() {
136134
public String toString() {
137135
StringBuilder sb = new StringBuilder();
138136
sb.append("class TestInlineFreeformAdditionalPropertiesRequest {\n");
139-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
140137
sb.append(" someProperty: ").append(toIndentedString(someProperty)).append("\n");
141138
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");
142139
sb.append("}");

samples/client/petstore/java/native/src/main/java/org/openapitools/client/model/Zebra.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,6 @@
3131
import com.fasterxml.jackson.annotation.JsonTypeName;
3232
import com.fasterxml.jackson.annotation.JsonValue;
3333
import java.util.Arrays;
34-
import java.util.HashMap;
35-
import java.util.Map;
3634
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
3735

3836

@@ -45,7 +43,7 @@
4543
Zebra.JSON_PROPERTY_CLASS_NAME
4644
})
4745
@javax.annotation.Generated(value = "org.openapitools.codegen.languages.JavaClientCodegen", comments = "Generator version: 7.15.0-SNAPSHOT")
48-
public class Zebra extends HashMap<String, Object> {
46+
public class Zebra {
4947
/**
5048
* Gets or Sets type
5149
*/
@@ -202,7 +200,6 @@ public int hashCode() {
202200
public String toString() {
203201
StringBuilder sb = new StringBuilder();
204202
sb.append("class Zebra {\n");
205-
sb.append(" ").append(toIndentedString(super.toString())).append("\n");
206203
sb.append(" type: ").append(toIndentedString(type)).append("\n");
207204
sb.append(" className: ").append(toIndentedString(className)).append("\n");
208205
sb.append(" additionalProperties: ").append(toIndentedString(additionalProperties)).append("\n");

0 commit comments

Comments
 (0)