[java] fix ClassCastException in toDefaultValue() (#3765)

Fixes #3761
This commit is contained in:
Jérémie Bresson
2019-08-28 03:52:58 +02:00
committed by William Cheng
parent 7c480446e6
commit dc7bcbdb85
2 changed files with 22 additions and 6 deletions

View File

@@ -718,7 +718,6 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
public String toDefaultValue(Schema p) {
p = ModelUtils.getReferencedSchema(this.openAPI, p);
if (ModelUtils.isArraySchema(p)) {
final ArraySchema ap = (ArraySchema) p;
final String pattern;
if (fullJavaUtil) {
pattern = "new java.util.ArrayList<%s>()";
@@ -726,13 +725,15 @@ public abstract class AbstractJavaCodegen extends DefaultCodegen implements Code
pattern = "new ArrayList<%s>()";
}
if (ap.getItems() == null) {
LOGGER.error("`{}` (array property) does not have a proper inner type defined. Default to type:string", ap.getName());
Schema inner = new StringSchema().description("TODO default missing array inner type to string");
ap.setItems(inner);
Schema<?> items;
if (p instanceof ArraySchema && ((ArraySchema) p).getItems() != null) {
items = ((ArraySchema) p).getItems();
} else {
LOGGER.error("`{}` (array property) does not have a proper inner type defined. Default to type:string", p.getName());
items = new StringSchema().description("TODO default missing array inner type to string");
}
String typeDeclaration = getTypeDeclaration(ap.getItems());
String typeDeclaration = getTypeDeclaration(items);
Object java8obj = additionalProperties.get("java8");
if (java8obj != null) {
Boolean java8 = Boolean.valueOf(java8obj.toString());

View File

@@ -18,6 +18,10 @@
package org.openapitools.codegen.java;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.media.IntegerSchema;
import io.swagger.v3.oas.models.media.ObjectSchema;
import io.swagger.v3.oas.models.media.Schema;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenType;
import org.openapitools.codegen.TestUtils;
@@ -302,6 +306,17 @@ public class AbstractJavaCodegenTest {
Assert.assertEquals(codegen.getArtifactVersion(), "1.0.0-SNAPSHOT");
}
@Test
public void toDefaultValueTest() {
final P_AbstractJavaCodegen codegen = new P_AbstractJavaCodegen();
Schema schema = new ObjectSchema()
.addProperties("id", new IntegerSchema().format("int32"))
.minItems(1);
String defaultValue = codegen.toDefaultValue(schema);
Assert.assertEquals(defaultValue, "new ArrayList<String>()");
}
private static class P_AbstractJavaCodegen extends AbstractJavaCodegen {
@Override
public CodegenType getTag() {