Skip to content

Commit 414f60b

Browse files
andreaTPmanusa
authored andcommitted
[java-generator] handle additionalProperties = true
1 parent 538437f commit 414f60b

File tree

3 files changed

+38
-2
lines changed

3 files changed

+38
-2
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,11 @@
1717
* Fix #4911: Config/RequestConfig.websocketTimeout has been removed. Config/RequestConfig.requestTimeout will be used for websocket connection timeouts.
1818
* Fix #4911: HttpClient api/building changes - writeTimeout has been removed, readTimeout has moved to the HttpRequest
1919

20+
### Unreleased
21+
22+
#### Bugs
23+
Fix #5145: [java-generator] handle `additionalProperties: true` emitting a field of type `AnyType`
24+
2025
### 6.6.2 (2023-05-15)
2126

2227
#### Bugs

java-generator/core/src/main/java/io/fabric8/java/generator/nodes/AbstractJSONSchema2Pojo.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -197,9 +197,11 @@ public static AbstractJSONSchema2Pojo fromJsonSchema(
197197
case STRING_CRD_TYPE:
198198
return fromJsonSchema.apply(JPrimitiveNameAndType.STRING);
199199
case OBJECT_CRD_TYPE:
200-
if (prop.getAdditionalProperties() != null
201-
&& prop.getAdditionalProperties().getSchema() != null) {
200+
if (prop.getAdditionalProperties() != null && prop.getAdditionalProperties().getSchema() != null) {
202201
return fromJsonSchema.apply(new JMapNameAndType(key));
202+
} else if (prop.getAdditionalProperties() != null
203+
&& Boolean.TRUE.equals(prop.getAdditionalProperties().getAllows())) {
204+
return fromJsonSchema.apply(JPrimitiveNameAndType.ANY_TYPE);
203205
} else {
204206
return fromJsonSchema.apply(new JObjectNameAndType(key));
205207
}

java-generator/core/src/test/java/io/fabric8/java/generator/GeneratorTest.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import io.fabric8.java.generator.exceptions.JavaGeneratorException;
2929
import io.fabric8.java.generator.nodes.*;
3030
import io.fabric8.kubernetes.api.model.apiextensions.v1.JSONSchemaProps;
31+
import io.fabric8.kubernetes.api.model.apiextensions.v1.JSONSchemaPropsOrBool;
3132
import io.fabric8.kubernetes.client.utils.Serialization;
3233
import org.junit.jupiter.api.Test;
3334

@@ -697,6 +698,34 @@ void testObjectNullableFieldsManagement() {
697698
assertTrue(clzO1.isPresent());
698699
}
699700

701+
@Test
702+
void testObjectWithAdditionalPropertiesTrue() {
703+
// Arrange
704+
Map<String, JSONSchemaProps> props = new HashMap<>();
705+
JSONSchemaProps obj = new JSONSchemaProps();
706+
obj.setType("object");
707+
obj.setAdditionalProperties(new JSONSchemaPropsOrBool(true, null));
708+
props.put("o1", obj);
709+
710+
JObject jobj = new JObject(null, "t", props, null, false, defaultConfig, null, Boolean.FALSE, null);
711+
712+
// Act
713+
GeneratorResult res = jobj.generateJava();
714+
715+
// Assert
716+
assertEquals(1, res.getTopLevelClasses().size());
717+
assertEquals("T", res.getTopLevelClasses().get(0).getName());
718+
719+
Optional<ClassOrInterfaceDeclaration> clzT = res.getTopLevelClasses().get(0).getClassByName("T");
720+
assertTrue(clzT.isPresent());
721+
assertEquals(1, clzT.get().getFields().size());
722+
Optional<FieldDeclaration> o1Field = clzT.get().getFieldByName("o1");
723+
assertTrue(o1Field.isPresent());
724+
FieldDeclaration actualO1Field = o1Field.get();
725+
assertEquals("io.fabric8.kubernetes.api.model.AnyType",
726+
actualO1Field.getElementType().asString());
727+
}
728+
700729
@Test
701730
void testClassNamesDisambiguationWithPackageNesting() {
702731
// Arrange

0 commit comments

Comments
 (0)