Search code examples
javarestvert.xvertx-httpclient

Vertx clientHttp : Connection closed when perform rest call


3.3 and i try to perform rest api call in asynchronous way. for that i' try to use httpClient, `final HttpClient httpClient = vertx.createHttpClient();

        new HttpGet(uri);

        httpClient.requestAbs(apiMethod.getHttpMethod(), uri, resultHandler -> {
            resultHandler.statusCode();
            if (resultHandler.statusCode() == 200) {
                environment.setStatus(ApiStatus.OK);
                apiMethod.setStatus(ApiStatus.OK);
            } else {
                environment.setStatus(ApiStatus.ERROR);
                apiMethod.setStatus(ApiStatus.ERROR);
            }
            resultHandler.bodyHandler(buffer -> {
                logger.debug("Output from Server .... \n");
                buffer.toString();
            });
        }).exceptionHandler(handlerExc -> {
            logger.error(" handle exception:" + handlerExc.getMessage(), handlerExc.getCause());
            apiMethod.setStatus(ApiStatus.ERROR);
            environment.setStatus(ApiStatus.ERROR);
            apiMethod.setCallingResult(handlerExc.getMessage());

        }).putHeader("content-type", "application/json").end();`

I'm still get the error: Connection was closed. when i curl the request or use my browser/postman it works fine. can anyone have an idea of where i'm wrong? is it a network issue? Best regards,


Solution

  • here are the full code

        final HttpClientOptions options = new HttpClientOptions();
        options.setTrustAll(true);
        final String proxyUrl = "yourProxyUrl.net";
        options.setSsl(true);
        int port = 443;
        final ProxyOptions proxyOptions = new ProxyOptions().setHost(proxyUrl).setPort(port);
        options.setProxyOptions(proxyOptions);
        options.setDefaultPort(port);
        HttpClient httpClient= vertx.createHttpClient(options);
    
        httpClient.requestAbs(apiMethod.getHttpMethod(), uri, resultHandler -> {
            resultHandler.statusCode();
            if (resultHandler.statusCode() == 200) {
                environment.setStatus(ApiStatus.OK);
                apiMethod.setStatus(ApiStatus.OK);
            } else {
                environment.setStatus(ApiStatus.ERROR);
                apiMethod.setStatus(ApiStatus.ERROR);
            }
            resultHandler.bodyHandler(buffer -> {
                logger.debug("Output from Server .... \n");
                buffer.toString();
            });
        }).exceptionHandler(handlerExc -> {
            logger.error(" handle exception:" + handlerExc.getMessage(), handlerExc.getCause());
            apiMethod.setStatus(ApiStatus.ERROR);
            environment.setStatus(ApiStatus.ERROR);
            apiMethod.setCallingResult(handlerExc.getMessage());
    
        }).putHeader("content-type", "application/json").end();