Repository: quarkusio/quarkus
Issue: NPE at io.quarkus.opentelemetry.runtime.tracing.intrumentation.vertx.OpenTelemetryVertxTracingFactory$VertxDelegator.receiveResponse(OpenTelemetryVertxTracingFactory.java:102)

### Describe the bug

While executing unit test on CI there are some errors that happens sometimes.
 
I feel it is related to https://github.com/quarkusio/quarkus/issues/33285 and https://github.com/quarkusio/quarkus/issues/33669.

```
INFO: HHH000406: Using bytecode reflection optimizer
Jun 26, 2023 8:34:51 AM io.quarkus.opentelemetry.runtime.tracing.intrumentation.vertx.OpenTelemetryVertxTracingFactory$VertxDelegator
WARN: VertxTracer delegate not set. Will not submit this trace. SpanKind: {}; Object: {}; Operation:{}.
Jun 26, 2023 8:34:51 AM io.vertx.core.net.impl.ConnectionBase
ERROR: Cannot invoke "java.lang.Throwable.getMessage()" because "failure" is null
java.lang.NullPointerException: Cannot invoke "java.lang.Throwable.getMessage()" because "failure" is null
	at io.quarkus.opentelemetry.runtime.tracing.intrumentation.vertx.OpenTelemetryVertxTracingFactory$VertxDelegator.receiveResponse(OpenTelemetryVertxTracingFactory.java:102)
	at io.vertx.core.http.impl.Http1xClientConnection.handleResponseEnd(Http1xClientConnection.java:935)
	at io.vertx.core.http.impl.Http1xClientConnection.handleHttpMessage(Http1xClientConnection.java:814)
	at io.vertx.core.http.impl.Http1xClientConnection.handleMessage(Http1xClientConnection.java:778)
	at io.vertx.core.net.impl.ConnectionBase.read(ConnectionBase.java:158)
	at io.vertx.core.net.impl.VertxHandler.channelRead(VertxHandler.java:153)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436)
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:346)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:318)
	at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.handler.ssl.SslHandler.unwrap(SslHandler.java:1383)
	at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1246)
	at io.netty.handler.ssl.SslHandler.decode(SslHandler.java:1295)
	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529)
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:833)
```

In the code of `OpenTelemetryVertxTracingFactory`,  `failure` is null here:
```
                log.warnv("VertxTracer delegate not set. Will not submit this trace. " +
                        "response: {}; failure: {}.", response.toString(), failure.getMessage());

```

### Expected behavior

The tests should pass

### Actual behavior

The tests fail sometimes. 

### How to Reproduce?

This reproducer: https://github.com/Adelrisk/quarkus-reproducer-33285 was mentioned here: https://github.com/quarkusio/quarkus/issues/33285 but i am not sure it can reproduce the issue.



### Output of `uname -a` or `ver`

_No response_

### Output of `java -version`

openjdk version "17.0.6" 2023-01-17 OpenJDK Runtime Environment GraalVM CE 22.3.1 (build 17.0.6+10-jvmci-22.3-b13) OpenJDK 64-Bit Server VM GraalVM CE 22.3.1 (build 17.0.6+10-jvmci-22.3-b13, mixed mode, sharing)

### GraalVM version (if different from Java)

_No response_

### Quarkus version or git rev

3.1.2.Final

### Build tool (ie. output of `mvnw --version` or `gradlew --version`)

Maven 3.8.6

### Additional information


Changed files:
extensions/opentelemetry/runtime/src/test/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactoryTest.java
extensions/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactory.java

diff --git a/extensions/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactory.java b/extensions/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactory.java
index 1d3b11390ca..56060eaa5d1 100644
--- a/extensions/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactory.java
+++ b/extensions/opentelemetry/runtime/src/main/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactory.java
@@ -52,7 +52,10 @@ public Object receiveRequest(
                 final TagExtractor tagExtractor) {
             if (delegate == null) {
                 log.warnv("VertxTracer delegate not set. Will not submit this trace. " +
-                        "SpanKind: {}; Object: {}; Operation:{}.", kind, request.toString(), operation);
+                        "SpanKind: {}; Request: {}; Operation:{}.",
+                        kind,
+                        request == null ? "null" : request.toString(),
+                        operation);
                 return null;
             }
             return delegate.receiveRequest(context, kind, policy, request, operation, headers, tagExtractor);
@@ -67,7 +70,9 @@ public void sendResponse(
                 final TagExtractor tagExtractor) {
             if (delegate == null) {
                 log.warnv("VertxTracer delegate not set. Will not submit this trace. " +
-                        "response: {}; failure: {}.", response.toString(), failure.getMessage());
+                        "Response: {}; Failure: {}.",
+                        response == null ? "null" : response.toString(),
+                        failure == null ? "null" : failure.getMessage());
                 return;
             }
             delegate.sendResponse(context, response, payload, failure, tagExtractor);
@@ -84,7 +89,10 @@ public Object sendRequest(
                 final TagExtractor tagExtractor) {
             if (delegate == null) {
                 log.warnv("VertxTracer delegate not set. Will not submit this trace. " +
-                        "SpanKind: {}; Object: {}; Operation:{}.", kind, request.toString(), operation);
+                        "SpanKind: {}; Request: {}; Operation:{}.",
+                        kind,
+                        request == null ? "null" : request.toString(),
+                        operation);
                 return null;
             }
             return delegate.sendRequest(context, kind, policy, request, operation, headers, tagExtractor);
@@ -99,7 +107,9 @@ public void receiveResponse(
                 final TagExtractor tagExtractor) {
             if (delegate == null) {
                 log.warnv("VertxTracer delegate not set. Will not submit this trace. " +
-                        "response: {}; failure: {}.", response.toString(), failure.getMessage());
+                        "Response: {}; Failure: {}.",
+                        response == null ? "null" : response.toString(),
+                        failure == null ? "null" : failure.getMessage());
                 return;
             }
             delegate.receiveResponse(context, response, payload, failure, tagExtractor);
diff --git a/extensions/opentelemetry/runtime/src/test/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactoryTest.java b/extensions/opentelemetry/runtime/src/test/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactoryTest.java
index c4b43c0d4ed..ed1aadb63a5 100644
--- a/extensions/opentelemetry/runtime/src/test/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactoryTest.java
+++ b/extensions/opentelemetry/runtime/src/test/java/io/quarkus/opentelemetry/runtime/tracing/intrumentation/vertx/OpenTelemetryVertxTracingFactoryTest.java
@@ -50,6 +50,19 @@ void testSendRequest() {
         assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().getDelegate());
     }
 
+    @Test
+    void testSendNullRequest() {
+        assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().sendRequest(
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null));
+        assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().getDelegate());
+    }
+
     @Test
     void testReceiveRequest() {
         assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().receiveRequest(
@@ -63,6 +76,19 @@ void testReceiveRequest() {
         assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().getDelegate());
     }
 
+    @Test
+    void testReceiveNullRequest() {
+        assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().receiveRequest(
+                null,
+                null,
+                null,
+                null,
+                null,
+                null,
+                null));
+        assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().getDelegate());
+    }
+
     @Test
     void testSendResponse() {
         assertDoesNotThrow(() -> openTelemetryVertxTracingFactory.getVertxTracerDelegator().sendResponse(
@@ -74,6 +100,17 @@ void testSendResponse() {
         assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().getDelegate());
     }
 
+    @Test
+    void testSendNullResponse() {
+        assertDoesNotThrow(() -> openTelemetryVertxTracingFactory.getVertxTracerDelegator().sendResponse(
+                null,
+                null,
+                null,
+                null,
+                null));
+        assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().getDelegate());
+    }
+
     @Test
     void testReceiveResponse() {
         assertDoesNotThrow(() -> openTelemetryVertxTracingFactory.getVertxTracerDelegator().receiveResponse(
@@ -85,6 +122,17 @@ void testReceiveResponse() {
         assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().getDelegate());
     }
 
+    @Test
+    void testReceiveNullResponse() {
+        assertDoesNotThrow(() -> openTelemetryVertxTracingFactory.getVertxTracerDelegator().receiveResponse(
+                null,
+                null,
+                null,
+                null,
+                null));
+        assertNull(openTelemetryVertxTracingFactory.getVertxTracerDelegator().getDelegate());
+    }
+
     private static Response createResponse() {
         return new Response() {
             @Override