OpenAPITools/openapi-generator · error · RuntimeException

" + operationId + " (reserved word) cannot be used as method

Error message

" + operationId + " (reserved word) cannot be used as method name

What it means

The scala-lagom-server-deprecated generator's toOperationId() checks the (non-empty) operationId against the Scala reserved word list; a reserved word cannot be used as a Scala method name, so generation throws RuntimeException naming the word.

Source

Thrown at modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/ScalaLagomServerCodegen.java:179

    public String getName() {
        return "scala-lagom-server-deprecated";
    }

    @Override
    public String getHelp() {
        return "Generates a Lagom API server (Beta) in scala. IMPORTANT: this generator has been deprecated";
    }

    @Override
    public String toOperationId(String operationId) {
        // throw exception if method name is empty
        if (StringUtils.isEmpty(operationId)) {
            throw new RuntimeException("Empty method name (operationId) not allowed");
        }

        // method name cannot use reserved keyword, e.g. return
        if (isReservedWord(operationId)) {
            throw new RuntimeException(operationId + " (reserved word) cannot be used as method name");
        }

        return camelize(operationId, LOWERCASE_FIRST_LETTER);
    }

    @Override
    public ModelsMap postProcessModelsEnum(ModelsMap objs) {
        objs = super.postProcessModelsEnum(objs);
        for (ModelMap mo : objs.getModels()) {
            CodegenModel cm = mo.getModel();

            for (CodegenProperty var : cm.vars) {
                if (var.isEnum) {
                    List<Object> enumValues = getEnumValues(var.allowableValues);

                    for (final ListIterator<Object> i = enumValues.listIterator(); i.hasNext(); ) {
                        final String element = String.valueOf(i.next());
                        i.set(element.replaceAll("^\"|\"$", ""));

View on GitHub (pinned to fcec517be3)

Solutions

  1. Rename the operationId in the spec to something non-reserved, e.g. returnType -> getReturnType
  2. Use a multi-word operationId; camelization changes single reserved words but 'returnPolicy' is already safe
  3. Add a spec lint rule rejecting the target language's reserved words for operationIds
  4. If the wire operation name must stay, remember operationId only affects the generated method name, not the HTTP path

Example fix

# before
paths:
  /returns/{id}:
    get:
      operationId: return
# after
paths:
  /returns/{id}:
    get:
      operationId: getReturn
Defensive patterns

Strategy: validation

Validate before calling

# Reject Scala reserved words as operationIds (Python):
SCALA_RESERVED = {'abstract','case','catch','class','def','do','else','extends','false','final',
                  'finally','for','forSome','if','implicit','import','lazy','match','new','null',
                  'object','override','package','private','protected','return','sealed','super',
                  'this','throw','trait','true','try','type','val','var','while','with','yield'}
for oid in all_operation_ids(spec):
    assert oid not in SCALA_RESERVED, f'operationId {oid!r} is a Scala reserved word'

Try / catch

try {
    new DefaultGenerator().opts(input).generate();
} catch (RuntimeException e) {
    // '<word> (reserved word) cannot be used as method name' - rename that operationId in the spec and rerun
}

Prevention

When it happens

Trigger: A spec operation with operationId: return / match / type / object / package / val / def / new / class etc., generated with -g scala-lagom-server-deprecated. camelize() does not save you: single-word identifiers pass through unchanged.

Common situations: REST operations named after language concepts ('get return policy', 'check type', 'create object') that camelCase to reserved words; specs authored by backend teams unfamiliar with Scala keywords; shared specs that generate fine for Python but fail for Scala.

Related errors


AI-assisted analysis of OpenAPITools/openapi-generator@fcec517be3 (2026-08-22). Data as JSON: /api/errors/1c26e5572b9989a8. Report an issue: GitHub.