Quarkus CXF 3.17.3 release notes

Important dependency upgrades

Bugfixes

#1646 VertxHttpClientHTTPConduit connects to port 80 when the client-endpoint-url starts with https:// and has no explicit port

Before Quarkus CXF 3.17.3, when a VertxHttpClientHTTPConduit-based client was configured with an endpoint URL like the following

application.properties
quarkus.cxf.client.hello.client-endpoint-url = https://example.com/services/hello
quarkus.cxf.client.hello.service-interface = io.quarkiverse.cxf.deployment.test.HelloService

where there was no explicit port in the service URL https://example.com/services/hello, then the client invocation was failing with an exception similar to this one:

WARN  [org.apa.cxf.pha.PhaseInterceptorChain] (executor-thread-1) Interceptor for [REMOVED] has thrown exception, unwinding now: org.apache.cxf.interceptor.Fault: Could not send Message.
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:67)
    at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:307)
    at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:530)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:441)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:356)
    at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:314)
    at org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:96)
    at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:140)
    at jdk.proxy5/jdk.proxy5.$Proxy269.hello(Unknown Source)
    ...
Caused by: java.io.IOException: Unable to connect to https://example.com/services/hello
    at io.quarkiverse.cxf.vertx.http.client.VertxHttpClientHTTPConduit$RequestBodyHandler.awaitRequest(VertxHttpClientHTTPConduit.java:922)
    at io.quarkiverse.cxf.vertx.http.client.VertxHttpClientHTTPConduit$RequestBodyHandler.handle(VertxHttpClientHTTPConduit.java:578)
    at io.quarkiverse.cxf.vertx.http.client.VertxHttpClientHTTPConduit$RequestBodyHandler.handle(VertxHttpClientHTTPConduit.java:425)
    at io.quarkiverse.cxf.vertx.http.client.VertxHttpClientHTTPConduit$RequestBodyOutputStream.close(VertxHttpClientHTTPConduit.java:420)
    at org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:56)
    at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:717)
    at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63)
    ... 69 more
Caused by: javax.net.ssl.SSLHandshakeException: Failed to create SSL connection
    at io.vertx.core.net.impl.ChannelProvider$1.userEventTriggered(ChannelProvider.java:127)
    at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:398)
    at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:376)
    at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:368)
    at io.netty.handler.ssl.SslUtils.handleHandshakeFailure(SslUtils.java:495)
    at io.netty.handler.ssl.SslHandler.setHandshakeFailure(SslHandler.java:2025)
    ...
Caused by: io.netty.handler.ssl.NotSslRecordException: not an SSL/TLS record: [long sequence of number and lower case letters]
    at io.netty.handler.ssl.SslHandler.decodeJdkCompatible(SslHandler.java:1342)
    ... 20 more

This was caused by the fact that io.vertx.core.http.HttpClient uses port 80 as a default for all URIs not stating the port explicitly. Therefore the request was sent to port 80 instead of 443 (the proper default for HTTPS).

Since Quarkus CXF 3.17.3, VertxHttpClientHTTPConduit handles the default port for HTTPS protocol correctly.