vert-x3 / issues

Apache License 2.0
37 stars 7 forks source link

Error while trying to call an URL when the port is omitted #230

Closed IonelDem closed 7 years ago

IonelDem commented 7 years ago

When using the HttpClientRequest like the following:

HttpClientRequest request = wsClient.request(HttpMethod.GET, url.getPath());

I have the following error:

SEVERE: Unhandled exception rx.exceptions.OnErrorNotImplementedException: port out of range:-1 at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:386) at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction.call(InternalObservableUtils.java:383) at rx.internal.util.ActionSubscriber.onError(ActionSubscriber.java:44) at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:152) at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:115) at rx.internal.operators.OnSubscribeMap$MapSubscriber.onError(OnSubscribeMap.java:88) at rx.internal.operators.OnSubscribeMap$MapSubscriber.onError(OnSubscribeMap.java:88) at rx.Observable.unsafeSubscribe(Observable.java:10157) at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48) at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33) at rx.Observable.unsafeSubscribe(Observable.java:10150) at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48) at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33) at rx.Observable.subscribe(Observable.java:10246) at rx.Observable.subscribe(Observable.java:10213) at rx.Observable.subscribe(Observable.java:10018) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle.assessUrl(Criterion24Verticle.java:202) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle.access$000(Criterion24Verticle.java:25) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle$1.call(Criterion24Verticle.java:120) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle$1.call(Criterion24Verticle.java:115) at rx.Observable.subscribe(Observable.java:10246) at rx.Observable.subscribe(Observable.java:10213) at rx.Observable.subscribe(Observable.java:10018) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle.assess(Criterion24Verticle.java:44) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle.lambda$null$1(Criterion24Verticle.java:105) at java.util.ArrayList.forEach(ArrayList.java:1249) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle.lambda$computeStatus$2(Criterion24Verticle.java:94) at java.util.ArrayList.forEach(ArrayList.java:1249) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle.computeStatus(Criterion24Verticle.java:92) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle.lambda$registerListeners$4(Criterion24Verticle.java:233) at io.vertx.rxjava.core.eventbus.EventBus$3.handle(EventBus.java:203) at io.vertx.rxjava.core.eventbus.EventBus$3.handle(EventBus.java:201) at io.vertx.core.eventbus.impl.HandlerRegistration.deliver(HandlerRegistration.java:212) at io.vertx.core.eventbus.impl.HandlerRegistration.handle(HandlerRegistration.java:191) at io.vertx.core.eventbus.impl.EventBusImpl.lambda$deliverToHandler$3(EventBusImpl.java:503) at io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:316) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:163) at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:418) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:440) at io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:873) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalArgumentException: port out of range:-1 at java.net.InetSocketAddress.checkPort(InetSocketAddress.java:143) at java.net.InetSocketAddress.createUnresolved(InetSocketAddress.java:254) at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:126) at io.vertx.core.net.impl.ChannelProvider.connect(ChannelProvider.java:37) at io.vertx.core.http.impl.ConnectionManager$ChannelConnector.connect(ConnectionManager.java:523) at io.vertx.core.http.impl.ConnectionManager$ConnQueue.createNewConnection(ConnectionManager.java:279) at io.vertx.core.http.impl.ConnectionManager$ConnQueue.getConnection(ConnectionManager.java:222) at io.vertx.core.http.impl.ConnectionManager.getConnectionForRequest(ConnectionManager.java:139) at io.vertx.core.http.impl.HttpClientImpl.getConnectionForRequest(HttpClientImpl.java:687) at io.vertx.core.http.impl.HttpClientRequestImpl.connect(HttpClientRequestImpl.java:614) at io.vertx.core.http.impl.HttpClientRequestImpl.write(HttpClientRequestImpl.java:738) at io.vertx.core.http.impl.HttpClientRequestImpl.end(HttpClientRequestImpl.java:334) at io.vertx.rxjava.core.http.HttpClientRequest.end(HttpClientRequest.java:345) at com.amadeus.aqg.utils.HttpUtils.openUrl(HttpUtils.java:94) at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:231) at rx.internal.util.ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:228) at rx.Observable.unsafeSubscribe(Observable.java:10150)

I saw that this issue has been solved in the v3.0.0 of vertx but it seems that it is still in place.

tsegismont commented 7 years ago

Hi,

Can you post your question to the vertx forum ? Not everyone in the community monitors GH repos.

Please add a bit more context as well (longer code snippet).

Thank you

2017-01-16 9:06 GMT+01:00 IonelDem notifications@github.com:

When using the HttpClientRequest like the following:

HttpClientRequest request = wsClient.request(HttpMethod.GET, url.getPath());

I have the following error:

SEVERE: Unhandled exception rx.exceptions.OnErrorNotImplementedException: port out of range:-1 at rx.internal.util.InternalObservableUtils$ ErrorNotImplementedAction.call(InternalObservableUtils.java:386) at rx.internal.util.InternalObservableUtils$ErrorNotImplementedAction. call(InternalObservableUtils.java:383) at rx.internal.util. ActionSubscriber.onError(ActionSubscriber.java:44) at rx.observers.SafeSubscriber._onError(SafeSubscriber.java:152) at rx.observers.SafeSubscriber.onError(SafeSubscriber.java:115) at rx.internal.operators.OnSubscribeMap$MapSubscriber. onError(OnSubscribeMap.java:88) at rx.internal.operators. OnSubscribeMap$MapSubscriber.onError(OnSubscribeMap.java:88) at rx.Observable.unsafeSubscribe(Observable.java:10157) at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48) at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33) at rx.Observable.unsafeSubscribe(Observable.java:10150) at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48) at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33) at rx.Observable.subscribe(Observable.java:10246) at rx.Observable.subscribe(Observable.java:10213) at rx.Observable.subscribe(Observable.java:10018) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle. assessUrl(Criterion24Verticle.java:202) at com.amadeus.aqg.verticles. criteria.Criterion24Verticle.access$000(Criterion24Verticle.java:25) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle$ 1.call(Criterion24Verticle.java:120) at com.amadeus.aqg.verticles. criteria.Criterion24Verticle$1.call(Criterion24Verticle.java:115) at rx.Observable.subscribe(Observable.java:10246) at rx.Observable.subscribe(Observable.java:10213) at rx.Observable.subscribe(Observable.java:10018) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle. assess(Criterion24Verticle.java:44) at com.amadeus.aqg.verticles. criteria.Criterion24Verticle.lambda$null$1(Criterion24Verticle.java:105) at java.util.ArrayList.forEach(ArrayList.java:1249) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle. lambda$computeStatus$2(Criterion24Verticle.java:94) at java.util.ArrayList.forEach(ArrayList.java:1249) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle.computeStatus(Criterion24Verticle.java:92) at com.amadeus.aqg.verticles.criteria.Criterion24Verticle. lambda$registerListeners$4(Criterion24Verticle.java:233) at io.vertx.rxjava.core.eventbus.EventBus$3.handle(EventBus.java:203) at io.vertx.rxjava.core.eventbus.EventBus$3.handle(EventBus.java:201) at io.vertx.core.eventbus.impl.HandlerRegistration.deliver(HandlerRegistration.java:212) at io.vertx.core.eventbus.impl.HandlerRegistration.handle(HandlerRegistration.java:191) at io.vertx.core.eventbus.impl.EventBusImpl.lambda$deliverToHandler$3(EventBusImpl.java:503) at io.vertx.core.impl.ContextImpl.lambda$wrapTask$2(ContextImpl.java:316) at io.netty.util.concurrent.AbstractEventExecutor.safeExecute( AbstractEventExecutor.java:163) at io.netty.util.concurrent. SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:418) at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:440) at io.netty.util.concurrent.SingleThreadEventExecutor$5. run(SingleThreadEventExecutor.java:873) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.IllegalArgumentException: port out of range:-1 at java.net.InetSocketAddress.checkPort(InetSocketAddress.java:143) at java.net.InetSocketAddress.createUnresolved(InetSocketAddress.java:254) at io.netty.bootstrap.Bootstrap.connect(Bootstrap.java:126) at io.vertx.core.net.impl.ChannelProvider.connect(ChannelProvider.java:37) at io.vertx.core.http.impl.ConnectionManager$ChannelConnector.connect(ConnectionManager.java:523) at io.vertx.core.http.impl.ConnectionManager$ConnQueue. createNewConnection(ConnectionManager.java:279) at io.vertx.core.http.impl.ConnectionManager$ConnQueue.getConnection(ConnectionManager.java:222) at io.vertx.core.http.impl.ConnectionManager.getConnectionForRequest(ConnectionManager.java:139) at io.vertx.core.http.impl.HttpClientImpl.getConnectionForRequest(HttpClientImpl.java:687) at io.vertx.core.http.impl.HttpClientRequestImpl.connect( HttpClientRequestImpl.java:614) at io.vertx.core.http.impl. HttpClientRequestImpl.write(HttpClientRequestImpl.java:738) at io.vertx.core.http.impl.HttpClientRequestImpl.end( HttpClientRequestImpl.java:334) at io.vertx.rxjava.core.http. HttpClientRequest.end(HttpClientRequest.java:345) at com.amadeus.aqg.utils.HttpUtils.openUrl(HttpUtils.java:94) at rx.internal.util.ScalarSynchronousObservable$3.call( ScalarSynchronousObservable.java:231) at rx.internal.util. ScalarSynchronousObservable$3.call(ScalarSynchronousObservable.java:228) at rx.Observable.unsafeSubscribe(Observable.java:10150)

I saw that this issue has been solved in the v3.0.0 of vertx but it seems that it is still in place.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/vert-x3/issues/issues/230, or mute the thread https://github.com/notifications/unsubscribe-auth/ABblts_yxJVIxlPwz4UGKTaXe7yUayhVks5rSyUdgaJpZM4LkRf2 .

IonelDem commented 7 years ago

By the vertx forum, you mean the Vertx developers group ?

tsegismont commented 7 years ago

No, the Vert.x user group: https://groups.google.com/forum/?fromgroups#!forum/vertx

See http://vertx.io/community/

2017-01-16 11:20 GMT+01:00 IonelDem notifications@github.com:

By the vertx forum, you mean the Vertx developers group ?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/vert-x3/issues/issues/230#issuecomment-272823190, or mute the thread https://github.com/notifications/unsubscribe-auth/ABbltoCYpyO7rUiTInKzXnnDLJq1GxXmks5rS0RmgaJpZM4LkRf2 .

IonelDem commented 7 years ago

Thank you. I will update the group with my issue.

Best regards

alexlehm commented 7 years ago

@IonelDem how are you constructing your wsClient object? probably its missing the setDefaultPort property

edit: could you please post a reproducer to the vertx group? it will be easier to analyse with that

IonelDem commented 7 years ago

Hello @alexlehm

Here is the complete code i use. It is simple.

  public static synchronized Observable<String> send(Vertx vertx, String requestUrl,
      String login, String password) {
    try {
      URL url = new URL(requestUrl);
      log.info("Sending HTTP Request to [{}]", url);
      HttpClientOptions options = new HttpClientOptions();
      options.setDefaultHost(url.getHost());
      options.setDefaultPort(url.getPort());
      HttpClient wsClient = vertx.createHttpClient(options);

      final String authHash =
          Base64.getEncoder().encodeToString(String.format("%s:%s", login, password).getBytes("UTF-8"));
      HttpClientRequest request = wsClient.request(HttpMethod.GET, url.getPath());
      request.putHeader(HttpHeaders.ACCEPT.toString(), "text/html");
      request.putHeader(HttpHeaders.AUTHORIZATION.toString(), "Basic " + authHash);
      UrlElement elements = new UrlElement(request);
      return Observable.just(elements).flatMap(HttpUtils::openUrl).map((data) -> {
        log.debug(data);
        return data;
      });
    } catch (MalformedURLException e) {
      log.error("Incorrect URL is spcified for HTTP request: [{}]", requestUrl, e);
      return Observable.error(new WorkerException("Incorrect URL spcified for HTTP request"));
    } catch (UnsupportedEncodingException e) {
      log.error("An error occured while trying to encode login/password for Basic authentication", e);
      return Observable.error(
          new WorkerException("An error occured while trying to encode login/password for Basic authentication"));
    }
  }

  static synchronized Observable<String> openUrl(UrlElement urlElements) {
    ObservableHandler<HttpClientResponse> obs = RxHelper.observableHandler();
    urlElements.request.handler(obs.toHandler()).end();
    return obs.flatMap((res) -> {
      ObservableHandler<Buffer> obs1 = RxHelper.observableHandler();
      res.bodyHandler(obs1.toHandler());
      return obs1.flatMap(data -> {
        log.info("Data retrieved");
        return Observable.just(data.toString());
      });
    });
  }

The URL I want to reach is some time an HTTPS url or a simple HTTP in my intranet. In every url I have the same error as displayed above and below in my previous post.

rx.exceptions.OnErrorNotImplementedException: port out of range:-1

For example, the following URL won't work:

http://some.server.my.company.net/api/json

This one will work:

http://some.server.my.company.net:80/api/json

IonelDem commented 7 years ago

Probleme solved. Thank you all. See the group; https://groups.google.com/forum/?fromgroups=#!topic/vertx/HCILTON4HY0