diff --git a/modules/openapi-generator/src/main/resources/Java/libraries/vertx/ApiClient.mustache b/modules/openapi-generator/src/main/resources/Java/libraries/vertx/ApiClient.mustache index b2e7f289bd3e..9f3101629179 100644 --- a/modules/openapi-generator/src/main/resources/Java/libraries/vertx/ApiClient.mustache +++ b/modules/openapi-generator/src/main/resources/Java/libraries/vertx/ApiClient.mustache @@ -731,7 +731,19 @@ public class ApiClient{{#jsr310}} extends JavaTimeFormatter{{/jsr310}} { config.put("userAgent", "{{{httpUserAgent}}}{{^httpUserAgent}}OpenAPI-Generator/{{{artifactVersion}}}/java{{/httpUserAgent}}"); } - return WebClient.create(vertx, new WebClientOptions(config){{#useVertx5}}, new PoolOptions(poolConfig){{/useVertx5}}); + {{#useVertx5}} + // PoolOptions(JsonObject) does not initialize defaults first (unlike its + // no-arg constructor and unlike WebClientOptions(JsonObject)), so building + // it directly from an empty or partial poolConfig leaves fields such as + // maxLifetimeUnit null and triggers a NullPointerException when the + // WebClient is created. Overlay poolConfig on the serialized defaults so + // absent keys keep their documented values. + PoolOptions poolOptions = new PoolOptions(new PoolOptions().toJson().mergeIn(poolConfig)); + return WebClient.create(vertx, new WebClientOptions(config), poolOptions); + {{/useVertx5}} + {{^useVertx5}} + return WebClient.create(vertx, new WebClientOptions(config)); + {{/useVertx5}} } diff --git a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/ApiClient.java index 673930796e3c..7398295a08bf 100644 --- a/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/vertx5-supportVertxFuture/src/main/java/org/openapitools/client/ApiClient.java @@ -664,7 +664,14 @@ protected WebClient buildWebClient(Vertx vertx, JsonObject config, JsonObject po config.put("userAgent", "OpenAPI-Generator/1.0.0/java"); } - return WebClient.create(vertx, new WebClientOptions(config), new PoolOptions(poolConfig)); + // PoolOptions(JsonObject) does not initialize defaults first (unlike its + // no-arg constructor and unlike WebClientOptions(JsonObject)), so building + // it directly from an empty or partial poolConfig leaves fields such as + // maxLifetimeUnit null and triggers a NullPointerException when the + // WebClient is created. Overlay poolConfig on the serialized defaults so + // absent keys keep their documented values. + PoolOptions poolOptions = new PoolOptions(new PoolOptions().toJson().mergeIn(poolConfig)); + return WebClient.create(vertx, new WebClientOptions(config), poolOptions); } diff --git a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/ApiClient.java b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/ApiClient.java index 673930796e3c..7398295a08bf 100644 --- a/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/ApiClient.java +++ b/samples/client/petstore/java/vertx5/src/main/java/org/openapitools/client/ApiClient.java @@ -664,7 +664,14 @@ protected WebClient buildWebClient(Vertx vertx, JsonObject config, JsonObject po config.put("userAgent", "OpenAPI-Generator/1.0.0/java"); } - return WebClient.create(vertx, new WebClientOptions(config), new PoolOptions(poolConfig)); + // PoolOptions(JsonObject) does not initialize defaults first (unlike its + // no-arg constructor and unlike WebClientOptions(JsonObject)), so building + // it directly from an empty or partial poolConfig leaves fields such as + // maxLifetimeUnit null and triggers a NullPointerException when the + // WebClient is created. Overlay poolConfig on the serialized defaults so + // absent keys keep their documented values. + PoolOptions poolOptions = new PoolOptions(new PoolOptions().toJson().mergeIn(poolConfig)); + return WebClient.create(vertx, new WebClientOptions(config), poolOptions); }