openapi-generator icon indicating copy to clipboard operation
openapi-generator copied to clipboard

[BUG][java-vertx-web] operationId beginning with capital letter causes issues

Open eashwaranp opened this issue 3 years ago • 0 comments

Description

If operationId is a string beginning with capital letter, like ListPets instead of listPets, then the generator creates code that mounts the operation with listPets instead of ListPets.

paths:
  /pets:
    get:
      summary: List all pets
      operationId: ListPets
      tags:
        - pets

This generates:

    public void mount(RouterBuilder builder) {
        builder.operation("createPets").handler(this::createPets);
        builder.operation("listPets").handler(this::listPets);
        builder.operation("showPetById").handler(this::showPetById);
    }

This causes issues when we try to start the server:

$ mvn exec:java
[INFO] Scanning for projects...
[INFO]
[INFO] -----------< org.openapitools:openapi-java-vertx-web-server >-----------
[INFO] Building Swagger Petstore 1.0.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- exec-maven-plugin:1.5.0:java (default-cli) @ openapi-java-vertx-web-server ---
[vert.x-eventloop-thread-1] ERROR com.petstore.HttpServerVerticle - Http verticle failed to deploy
java.lang.IllegalArgumentException: Cannot find the operation createPets
        at io.vertx.ext.web.openapi.impl.OpenAPI3RouterBuilderImpl.operation(OpenAPI3RouterBuilderImpl.java:178)
        at com.petstore.verticle.PetsApiHandler.mount(PetsApiHandler.java:37)
        at com.petstore.HttpServerVerticle.lambda$start$0(HttpServerVerticle.java:33)
        at io.vertx.core.impl.future.Mapping.onSuccess(Mapping.java:35)
        at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
        at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211)
        at io.vertx.core.impl.future.PromiseImpl.tryComplete(PromiseImpl.java:23)
        at io.vertx.core.Promise.complete(Promise.java:66)
        at io.vertx.ext.web.openapi.RouterBuilder.lambda$create$0(RouterBuilder.java:239)
        at io.vertx.core.impl.future.FutureImpl$3.onSuccess(FutureImpl.java:141)
        at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
        at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211)
        at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62)
        at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
        at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196)
        at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43)
        at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
        at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211)
        at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62)
        at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
        at io.vertx.core.impl.future.FutureImpl.addListener(FutureImpl.java:196)
        at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43)
        at io.vertx.core.impl.future.FutureImpl$ListenerArray.onSuccess(FutureImpl.java:262)
        at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
        at io.vertx.core.impl.future.FutureImpl.tryComplete(FutureImpl.java:211)
        at io.vertx.core.impl.future.Composition$1.onSuccess(Composition.java:62)
        at io.vertx.core.impl.future.FutureBase.emitSuccess(FutureBase.java:60)
        at io.vertx.core.impl.future.SucceededFuture.addListener(SucceededFuture.java:88)
        at io.vertx.core.impl.future.Composition.onSuccess(Composition.java:43)
        at io.vertx.core.impl.future.FutureBase.lambda$emitSuccess$0(FutureBase.java:54)
        at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:164)
        at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469)
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:503)
        at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
        at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
        at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
        at java.lang.Thread.run(Thread.java:748)

To fix this, we need to manually change the above java code to correct the operationId as follows:

    public void mount(RouterBuilder builder) {
        builder.operation("CreatePets").handler(this::createPets);
        builder.operation("ListPets").handler(this::listPets);
        builder.operation("ShowPetById").handler(this::showPetById);
    }
openapi-generator version

5.1.1 to 6.0.1

OpenAPI declaration file content or url

eashwaranp avatar Aug 02 '22 19:08 eashwaranp