Search in sources :

Example 26 with ClientException

use of com.networknt.exception.ClientException in project light-portal by networknt.

the class GetFormTest method testGetForm.

@Test
public void testGetForm() throws ClientException, ApiException {
    final Http2Client client = Http2Client.getInstance();
    final CountDownLatch latch = new CountDownLatch(1);
    final ClientConnection connection;
    try {
        connection = client.connect(new URI(url), Http2Client.WORKER, Http2Client.SSL, Http2Client.POOL, enableHttp2 ? OptionMap.create(UndertowOptions.ENABLE_HTTP2, true) : OptionMap.EMPTY).get();
    } catch (Exception e) {
        throw new ClientException(e);
    }
    final String requestBody = "{\"host\":\"lightapi.net\",\"service\":\"form\",\"action\":\"getForm\",\"version\":\"0.1.0\"}";
    System.out.println("json:" + requestBody);
    final AtomicReference<ClientResponse> reference = new AtomicReference<>();
    try {
        ClientRequest request = new ClientRequest().setPath("/api/json").setMethod(Methods.POST);
        request.getRequestHeaders().put(Headers.CONTENT_TYPE, "application/json");
        request.getRequestHeaders().put(Headers.TRANSFER_ENCODING, "chunked");
        connection.sendRequest(request, client.createClientCallback(reference, latch, requestBody));
        latch.await();
    } catch (Exception e) {
        logger.error("Exception: ", e);
        throw new ClientException(e);
    } finally {
        IoUtils.safeClose(connection);
    }
    int statusCode = reference.get().getResponseCode();
    String body = reference.get().getAttachment(Http2Client.RESPONSE_BODY);
    Assert.assertEquals(200, statusCode);
    Assert.assertNotNull(body);
}
Also used : ClientResponse(io.undertow.client.ClientResponse) ClientConnection(io.undertow.client.ClientConnection) AtomicReference(java.util.concurrent.atomic.AtomicReference) Http2Client(com.networknt.client.Http2Client) ClientException(com.networknt.exception.ClientException) CountDownLatch(java.util.concurrent.CountDownLatch) URI(java.net.URI) ClientException(com.networknt.exception.ClientException) ApiException(com.networknt.exception.ApiException) ClientRequest(io.undertow.client.ClientRequest) Test(org.junit.Test)

Example 27 with ClientException

use of com.networknt.exception.ClientException in project light-portal by networknt.

the class UserIdDeleteHandlerTest method testUserIdDeleteHandlerTest.

@Test
public void testUserIdDeleteHandlerTest() throws ClientException, ApiException {
    final Http2Client client = Http2Client.getInstance();
    final CountDownLatch latch = new CountDownLatch(1);
    final ClientConnection connection;
    try {
        connection = client.connect(new URI(url), Http2Client.WORKER, Http2Client.SSL, Http2Client.POOL, enableHttp2 ? OptionMap.create(UndertowOptions.ENABLE_HTTP2, true) : OptionMap.EMPTY).get();
    } catch (Exception e) {
        throw new ClientException(e);
    }
    final AtomicReference<ClientResponse> reference = new AtomicReference<>();
    try {
        ClientRequest request = new ClientRequest().setPath("/v1/user/122222").setMethod(Methods.DELETE);
        connection.sendRequest(request, client.createClientCallback(reference, latch));
        latch.await();
    } catch (Exception e) {
        logger.error("Exception: ", e);
        throw new ClientException(e);
    } finally {
        IoUtils.safeClose(connection);
    }
    int statusCode = reference.get().getResponseCode();
    String body = reference.get().getAttachment(Http2Client.RESPONSE_BODY);
    System.out.println("response:" + body);
    Assert.assertEquals(200, statusCode);
    Assert.assertNotNull(body);
}
Also used : ClientResponse(io.undertow.client.ClientResponse) ClientConnection(io.undertow.client.ClientConnection) AtomicReference(java.util.concurrent.atomic.AtomicReference) Http2Client(com.networknt.client.Http2Client) ClientException(com.networknt.exception.ClientException) CountDownLatch(java.util.concurrent.CountDownLatch) URI(java.net.URI) ClientException(com.networknt.exception.ClientException) SQLException(java.sql.SQLException) IOException(java.io.IOException) ApiException(com.networknt.exception.ApiException) ClientRequest(io.undertow.client.ClientRequest) Test(org.junit.Test)

Example 28 with ClientException

use of com.networknt.exception.ClientException in project light-4j by networknt.

the class TraceabilityHandlerTest method testGetWithoutTid.

@Test
public void testGetWithoutTid() throws Exception {
    final Http2Client client = Http2Client.getInstance();
    final CountDownLatch latch = new CountDownLatch(1);
    final ClientConnection connection;
    try {
        connection = client.connect(new URI("http://localhost:8080"), Http2Client.WORKER, Http2Client.SSL, Http2Client.POOL, OptionMap.EMPTY).get();
    } catch (Exception e) {
        throw new ClientException(e);
    }
    final AtomicReference<ClientResponse> reference = new AtomicReference<>();
    try {
        ClientRequest request = new ClientRequest().setPath("/get").setMethod(Methods.GET);
        // request.getRequestHeaders().put(Constants.TRACEABILITY_ID, "12345");
        connection.sendRequest(request, client.createClientCallback(reference, latch));
        latch.await();
    } catch (Exception e) {
        logger.error("Exception: ", e);
        throw new ClientException(e);
    } finally {
        IoUtils.safeClose(connection);
    }
    int statusCode = reference.get().getResponseCode();
    Assert.assertEquals(200, statusCode);
    if (statusCode == 200) {
        String body = reference.get().getAttachment(Http2Client.RESPONSE_BODY);
        Assert.assertNotNull(body);
        Assert.assertEquals("get", body);
        String tid = reference.get().getResponseHeaders().getFirst(Constants.TRACEABILITY_ID);
        Assert.assertNull(tid);
    }
}
Also used : AtomicReference(java.util.concurrent.atomic.AtomicReference) Http2Client(com.networknt.client.Http2Client) ClientException(com.networknt.exception.ClientException) CountDownLatch(java.util.concurrent.CountDownLatch) URI(java.net.URI) ClientException(com.networknt.exception.ClientException) IOException(java.io.IOException) Test(org.junit.Test)

Example 29 with ClientException

use of com.networknt.exception.ClientException in project light-4j by networknt.

the class Http2Client method checkCCTokenExpired.

private void checkCCTokenExpired() throws ClientException, ApiException {
    long tokenRenewBeforeExpired = (Integer) tokenConfig.get(TOKEN_RENEW_BEFORE_EXPIRED);
    long expiredRefreshRetryDelay = (Integer) tokenConfig.get(EXPIRED_REFRESH_RETRY_DELAY);
    long earlyRefreshRetryDelay = (Integer) tokenConfig.get(EARLY_REFRESH_RETRY_DELAY);
    boolean isInRenewWindow = expire - System.currentTimeMillis() < tokenRenewBeforeExpired;
    if (logger.isTraceEnabled())
        logger.trace("isInRenewWindow = " + isInRenewWindow);
    if (isInRenewWindow) {
        if (expire <= System.currentTimeMillis()) {
            if (logger.isTraceEnabled())
                logger.trace("In renew window and token is expired.");
            // block other request here to prevent using expired token.
            synchronized (Http2Client.class) {
                if (expire <= System.currentTimeMillis()) {
                    if (logger.isTraceEnabled())
                        logger.trace("Within the synch block, check if the current request need to renew token");
                    if (!renewing || System.currentTimeMillis() > expiredRetryTimeout) {
                        // if there is no other request is renewing or the renewing flag is true but renewTimeout is passed
                        renewing = true;
                        expiredRetryTimeout = System.currentTimeMillis() + expiredRefreshRetryDelay;
                        if (logger.isTraceEnabled())
                            logger.trace("Current request is renewing token synchronously as token is expired already");
                        getCCToken();
                        renewing = false;
                    } else {
                        if (logger.isTraceEnabled())
                            logger.trace("Circuit breaker is tripped and not timeout yet!");
                        // reject all waiting requests by thrown an exception.
                        throw new ApiException(new Status(STATUS_CLIENT_CREDENTIALS_TOKEN_NOT_AVAILABLE));
                    }
                }
            }
        } else {
            // Not expired yet, try to renew async but let requests use the old token.
            if (logger.isTraceEnabled())
                logger.trace("In renew window but token is not expired yet.");
            synchronized (Http2Client.class) {
                if (expire > System.currentTimeMillis()) {
                    if (!renewing || System.currentTimeMillis() > earlyRetryTimeout) {
                        renewing = true;
                        earlyRetryTimeout = System.currentTimeMillis() + earlyRefreshRetryDelay;
                        if (logger.isTraceEnabled())
                            logger.trace("Retrieve token async is called while token is not expired yet");
                        ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
                        executor.schedule(() -> {
                            try {
                                getCCToken();
                                renewing = false;
                                if (logger.isTraceEnabled())
                                    logger.trace("Async get token is completed.");
                            } catch (Exception e) {
                                logger.error("Async retrieve token error", e);
                            // swallow the exception here as it is on a best effort basis.
                            }
                        }, 50, TimeUnit.MILLISECONDS);
                        executor.shutdown();
                    }
                }
            }
        }
    }
    if (logger.isTraceEnabled())
        logger.trace("Check secondary token is done!");
}
Also used : Status(com.networknt.status.Status) ScheduledExecutorService(java.util.concurrent.ScheduledExecutorService) ClientException(com.networknt.exception.ClientException) IOException(java.io.IOException) CertificateException(java.security.cert.CertificateException) UnsupportedEncodingException(java.io.UnsupportedEncodingException) ApiException(com.networknt.exception.ApiException) ApiException(com.networknt.exception.ApiException)

Example 30 with ClientException

use of com.networknt.exception.ClientException in project light-4j by networknt.

the class OauthHelper method getKey.

public static String getKey(KeyRequest keyRequest, boolean http2) throws ClientException {
    final Http2Client client = Http2Client.getInstance();
    final CountDownLatch latch = new CountDownLatch(1);
    final ClientConnection connection;
    try {
        connection = client.connect(new URI(keyRequest.getServerUrl()), Http2Client.WORKER, Http2Client.SSL, Http2Client.POOL, http2 ? OptionMap.create(UndertowOptions.ENABLE_HTTP2, true) : OptionMap.EMPTY).get();
    } catch (Exception e) {
        throw new ClientException(e);
    }
    final AtomicReference<ClientResponse> reference = new AtomicReference<>();
    try {
        ClientRequest request = new ClientRequest().setPath(keyRequest.getUri()).setMethod(Methods.GET);
        request.getRequestHeaders().put(Headers.AUTHORIZATION, getBasicAuthHeader(keyRequest.getClientId(), keyRequest.getClientSecret()));
        request.getRequestHeaders().put(Headers.HOST, "localhost");
        connection.sendRequest(request, client.createClientCallback(reference, latch));
        latch.await();
    } catch (Exception e) {
        logger.error("Exception: ", e);
        throw new ClientException(e);
    } finally {
        IoUtils.safeClose(connection);
    }
    return reference.get().getAttachment(Http2Client.RESPONSE_BODY);
}
Also used : AtomicReference(java.util.concurrent.atomic.AtomicReference) Http2Client(com.networknt.client.Http2Client) ClientException(com.networknt.exception.ClientException) CountDownLatch(java.util.concurrent.CountDownLatch) REDIRECT_URI(com.networknt.client.oauth.TokenRequest.REDIRECT_URI) URI(java.net.URI) ClientException(com.networknt.exception.ClientException) IOException(java.io.IOException) UnsupportedEncodingException(java.io.UnsupportedEncodingException)

Aggregations

ClientException (com.networknt.exception.ClientException)100 Http2Client (com.networknt.client.Http2Client)99 AtomicReference (java.util.concurrent.atomic.AtomicReference)99 URI (java.net.URI)98 CountDownLatch (java.util.concurrent.CountDownLatch)97 Test (org.junit.Test)92 ClientConnection (io.undertow.client.ClientConnection)82 ClientRequest (io.undertow.client.ClientRequest)82 ClientResponse (io.undertow.client.ClientResponse)82 ApiException (com.networknt.exception.ApiException)45 IOException (java.io.IOException)42 Status (com.networknt.status.Status)19 HttpString (io.undertow.util.HttpString)16 SQLException (java.sql.SQLException)12 UnsupportedEncodingException (java.io.UnsupportedEncodingException)8 UserDto (com.networknt.portal.usermanagement.model.common.domain.UserDto)4 HashMap (java.util.HashMap)4 JsonProcessingException (com.fasterxml.jackson.core.JsonProcessingException)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)3 REDIRECT_URI (com.networknt.client.oauth.TokenRequest.REDIRECT_URI)2