From 69c306de21e9bbb5d9723e7b59519edb0b1d1918 Mon Sep 17 00:00:00 2001 From: Martin Kouba Date: Wed, 2 Oct 2019 10:11:50 +0200 Subject: [PATCH] Vertx web - use shared BodyHandler instance - resolves #4294 --- .../web/deployment/VertxWebProcessor.java | 4 ++- .../vertx/web/runtime/VertxWebRecorder.java | 30 ++++++++++--------- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/extensions/vertx-web/deployment/src/main/java/io/quarkus/vertx/web/deployment/VertxWebProcessor.java b/extensions/vertx-web/deployment/src/main/java/io/quarkus/vertx/web/deployment/VertxWebProcessor.java index 36caf497eca51..3718b338399ec 100644 --- a/extensions/vertx-web/deployment/src/main/java/io/quarkus/vertx/web/deployment/VertxWebProcessor.java +++ b/extensions/vertx-web/deployment/src/main/java/io/quarkus/vertx/web/deployment/VertxWebProcessor.java @@ -131,13 +131,15 @@ public void write(String name, byte[] data) { generatedClass.produce(new GeneratedClassBuildItem(true, name, data)); } }; + Handler bodyHandler = recorder.createBodyHandler(httpConfiguration); + for (AnnotatedRouteHandlerBuildItem businessMethod : routeHandlerBusinessMethods) { String handlerClass = generateHandler(businessMethod.getBean(), businessMethod.getMethod(), classOutput); reflectiveClasses.produce(new ReflectiveClassBuildItem(false, false, handlerClass)); Handler routingHandler = recorder.createHandler(handlerClass); for (AnnotationInstance routeAnnotation : businessMethod.getRoutes()) { Route route = annotationProxy.builder(routeAnnotation, Route.class).build(classOutput); - Function routeFunction = recorder.createRouteFunction(route, httpConfiguration); + Function routeFunction = recorder.createRouteFunction(route, bodyHandler); AnnotationValue typeValue = routeAnnotation.value("type"); HandlerType handlerType = HandlerType.NORMAL; if (typeValue != null) { diff --git a/extensions/vertx-web/runtime/src/main/java/io/quarkus/vertx/web/runtime/VertxWebRecorder.java b/extensions/vertx-web/runtime/src/main/java/io/quarkus/vertx/web/runtime/VertxWebRecorder.java index 742f09f7ef12a..b75c36ec0c684 100644 --- a/extensions/vertx-web/runtime/src/main/java/io/quarkus/vertx/web/runtime/VertxWebRecorder.java +++ b/extensions/vertx-web/runtime/src/main/java/io/quarkus/vertx/web/runtime/VertxWebRecorder.java @@ -36,7 +36,7 @@ public Handler createHandler(String handlerClassName) { } public Function createRouteFunction(Route routeAnnotation, - HttpConfiguration httpConfiguration) { + Handler bodyHandler) { return new Function() { @Override public io.vertx.ext.web.Route apply(Router router) { @@ -66,22 +66,24 @@ public io.vertx.ext.web.Route apply(Router router) { route.consumes(consumes); } } - - BodyHandler bodyHandler = BodyHandler.create(); - Optional maxBodySize = httpConfiguration.limits.maxBodySize; - if (maxBodySize.isPresent()) { - bodyHandler.setBodyLimit(maxBodySize.get().asLongValue()); - } - final BodyConfig bodyConfig = httpConfiguration.body; - bodyHandler.setHandleFileUploads(bodyConfig.handleFileUploads); - bodyHandler.setUploadsDirectory(bodyConfig.uploadsDirectory); - bodyHandler.setDeleteUploadedFilesOnEnd(bodyConfig.deleteUploadedFilesOnEnd); - bodyHandler.setMergeFormAttributes(bodyConfig.mergeFormAttributes); - bodyHandler.setPreallocateBodyBuffer(bodyConfig.preallocateBodyBuffer); - route.handler(bodyHandler); return route; } }; } + + public Handler createBodyHandler(HttpConfiguration httpConfiguration) { + BodyHandler bodyHandler = BodyHandler.create(); + Optional maxBodySize = httpConfiguration.limits.maxBodySize; + if (maxBodySize.isPresent()) { + bodyHandler.setBodyLimit(maxBodySize.get().asLongValue()); + } + final BodyConfig bodyConfig = httpConfiguration.body; + bodyHandler.setHandleFileUploads(bodyConfig.handleFileUploads); + bodyHandler.setUploadsDirectory(bodyConfig.uploadsDirectory); + bodyHandler.setDeleteUploadedFilesOnEnd(bodyConfig.deleteUploadedFilesOnEnd); + bodyHandler.setMergeFormAttributes(bodyConfig.mergeFormAttributes); + bodyHandler.setPreallocateBodyBuffer(bodyConfig.preallocateBodyBuffer); + return bodyHandler; + } }