diff --git a/extensions/vertx-http/deployment/src/main/java/io/quarkus/vertx/http/deployment/RequireSocketHttpBuildItem.java b/extensions/vertx-http/deployment/src/main/java/io/quarkus/vertx/http/deployment/RequireSocketHttpBuildItem.java new file mode 100644 index 0000000000000..18f4debbea48d --- /dev/null +++ b/extensions/vertx-http/deployment/src/main/java/io/quarkus/vertx/http/deployment/RequireSocketHttpBuildItem.java @@ -0,0 +1,13 @@ +package io.quarkus.vertx.http.deployment; + +import io.quarkus.builder.item.SimpleBuildItem; + +/** + * Marker class that can be used to force the socket to open even when using virtual HTTP. + * + * There are some use cases that may want to handle both real and virtual HTTP requests, such as mapping incoming + * gRPC requests onto JAX-RS handlers. + */ +public final class RequireSocketHttpBuildItem extends SimpleBuildItem { + public static final RequireSocketHttpBuildItem MARKER = new RequireSocketHttpBuildItem(); +} diff --git a/extensions/vertx-http/deployment/src/main/java/io/quarkus/vertx/http/deployment/VertxHttpProcessor.java b/extensions/vertx-http/deployment/src/main/java/io/quarkus/vertx/http/deployment/VertxHttpProcessor.java index 78637f8fdee2d..00c41fdece62f 100644 --- a/extensions/vertx-http/deployment/src/main/java/io/quarkus/vertx/http/deployment/VertxHttpProcessor.java +++ b/extensions/vertx-http/deployment/src/main/java/io/quarkus/vertx/http/deployment/VertxHttpProcessor.java @@ -442,6 +442,7 @@ void openSocket(ApplicationStartBuildItem start, BuildProducer reflectiveClass, HttpBuildTimeConfig httpBuildTimeConfig, Optional requireVirtual, + Optional requireSocket, EventLoopCountBuildItem eventLoopCount, List websocketSubProtocols, Capabilities capabilities, @@ -452,8 +453,9 @@ void openSocket(ApplicationStartBuildItem start, .produce(ReflectiveClassBuildItem.builder(VirtualServerChannel.class) .build()); } - boolean startSocket = (!startVirtual || launchMode.getLaunchMode() != LaunchMode.NORMAL) - && (requireVirtual.isEmpty() || !requireVirtual.get().isAlwaysVirtual()); + boolean startSocket = requireSocket.isPresent() || + ((!startVirtual || launchMode.getLaunchMode() != LaunchMode.NORMAL) + && (requireVirtual.isEmpty() || !requireVirtual.get().isAlwaysVirtual())); recorder.startServer(vertx.getVertx(), shutdown, launchMode.getLaunchMode(), startVirtual, startSocket, eventLoopCount.getEventLoopCount(),