Description
Integer Enums are generated with missing @JsonCreator annotation and causing InvalidFormatException while deserialization.
com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `package.class$CodeEnum` from number 3: index value outside legal index range [0..2]
The Enum is defined for values {1, 2, 3} but the deserialization is trying to work with the index, so it is wrong for values 1 and 2 and fails for value 3.
openapi-generator version
4.2.2
OpenAPI declaration file content or url
yaml file:
components:
schemas:
CodeResponse:
type: object
required: [isValid]
properties:
isValid:
type: boolean
serial:
type: string
pattern: /^[abcdefghkmnpqrstuvwxyz23456789]{7,}$/i
discount:
type: integer
format: int32
minimum: 0
reason:
type: object
required: [code, message]
properties:
code:
type: integer
enum: [1, 2, 3]
message:
type: object
required: [en, de]
properties:
en:
type: string
de:
type: string
generated java code:
@XmlType(name="CodeEnum")
@XmlEnum(Integer.class)
public enum CodeEnum {
@XmlEnumValue("1") NUMBER_1(Integer.valueOf(1)), @XmlEnumValue("2") NUMBER_2(Integer.valueOf(2)), @XmlEnumValue("3") NUMBER_3(Integer.valueOf(3));
private Integer value;
CodeEnum (Integer v) {
value = v;
}
public Integer value() {
return value;
}
@Override
public String toString() {
return String.valueOf(value);
}
public static CodeEnum fromValue(Integer value) {
for (CodeEnum b : CodeEnum.values()) {
if (b.value.equals(value)) {
return b;
}
}
throw new IllegalArgumentException("Unexpected value '" + value + "'");
}
}
Command line used for generation
Gradle task:
group = "build"
description = "..."
generatorName = "jaxrs-cxf-client"
inputSpec = "...".toString()
outputDir = "...".toString()
apiPackage = "..."
invokerPackage = "..."
modelPackage = "..."
generateModelTests = false
generateModelDocumentation = false
generateApiTests = false
validateSpec = false
withXml = false
configOptions = [
dateLibrary : "java8",
booleanGetterPrefix: "is"
]
Steps to reproduce
- deserialize respsonse object like:
{
"isValid": false,
"reason": {
"code": 3,
"message": {
"en": "...",
"de": "..."
}
}
}
Related issues/PRs
Suggest a fix/enhancement
Adding @JsonCreator annotation to generated fromValue() method:
@JsonCreator
public static CodeEnum fromValue(Integer value) {
for (CodeEnum b : CodeEnum.values()) {
if (b.value.equals(value)) {
return b;
}
}
throw new IllegalArgumentException("Unexpected value '" + value + "'");
}
Description
Integer Enums are generated with missing @JsonCreator annotation and causing InvalidFormatException while deserialization.
The Enum is defined for values {1, 2, 3} but the deserialization is trying to work with the index, so it is wrong for values 1 and 2 and fails for value 3.
openapi-generator version
4.2.2
OpenAPI declaration file content or url
yaml file:
generated java code:
Command line used for generation
Gradle task:
Steps to reproduce
{ "isValid": false, "reason": { "code": 3, "message": { "en": "...", "de": "..." } } }Related issues/PRs
Suggest a fix/enhancement
Adding @JsonCreator annotation to generated fromValue() method: