ReactiveRestClient keep requesting localhost/127.0.0.1:80 even if I force URL

151 Views Asked by At

I have this :

final RealTimeRestClient restClient = QuarkusRestClientBuilder.newBuilder()
        .baseUrl(new URL("http", "realtime_proxy_mo", 8080, "/"))
        .register(new LoggingFilter())
        .build(RealTimeRestClient.class);
final Uni<Response> vehicules = restClient.getVehicules();
vehicules.onItem().invoke(l -> {
                log.debug(l.getEntity());
        }).log()
          .subscribe()
          .with(ok -> log.debug("OK for List<MSGVehicule> [" + ok + "]"),
                failure -> log.error(failure)
        );

But the request fails with

jakarta.ws.rs.ProcessingException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connexion refusée: localhost/127.0.0.1:80

(for non french speakers: connexion refusée means connection refused ;))

Full stack trace is :

    jakarta.ws.rs.ProcessingException: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connexion refusée: localhost/127.0.0.1:80
    at org.jboss.resteasy.reactive.client.handlers.ClientSendRequestHandler$2.accept(ClientSendRequestHandler.java:197)
    at org.jboss.resteasy.reactive.client.handlers.ClientSendRequestHandler$2.accept(ClientSendRequestHandler.java:189)
    at io.smallrye.context.impl.wrappers.SlowContextualConsumer.accept(SlowContextualConsumer.java:21)
    at io.smallrye.mutiny.helpers.UniCallbackSubscriber.onFailure(UniCallbackSubscriber.java:62)
    at io.smallrye.mutiny.operators.uni.UniOperatorProcessor.onFailure(UniOperatorProcessor.java:55)
    at org.jboss.resteasy.reactive.client.AsyncResultUni.lambda$subscribe$1(AsyncResultUni.java:37)
    at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:153)
    at io.vertx.core.impl.future.FutureBase.lambda$emitFailure$1(FutureBase.java:69)
    at io.vertx.core.impl.EventLoopContext.execute(EventLoopContext.java:86)
    at io.vertx.core.impl.DuplicatedContext.execute(DuplicatedContext.java:184)
    at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:66)
    at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:230)
    at io.vertx.core.impl.future.PromiseImpl.tryFail(PromiseImpl.java:23)
    at io.vertx.core.http.impl.HttpClientImpl.lambda$doRequest$6(HttpClientImpl.java:689)
    at io.vertx.core.net.impl.pool.Endpoint.lambda$getConnection$0(Endpoint.java:52)
    at io.vertx.core.http.impl.SharedClientHttpStreamEndpoint$Request.handle(SharedClientHttpStreamEndpoint.java:162)
    at io.vertx.core.http.impl.SharedClientHttpStreamEndpoint$Request.handle(SharedClientHttpStreamEndpoint.java:123)
    at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:55)
    at io.vertx.core.impl.ContextBase.emit(ContextBase.java:297)
    at io.vertx.core.net.impl.pool.SimpleConnectionPool$ConnectFailed$1.run(SimpleConnectionPool.java:381)
    at io.vertx.core.net.impl.pool.Task.runNextTasks(Task.java:43)
    at io.vertx.core.net.impl.pool.CombinerExecutor.submit(CombinerExecutor.java:82)
    at io.vertx.core.net.impl.pool.SimpleConnectionPool.execute(SimpleConnectionPool.java:245)
    at io.vertx.core.net.impl.pool.SimpleConnectionPool.lambda$connect$2(SimpleConnectionPool.java:259)
    at io.vertx.core.http.impl.SharedClientHttpStreamEndpoint.lambda$connect$2(SharedClientHttpStreamEndpoint.java:104)
    at io.vertx.core.impl.future.FutureImpl$3.onFailure(FutureImpl.java:153)
    at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:75)
    at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:230)
    at io.vertx.core.impl.future.Composition$1.onFailure(Composition.java:66)
    at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:75)
    at io.vertx.core.impl.future.FailedFuture.addListener(FailedFuture.java:98)
    at io.vertx.core.impl.future.Composition.onFailure(Composition.java:55)
    at io.vertx.core.impl.future.FutureBase.emitFailure(FutureBase.java:75)
    at io.vertx.core.impl.future.FutureImpl.tryFail(FutureImpl.java:230)
    at io.vertx.core.impl.future.PromiseImpl.tryFail(PromiseImpl.java:23)
    at io.vertx.core.impl.EventLoopContext.emit(EventLoopContext.java:55)
    at io.vertx.core.impl.ContextBase.emit(ContextBase.java:297)
    at io.vertx.core.net.impl.NetClientImpl.failed(NetClientImpl.java:347)
    at io.vertx.core.net.impl.NetClientImpl.lambda$connectInternal2$6(NetClientImpl.java:319)
    at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
    at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:557)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
    at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
    at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
    at io.netty.util.concurrent.DefaultPromise.setFailure(DefaultPromise.java:110)
    at io.vertx.core.net.impl.ChannelProvider.lambda$handleConnect$0(ChannelProvider.java:157)
    at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:590)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:583)
    at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:559)
    at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:492)
    at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:636)
    at io.netty.util.concurrent.DefaultPromise.setFailure0(DefaultPromise.java:629)
    at io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:118)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:321)
    at io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:337)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:776)
    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)
Caused by: io.netty.channel.AbstractChannel$AnnotatedConnectException: Connexion refusée: localhost/127.0.0.1:80

I don't see why it keeps requesting localhost:80 while I set explicitly another host and port.

I use the quarkus-rest-client-reactive-jackson from QUARKUS 3.4.1. Someone else has encountered such a problem ?

1

There are 1 best solutions below

0
Lbro On

Incredible !!!! Thanks to URI.getHost() returns null I found why ! Then if I change realtime_proxy_mo by realtime.proxy.mo in baseurl(...) in the QuarkusRestClientBuilder it works !

The problem now is that the server I want to connect to is named realtime_proxy_mo and not realtime.proxy.mo. But I can find a way. Maybe the team that develops QuarkusResteasyRestClient may change

    public RestClientBuilderImpl baseUrl(URL url) {
    try {
        this.uri = url.toURI();
    } catch (URISyntaxException e) {
        throw new IllegalArgumentException("Failed to convert REST client URL to URI", e);
    }
    return this;
}

to

    public RestClientBuilderImpl baseUrl(URL url) {
    try {
        this.uri = url.toURI();
        this.uri.host=url.getHost();
        this.uri.port=url.getPort();
   } catch (URISyntaxException e) {
        throw new IllegalArgumentException("Failed to convert REST client URL to URI", e);
    }
    return this;
}

Or something alike ...