/** * Create a new {@link HttpClient}. Note that this method should only be used outside of the context of an application. Within Micronaut use * {@link javax.inject.Inject} to inject a client instead * * @param url The base URL * @return The client */ static RxHttpClient create(URL url) { return new DefaultHttpClient(url); } }
NettyRequestWriter requestWriter = buildNettyRequest(clientHttpRequest, requestURI, requestContentType, permitsBody); HttpRequest nettyRequest = requestWriter.getNettyRequest(); prepareHttpHeaders( requestURI, finalRequest, traceRequest(finalRequest, nettyRequest); addFullHttpResponseHandler( finalRequest, channel,
io.micronaut.http.HttpRequest<I> request, URI requestURI) { SslContext sslContext = buildSslContext(requestURI); ChannelFuture channelFuture = doConnect(request, requestURI, sslContext, true); Disposable disposable = buildDisposableChannel(channelFuture); emitter.setDisposable(disposable); emitter.setCancellable(disposable::dispose); Channel channel = f.channel(); streamRequestThroughChannel(parentRequest, requestURI, requestWrapper, emitter, channel); } else { Throwable cause = f.cause(); applyFilterToResponsePublisher(parentRequest, request, requestURI, requestWrapper, streamResponsePublisher) );
@SuppressWarnings("unchecked") @Override public <I> Flowable<ByteBuffer<?>> dataStream(io.micronaut.http.HttpRequest<I> request) { return Flowable.fromPublisher(resolveRequestURI(request)) .flatMap(buildDataStreamPublisher(request)); }
@Override public <I> Flowable<io.micronaut.http.HttpResponse<ByteBuffer<?>>> exchangeStream(io.micronaut.http.HttpRequest<I> request) { return Flowable.fromPublisher(resolveRequestURI(request)) .flatMap(buildExchangeStreamPublisher(request)); }
@Override public <I, O> Flowable<O> jsonStream(io.micronaut.http.HttpRequest<I> request, io.micronaut.core.type.Argument<O> type) { final io.micronaut.http.HttpRequest<Object> parentRequest = ServerRequestContext.currentRequest().orElse(null); return Flowable.fromPublisher(resolveRequestURI(request)) .flatMap(buildJsonStreamPublisher(parentRequest, request, type)); }
Channel channel = (Channel) future.get(); try { sendRequestThroughChannel( requestWrapper, bodyType, SslContext sslContext = buildSslContext(requestURI); ChannelFuture connectionFuture = doConnect(request, requestURI, sslContext, false); connectionFuture.addListener(future -> { if (future.isSuccess()) { try { Channel channel = connectionFuture.channel(); sendRequestThroughChannel( requestWrapper, bodyType, Publisher<io.micronaut.http.HttpResponse<O>> finalPublisher = applyFilterToResponsePublisher(parentRequest, request, requestURI, requestWrapper, responsePublisher); Flowable<io.micronaut.http.HttpResponse<O>> finalFlowable; if (finalPublisher instanceof Flowable) {
Object bodyValue = body.get(); if (bodyValue instanceof CharSequence) { ByteBuf byteBuf = charSequenceToByteBuf((CharSequence) bodyValue, requestContentType); nettyRequest = clientHttpRequest.getFullRequest(byteBuf); } else { postRequestEncoder = buildFormDataRequest(clientHttpRequest, bodyValue); nettyRequest = postRequestEncoder.finalizeRequest(); postRequestEncoder = buildMultipartRequest(clientHttpRequest, bodyValue); nettyRequest = postRequestEncoder.finalizeRequest(); } else { ByteBuf textChunk = Unpooled.copiedBuffer(((CharSequence) o), requestContentType.getCharset().orElse(StandardCharsets.UTF_8)); if (log.isTraceEnabled()) { traceChunk(textChunk); if (encoded != null) { if (log.isTraceEnabled()) { traceChunk(encoded); bodyContent = charSequenceToByteBuf((CharSequence) bodyValue, requestContentType); } else if (mediaTypeCodecRegistry != null) { Optional<MediaTypeCodec> registeredCodec = mediaTypeCodecRegistry.findCodec(requestContentType);
@Override public <I, O, E> Flowable<io.micronaut.http.HttpResponse<O>> exchange(io.micronaut.http.HttpRequest<I> request, Argument<O> bodyType, Argument<E> errorType) { final io.micronaut.http.HttpRequest<Object> parentRequest = ServerRequestContext.currentRequest().orElse(null); Publisher<URI> uriPublisher = resolveRequestURI(request); return Flowable.fromPublisher(uriPublisher) .switchMap(buildExchangePublisher(parentRequest, request, bodyType, errorType)); }
List<HttpClientFilter> httpClientFilters = resolveFilters(parentRequest, request, requestURI); OrderUtil.reverseSort(httpClientFilters); Publisher<io.micronaut.http.HttpResponse<O>> finalResponsePublisher = responsePublisher; httpClientFilters.add((req, chain) -> finalResponsePublisher); ClientFilterChain filterChain = buildChain(requestWrapper, httpClientFilters); if (parentRequest != null) { responsePublisher = ServerRequestContext.with(parentRequest, (Supplier<Publisher<io.micronaut.http.HttpResponse<O>>>) () ->
Channel channel = (Channel) future.get(); try { sendRequestThroughChannel( requestWrapper, bodyType, SslContext sslContext = buildSslContext(requestURI); ChannelFuture connectionFuture = doConnect(request, requestURI, sslContext, false); connectionFuture.addListener(future -> { if (future.isSuccess()) { try { Channel channel = connectionFuture.channel(); sendRequestThroughChannel( requestWrapper, bodyType, Publisher<io.micronaut.http.HttpResponse<O>> finalPublisher = applyFilterToResponsePublisher(parentRequest, request, requestURI, requestWrapper, responsePublisher); Flowable<io.micronaut.http.HttpResponse<O>> finalFlowable; if (finalPublisher instanceof Flowable) {
if (requestContentType.equals(MediaType.APPLICATION_FORM_URLENCODED_TYPE) && hasBody) { Object bodyValue = body.get(); postRequestEncoder = buildFormDataRequest(clientHttpRequest, bodyValue); nettyRequest = postRequestEncoder.finalizeRequest(); } else if (requestContentType.equals(MediaType.MULTIPART_FORM_DATA_TYPE) && hasBody) { Object bodyValue = body.get(); postRequestEncoder = buildMultipartRequest(clientHttpRequest, bodyValue); nettyRequest = postRequestEncoder.finalizeRequest(); } else { ByteBuf textChunk = Unpooled.copiedBuffer(((CharSequence) o), requestContentType.getCharset().orElse(StandardCharsets.UTF_8)); if (log.isTraceEnabled()) { traceChunk(textChunk); if (encoded != null) { if (log.isTraceEnabled()) { traceChunk(encoded); bodyContent = charSequenceToByteBuf((CharSequence) bodyValue, requestContentType); } else if (mediaTypeCodecRegistry != null) { Optional<MediaTypeCodec> registeredCodec = mediaTypeCodecRegistry.findCodec(requestContentType);
@SuppressWarnings("unchecked") @Override public <I> Flowable<ByteBuffer<?>> dataStream(io.micronaut.http.HttpRequest<I> request) { return Flowable.fromPublisher(resolveRequestURI(request)) .flatMap(buildDataStreamPublisher(request)); }
@Override public <I, O> Flowable<O> jsonStream(io.micronaut.http.HttpRequest<I> request, io.micronaut.core.type.Argument<O> type) { final io.micronaut.http.HttpRequest<Object> parentRequest = ServerRequestContext.currentRequest().orElse(null); return Flowable.fromPublisher(resolveRequestURI(request)) .flatMap(buildJsonStreamPublisher(parentRequest, request, type)); }
@Override public <I> Flowable<io.micronaut.http.HttpResponse<ByteBuffer<?>>> exchangeStream(io.micronaut.http.HttpRequest<I> request) { return Flowable.fromPublisher(resolveRequestURI(request)) .flatMap(buildExchangeStreamPublisher(request)); }
@Override public <I, O, E> Flowable<io.micronaut.http.HttpResponse<O>> exchange(io.micronaut.http.HttpRequest<I> request, Argument<O> bodyType, Argument<E> errorType) { final io.micronaut.http.HttpRequest<Object> parentRequest = ServerRequestContext.currentRequest().orElse(null); Publisher<URI> uriPublisher = resolveRequestURI(request); return Flowable.fromPublisher(uriPublisher) .switchMap(buildExchangePublisher(parentRequest, request, bodyType, errorType)); }
List<HttpClientFilter> httpClientFilters = resolveFilters(parentRequest, request, requestURI); OrderUtil.reverseSort(httpClientFilters); Publisher<io.micronaut.http.HttpResponse<O>> finalResponsePublisher = responsePublisher; httpClientFilters.add((req, chain) -> finalResponsePublisher); ClientFilterChain filterChain = buildChain(requestWrapper, httpClientFilters); if (parentRequest != null) { responsePublisher = ServerRequestContext.with(parentRequest, (Supplier<Publisher<io.micronaut.http.HttpResponse<O>>>) () ->
io.micronaut.http.HttpRequest<I> request, URI requestURI) { SslContext sslContext = buildSslContext(requestURI); ChannelFuture channelFuture = doConnect(request, requestURI, sslContext, true); Disposable disposable = buildDisposableChannel(channelFuture); emitter.setDisposable(disposable); emitter.setCancellable(disposable::dispose); Channel channel = f.channel(); streamRequestThroughChannel(parentRequest, requestURI, requestWrapper, emitter, channel); } else { Throwable cause = f.cause(); applyFilterToResponsePublisher(parentRequest, request, requestURI, requestWrapper, streamResponsePublisher) );
/** * Create a new {@link HttpClient}. Note that this method should only be used outside of the context of a * Micronaut application. Within Micronaut use {@link javax.inject.Inject} to inject a client instead. * * @param url The base URL * @return The client */ static HttpClient create(URL url) { return new DefaultHttpClient(url); } }
NettyRequestWriter requestWriter = buildNettyRequest(clientHttpRequest, requestURI, requestContentType, permitsBody); HttpRequest nettyRequest = requestWriter.getNettyRequest(); prepareHttpHeaders( requestURI, finalRequest, traceRequest(finalRequest, nettyRequest); addFullHttpResponseHandler( finalRequest, channel,