HttpClientExchange(ClientCallback<ClientExchange> readyCallback, ClientRequest request, HttpClientConnection clientConnection) { this.readyCallback = readyCallback; this.request = request; this.clientConnection = clientConnection; boolean reqContinue = false; if (request.getRequestHeaders().contains(Headers.EXPECT)) { for (String header : request.getRequestHeaders().get(Headers.EXPECT)) { if (header.equals("100-continue")) { reqContinue = true; } } } this.requiresContinue = reqContinue; }
AjpClientExchange(ClientCallback<ClientExchange> readyCallback, ClientRequest request, AjpClientConnection clientConnection) { this.readyCallback = readyCallback; this.request = request; this.clientConnection = clientConnection; boolean reqContinue = false; if (request.getRequestHeaders().contains(Headers.EXPECT)) { for (String header : request.getRequestHeaders().get(Headers.EXPECT)) { if (header.equals("100-continue")) { reqContinue = true; } } } this.requiresContinue = reqContinue; }
private static void addHttpHeaders(ClientRequest request, HttpHeaders headers) { HeaderMap headerMap = request.getRequestHeaders(); headers.forEach((key, values) -> { for (String value : values) { headerMap.add(HttpString.tryFromString(key), value); } }); }
/** * Add Authorization Code grant token the caller app gets from OAuth2 server. * * This is the method called from client like web server * * @param request the http request * @param token the bearer token */ public void addAuthToken(ClientRequest request, String token) { if(token != null && !token.startsWith("Bearer ")) { if(token.toUpperCase().startsWith("BEARER ")) { // other cases of Bearer token = "Bearer " + token.substring(7); } else { token = "Bearer " + token; } } request.getRequestHeaders().put(Headers.AUTHORIZATION, token); }
/** * Add Authorization Code grant token the caller app gets from OAuth2 server and add traceabilityId * * This is the method called from client like web server that want to have traceabilityId pass through. * * @param request the http request * @param token the bearer token * @param traceabilityId the traceability id */ public void addAuthTokenTrace(ClientRequest request, String token, String traceabilityId) { if(token != null && !token.startsWith("Bearer ")) { if(token.toUpperCase().startsWith("BEARER ")) { // other cases of Bearer token = "Bearer " + token.substring(7); } else { token = "Bearer " + token; } } request.getRequestHeaders().put(Headers.AUTHORIZATION, token); request.getRequestHeaders().put(HttpStringConstants.TRACEABILITY_ID, traceabilityId); }
@Override public void completed(ClientConnection connection) { ClientRequest request = new ClientRequest().setMethod(Methods.POST).setPath(url.getPath()); HttpString headerName = HttpString.tryFromString(HttpHeaders.HOST); request.getRequestHeaders().add(headerName, url.getHost()); addHttpHeaders(request, headers); HttpHeaders httpHeaders = transportRequest.getHttpRequestHeaders(); connection.sendRequest(request, createReceiveCallback(transportRequest, url, httpHeaders, session, connectFuture)); }
/** * Add Client Credentials token cached in the client for standalone application * * This is the method called from standalone application like enterprise scheduler for batch jobs * or mobile apps. * * @param request the http request * @param traceabilityId the traceability id * @throws ClientException client exception * @throws ApiException api exception */ public void addCcTokenTrace(ClientRequest request, String traceabilityId) throws ClientException, ApiException { checkCCTokenExpired(); request.getRequestHeaders().put(Headers.AUTHORIZATION, "Bearer " + jwt); request.getRequestHeaders().put(HttpStringConstants.TRACEABILITY_ID, traceabilityId); }
/** * Add Client Credentials token cached in the client for standalone application * * This is the method called from standalone application like enterprise scheduler for batch jobs * or mobile apps. * * @param request the http request * @throws ClientException client exception * @throws ApiException api exception */ public void addCcToken(ClientRequest request) throws ClientException, ApiException { checkCCTokenExpired(); request.getRequestHeaders().put(Headers.AUTHORIZATION, "Bearer " + jwt); }
try { ClientRequest request = new ClientRequest().setMethod(method).setPath(url.getPath()); request.getRequestHeaders().add(HttpString.tryFromString(HttpHeaders.HOST), url.getHost()); if (StringUtils.hasLength(body)) { HttpString headerName = HttpString.tryFromString(HttpHeaders.CONTENT_LENGTH); request.getRequestHeaders().add(headerName, body.length());
public void sendRequest(ClientRequest request, SSLContext sslContext, AuthenticationConfiguration authenticationConfiguration, HttpMarshaller httpMarshaller, HttpResultHandler httpResultHandler, HttpFailureHandler failureHandler, ContentType expectedResponse, Runnable completedTask) { if (sessionId != null) { request.getRequestHeaders().add(Headers.COOKIE, "JSESSIONID=" + sessionId); } connectionPool.getConnection(connection -> sendRequestInternal(connection, request, authenticationConfiguration, httpMarshaller, httpResultHandler, failureHandler, expectedResponse, completedTask, false, false, sslContext), failureHandler::handleFailure, false, sslContext); }
public void sendRequest(ClientRequest request, SSLContext sslContext, AuthenticationConfiguration authenticationConfiguration, HttpMarshaller httpMarshaller, HttpResultHandler httpResultHandler, HttpFailureHandler failureHandler, ContentType expectedResponse, Runnable completedTask, boolean allowNoContent) { if (sessionId != null) { request.getRequestHeaders().add(Headers.COOKIE, "JSESSIONID=" + sessionId); } connectionPool.getConnection(connection -> sendRequestInternal(connection, request, authenticationConfiguration, httpMarshaller, httpResultHandler, failureHandler, expectedResponse, completedTask, allowNoContent, false, sslContext), failureHandler::handleFailure, false, sslContext); }
private Object processInvocation(Name name, HttpString method, String pathSegment, Name newName) throws NamingException { ProviderEnvironment environment = httpNamingProvider.getProviderEnvironment(); final RetryContext context = canRetry(environment) ? new RetryContext() : null; return performWithRetry((contextOrNull, name1, param) -> { try { HttpNamingProvider.HttpPeerIdentity peerIdentity = (HttpNamingProvider.HttpPeerIdentity) httpNamingProvider.getPeerIdentityForNamingUsingRetry(contextOrNull); StringBuilder sb = new StringBuilder(); String uriPath = peerIdentity.getUri().getPath(); sb.append(uriPath); if (!uriPath.endsWith("/")) { sb.append("/"); } sb.append(pathSegment) .append(URLEncoder.encode(name.toString(), StandardCharsets.UTF_8.name())); if (newName != null) { sb.append("?new="); sb.append(URLEncoder.encode(newName.toString(), StandardCharsets.UTF_8.name())); } final ClientRequest clientRequest = new ClientRequest() .setPath(sb.toString()) .setMethod(method); clientRequest.getRequestHeaders().put(Headers.ACCEPT, ACCEPT_VALUE); return performOperation(name1, peerIdentity.getUri(), clientRequest); } catch (UnsupportedEncodingException e) { NamingException namingException = new NamingException(e.getMessage()); namingException.initCause(e); throw namingException; } }, environment, context, name, null); }
private void processInvocation(Name name, HttpString method, Object object, String pathSegment) throws NamingException { ProviderEnvironment environment = httpNamingProvider.getProviderEnvironment(); final RetryContext context = canRetry(environment) ? new RetryContext() : null; performWithRetry((contextOrNull, name1, param) -> { HttpNamingProvider.HttpPeerIdentity peerIdentity = (HttpNamingProvider.HttpPeerIdentity) httpNamingProvider.getPeerIdentityForNamingUsingRetry(contextOrNull); try { StringBuilder sb = new StringBuilder(); String uriPath = peerIdentity.getUri().getPath(); sb.append(uriPath); if (!uriPath.endsWith("/")) { sb.append("/"); } sb.append(pathSegment).append(URLEncoder.encode(name.toString(), StandardCharsets.UTF_8.name())); final ClientRequest clientRequest = new ClientRequest() .setPath(sb.toString()) .setMethod(method); clientRequest.getRequestHeaders().put(Headers.ACCEPT, ACCEPT_VALUE); if (object != null) { clientRequest.getRequestHeaders().put(Headers.CONTENT_TYPE, VALUE_TYPE.toString()); } performOperation(peerIdentity.getUri(), object, clientRequest); return null; } catch (UnsupportedEncodingException e) { NamingException namingException = new NamingException(e.getMessage()); namingException.initCause(e); throw namingException; } }, environment, context, name, object); }
@Override public void run() { final ClientRequest request = new ClientRequest().setMethod(Methods.POST).setPath(path); request.getRequestHeaders().put(Headers.TRANSFER_ENCODING, "chunked"); request.getRequestHeaders().put(Headers.HOST, "localhost"); connection.sendRequest(request, client.createClientCallback(reference, latch, body)); } });
public ClientRequest createRequest(String mountPoint) { ClientRequest clientRequest = new ClientRequest(); if (invocationType == InvocationType.METHOD_INVOCATION) { clientRequest.setMethod(Methods.POST); clientRequest.getRequestHeaders().add(Headers.ACCEPT, INVOCATION_ACCEPT); if (invocationId != null) { clientRequest.getRequestHeaders().put(EjbHeaders.INVOCATION_ID, invocationId); } clientRequest.setPath(buildPath(mountPoint, "invoke", appName, moduleName, distinctName, beanName, beanId, view, method)); clientRequest.getRequestHeaders().put(Headers.CONTENT_TYPE, EjbHeaders.INVOCATION_VERSION_ONE); } else if (invocationType == InvocationType.STATEFUL_CREATE) { clientRequest.setMethod(Methods.POST); clientRequest.getRequestHeaders().put(Headers.CONTENT_TYPE, EjbHeaders.SESSION_OPEN_VERSION_ONE); clientRequest.setPath(buildPath(mountPoint,"open", appName, moduleName, distinctName, beanName)); clientRequest.getRequestHeaders().add(Headers.ACCEPT, STATEFUL_CREATE_ACCEPT); } else if(invocationType == InvocationType.CANCEL) { clientRequest.setMethod(Methods.DELETE); clientRequest.setPath(buildPath(mountPoint,"cancel", appName, moduleName, distinctName, beanName, invocationId, cancelIfRunning)); } return clientRequest; }
/** * Support API to API calls with scope token. The token is the original token from consumer and * the client credentials token of caller API is added from cache. authToken, correlationId and * traceabilityId are passed in as strings. * * This method is used in API to API call * * @param request the http request * @param authToken the authorization token * @param correlationId the correlation id * @param traceabilityId the traceability id * @throws ClientException client exception * @throws ApiException api exception */ public void populateHeader(ClientRequest request, String authToken, String correlationId, String traceabilityId) throws ClientException, ApiException { if(traceabilityId != null) { addAuthTokenTrace(request, authToken, traceabilityId); } else { addAuthToken(request, authToken); } request.getRequestHeaders().put(HttpStringConstants.CORRELATION_ID, correlationId); checkCCTokenExpired(); request.getRequestHeaders().put(HttpStringConstants.SCOPE_TOKEN, "Bearer " + jwt); }
@Override public void sendRequest(final ClientRequest request, final ClientCallback<ClientExchange> clientCallback) { if(http2Delegate != null) { http2Delegate.sendRequest(request, clientCallback); return; } if (anyAreSet(state, UPGRADE_REQUESTED | UPGRADED | CLOSE_REQ | CLOSED)) { clientCallback.failed(UndertowClientMessages.MESSAGES.invalidConnectionState()); return; } final HttpClientExchange httpClientExchange = new HttpClientExchange(clientCallback, request, this); boolean ssl = this.connection instanceof SslConnection; if(!ssl && !http2Tried && options.get(UndertowOptions.ENABLE_HTTP2, false) && !request.getRequestHeaders().contains(Headers.UPGRADE)) { //this is the first request, as we want to try a HTTP2 upgrade request.getRequestHeaders().put(new HttpString("HTTP2-Settings"), Http2ClearClientProvider.createSettingsFrame(options, bufferPool)); request.getRequestHeaders().put(Headers.UPGRADE, Http2Channel.CLEARTEXT_UPGRADE_STRING); request.getRequestHeaders().put(Headers.CONNECTION, "Upgrade, HTTP2-Settings"); http2Tried = true; } if (currentRequest == null) { initiateRequest(httpClientExchange); } else { pendingQueue.add(httpClientExchange); } }
public static String derefToken(DerefRequest derefRequest) throws ClientException { final Http2Client client = Http2Client.getInstance(); final CountDownLatch latch = new CountDownLatch(1); final ClientConnection connection; try { connection = client.connect(new URI(derefRequest.getServerUrl()), Http2Client.WORKER, Http2Client.SSL, Http2Client.BUFFER_POOL, derefRequest.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(derefRequest.getUri()).setMethod(Methods.GET); request.getRequestHeaders().put(Headers.AUTHORIZATION, getBasicAuthHeader(derefRequest.getClientId(), derefRequest.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); }
public static String getKey(KeyRequest keyRequest) 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.BUFFER_POOL, keyRequest.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(keyRequest.getUri()).setMethod(Methods.GET); if (keyRequest.getClientId()!=null) { 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); }
protected void doHttp2Upgrade() { try { StreamConnection connectedStreamChannel = this.performUpgrade(); Http2Channel http2Channel = new Http2Channel(connectedStreamChannel, null, bufferPool, null, true, true, options); Http2ClientConnection http2ClientConnection = new Http2ClientConnection(http2Channel, currentRequest.getResponseCallback(), currentRequest.getRequest(), currentRequest.getRequest().getRequestHeaders().getFirst(Headers.HOST), clientStatistics, false); http2ClientConnection.getCloseSetter().set(new ChannelListener<ClientConnection>() { @Override public void handleEvent(ClientConnection channel) { ChannelListeners.invokeChannelListener(HttpClientConnection.this, HttpClientConnection.this.closeSetter.get()); } }); http2Delegate = http2ClientConnection; connectedStreamChannel.getSourceChannel().wakeupReads(); //make sure the read listener is immediately invoked, as it may not happen if data is pushed back currentRequest = null; pendingResponse = null; } catch (IOException e) { UndertowLogger.REQUEST_IO_LOGGER.ioException(e); safeClose(this); } }