{"record":{"id":"2d5320d2b55a4966","repo":"OpenAPITools/openapi-generator","slug":"enumserializationlibrary-is-an-invalid-enum-prop","errorCode":null,"errorMessage":"{enumSerializationLibrary} is an invalid enum property naming option. Please choose from:\n  {availableValues}","messagePattern":"(.+?) is an invalid enum property naming option\\. Please choose from:\n  (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":null,"severity":"error","filePath":"modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java","lineNumber":384,"sourceCode":"        }\n        this.useCoroutines = useCoroutines;\n    }\n\n    /**\n     * Sets the serialization engine for Kotlin\n     *\n     * @param enumSerializationLibrary The string representation of the serialization library as defined by\n     *                                 {@link org.openapitools.codegen.languages.KotlinClientCodegen.SERIALIZATION_LIBRARY_TYPE}\n     */\n    public void setSerializationLibrary(final String enumSerializationLibrary) {\n        try {\n            this.serializationLibrary = SERIALIZATION_LIBRARY_TYPE.valueOf(enumSerializationLibrary);\n        } catch (IllegalArgumentException ex) {\n            StringBuilder sb = new StringBuilder(enumSerializationLibrary + \" is an invalid enum property naming option. Please choose from:\");\n            for (SERIALIZATION_LIBRARY_TYPE t : SERIALIZATION_LIBRARY_TYPE.values()) {\n                sb.append(\"\\n  \").append(t.name());\n            }\n            throw new RuntimeException(sb.toString());\n        }\n    }\n\n    @Override\n    public String modelFilename(String templateName, String modelName) {\n        String suffix = modelTemplateFiles().get(templateName);\n        // If this was a proper template method, i wouldn't have to make myself throw up by doing this....\n        if (getGenerateRoomModels() && suffix.startsWith(\"RoomModel\")) {\n            return roomModelFileFolder() + File.separator + toModelFilename(modelName) + suffix;\n        } else {\n            return modelFileFolder() + File.separator + toModelFilename(modelName) + suffix;\n        }\n    }\n\n    public String roomModelFileFolder() {\n        return outputFolder + File.separator + sourceFolder + File.separator + roomModelPackage.replace('.', File.separatorChar);\n    }\n","sourceCodeStart":366,"sourceCodeEnd":402,"githubUrl":"https://github.com/OpenAPITools/openapi-generator/blob/fcec517be3cf5b7964296bcba25fbc97541484e7/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/KotlinClientCodegen.java#L366-L402","documentation":"KotlinClientCodegen.setSerializationLibrary maps the 'serializationLibrary' additional property onto the enum {moshi, gson, jackson, kotlinx_serialization} via valueOf(). Unknown or case-mismatched values raise IllegalArgumentException, rethrown as a RuntimeException listing the four valid names. Default is moshi. The message wording ('invalid enum property naming option') is copy-pasted from modelPropertyNaming code and misleading — this is about the serialization library.","triggerScenarios":"`-g kotlin -p serializationLibrary=kotlinx-serialization` (hyphen instead of underscore), `KotlinxSerialization`, `Jackson` (capitalized), `gson-wasm`, `serde`; also `SerializationLibrary` (wrong key) leading to defaults elsewhere.","commonSituations":"Hyphen/underscore confusion for kotlinx_serialization; capitalized values from hand-written YAML; copying values from the Micronaut (micronaut_serde_jackson) or Java generators whose vocabularies differ.","solutions":["Use exactly `moshi`, `gson`, `jackson`, or `kotlinx_serialization`.","Remember the default is moshi, so omitting the option is always safe.","Note library couplings enforced elsewhere: jvm-volley requires gson (line 749), the spring libraries require jackson (line 875) — set the value the library demands, not just any enum member."],"exampleFix":"# before\nopenapi-generator-cli generate -g kotlin -i api.yaml -p serializationLibrary=kotlinx-serialization\n# after\nopenapi-generator-cli generate -g kotlin -i api.yaml -p serializationLibrary=kotlinx_serialization","handlingStrategy":"validation","validationCode":"# shell: kotlin serialization allowlist (default moshi)\nsl=\"${SERIALIZATION_LIBRARY:-moshi}\"\ncase \"$sl\" in\n  moshi|gson|jackson|kotlinx_serialization) ;;\n  *) echo \"serializationLibrary must be moshi|gson|jackson|kotlinx_serialization, got: $sl\" >&2; exit 2 ;;\nesac","typeGuard":"// Kotlin\nenum class KotlinSerialization(val option: String) { MOSHI(\"moshi\"), GSON(\"gson\"), JACKSON(\"jackson\"), KOTLINX(\"kotlinx_serialization\") }\n\nfun serializationLibraryOf(v: String): KotlinSerialization? =\n    KotlinSerialization.entries.firstOrNull { it.option == v }","tryCatchPattern":"try {\n    DefaultGenerator().opts(clientOptInput).generate()\n} catch (e: RuntimeException) {\n    // message lists valid names despite the misleading 'property naming' wording\n    throw IllegalStateException(\"Invalid kotlin serializationLibrary: ${e.message}\", e)\n}","preventionTips":["Remember the underscore: kotlinx_serialization, never kotlinx-serialization.","Pair the value with the library: spring ⇒ jackson, volley ⇒ gson, default ⇒ moshi.","Validate via the enum in build scripts instead of trusting free-text input."],"tags":["openapi-generator","kotlin","configuration","serialization"],"backgroundTag":"invalid-serialization-library-option","analyzedSha":"fcec517be3cf5b7964296bcba25fbc97541484e7","analyzedAt":"2026-08-22T11:13:11.613Z","schemaVersion":2},"datasetVersion":"2026-08-22T14:17:55.899Z"}