public SimpleHttpContentPublisher(SdkHttpFullRequest request) { this.content = request.contentStreamProvider().map(p -> invokeSafely(() -> IoUtils.toByteArray(p.newStream()))) .orElseGet(() -> new byte[0]); this.length = content.length; }
@Override public Response<OutputT> execute(SdkHttpFullRequest request, RequestExecutionContext context) throws Exception { if (request.contentStreamProvider().isPresent()) { request = request.toBuilder() .contentStreamProvider(createManagedStream(request.contentStreamProvider().get())).build(); } InterruptMonitor.checkInterrupted(); return wrapped.execute(request, context); }
private static byte[] toUtf8ByteArray(Map<String, AttributeValue> item) { SdkHttpFullRequest marshalled = putItemRequestMarshaller().marshall(PutItemRequest.builder().item(item).build()); InputStream content = marshalled.contentStreamProvider().get().newStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buff = new byte[8192]; int read; try { while ((read = content.read(buff)) != -1) { baos.write(buff, 0, read); } } catch (IOException ioe) { throw new UncheckedIOException(ioe); } return baos.toByteArray(); }
/** * Encodes the request into a flow message and then returns bytebuffer from the message. * * @param request The request to encode * @return A bytebuffer representing the given request */ public static ByteBuffer encodeEventStreamRequestToByteBuffer(SdkHttpFullRequest request) { Map<String, HeaderValue> headers = request.headers() .entrySet() .stream() .collect(Collectors.toMap(Map.Entry::getKey, e -> HeaderValue.fromString( firstIfPresent(e.getValue())))); byte[] payload = null; if (request.contentStreamProvider().isPresent()) { try { payload = IoUtils.toByteArray(request.contentStreamProvider().get().newStream()); } catch (IOException e) { throw new UncheckedIOException(e); } } return new Message(headers, payload).toByteBuffer(); }
public InterceptorContext modifyHttpRequest(InterceptorContext context, ExecutionAttributes executionAttributes) { InterceptorContext result = context; for (ExecutionInterceptor interceptor : interceptors) { AsyncRequestBody asyncRequestBody = interceptor.modifyAsyncHttpContent(result, executionAttributes).orElse(null); SdkHttpFullRequest sdkHttpFullRequest = (SdkHttpFullRequest) context.httpRequest(); if (!result.requestBody().isPresent() && sdkHttpFullRequest.contentStreamProvider().isPresent()) { int contentLength = Integer.parseInt(sdkHttpFullRequest.firstMatchingHeader("Content-Length").orElse("0")); String contentType = sdkHttpFullRequest.firstMatchingHeader("Content-Type").orElse(""); RequestBody requestBody = RequestBody.fromContentProvider(sdkHttpFullRequest.contentStreamProvider().get(), contentLength, contentType); result = result.toBuilder().requestBody(requestBody).build(); } RequestBody requestBody = interceptor.modifyHttpContent(result, executionAttributes).orElse(null); SdkHttpRequest interceptorResult = interceptor.modifyHttpRequest(result, executionAttributes); validateInterceptorResult(result.httpRequest(), interceptorResult, interceptor, "modifyHttpRequest"); result = result.copy(b -> b.httpRequest(interceptorResult) .asyncRequestBody(asyncRequestBody) .requestBody(requestBody)); } return result; }
protected void testForResponseCodeUsingHttps(SdkHttpClient client, int returnCode) throws Exception { SdkHttpMethod sdkHttpMethod = SdkHttpMethod.POST; stubForMockRequest(returnCode); SdkHttpFullRequest req = mockSdkRequest("https://localhost:" + mockServer.httpsPort(), sdkHttpMethod); HttpExecuteResponse rsp = client.prepareRequest(HttpExecuteRequest.builder() .request(req) .contentStreamProvider(req.contentStreamProvider() .orElse(null)) .build()) .call(); validateResponse(rsp, returnCode, sdkHttpMethod); }
private HttpExecuteResponse executeHttpRequest(SdkHttpFullRequest request, RequestExecutionContext context) throws Exception { ExecutableHttpRequest requestCallable = sdkHttpClient .prepareRequest(HttpExecuteRequest.builder() .request(request) .contentStreamProvider(request.contentStreamProvider().orElse(null)) .build()); context.apiCallTimeoutTracker().abortable(requestCallable); context.apiCallAttemptTimeoutTracker().abortable(requestCallable); return requestCallable.call(); } }
private void testForResponseCode(int returnCode, SdkHttpMethod method) throws Exception { SdkHttpClient client = createSdkHttpClient(); stubForMockRequest(returnCode); SdkHttpFullRequest req = mockSdkRequest("http://localhost:" + mockServer.port(), method); HttpExecuteResponse rsp = client.prepareRequest(HttpExecuteRequest.builder() .request(req) .contentStreamProvider(req.contentStreamProvider() .orElse(null)) .build()) .call(); validateResponse(rsp, returnCode, method); }