All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.micronaut.http.client.netty.DefaultHttpClientBuilder Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2017-2024 original authors
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package io.micronaut.http.client.netty;

import io.micronaut.core.annotation.AnnotationMetadataResolver;
import io.micronaut.core.annotation.Internal;
import io.micronaut.core.annotation.NonNull;
import io.micronaut.core.annotation.Nullable;
import io.micronaut.core.convert.ConversionService;
import io.micronaut.core.util.ArgumentUtils;
import io.micronaut.http.bind.RequestBinderRegistry;
import io.micronaut.http.body.MessageBodyHandlerRegistry;
import io.micronaut.http.client.HttpClientConfiguration;
import io.micronaut.http.client.HttpVersionSelection;
import io.micronaut.http.client.LoadBalancer;
import io.micronaut.http.client.filter.ClientFilterResolutionContext;
import io.micronaut.http.client.filter.DefaultHttpClientFilterResolver;
import io.micronaut.http.client.netty.ssl.ClientSslBuilder;
import io.micronaut.http.codec.MediaTypeCodecRegistry;
import io.micronaut.http.filter.HttpClientFilter;
import io.micronaut.http.filter.HttpClientFilterResolver;
import io.micronaut.http.filter.HttpFilterResolver;
import io.micronaut.websocket.context.WebSocketBeanRegistry;
import io.netty.channel.Channel;
import io.netty.channel.ChannelFactory;
import io.netty.channel.EventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.resolver.AddressResolverGroup;

import java.net.URI;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.ThreadFactory;

/**
 * While {@link DefaultHttpClient} is internal API, there are a few uses outside micronaut-core
 * that use it directly, in particular micronaut-oracle-cloud. This builder acts as API for those
 * users.
 * 

* If you need to make a method of this builder public, please document the module that uses it. * * @author Jonas Konrad * @since 4.7.0 */ @Internal public final class DefaultHttpClientBuilder { @Nullable LoadBalancer loadBalancer = null; @Nullable HttpVersionSelection explicitHttpVersion = null; HttpClientConfiguration configuration; @Nullable String contextPath = null; @NonNull AnnotationMetadataResolver annotationMetadataResolver = AnnotationMetadataResolver.DEFAULT; HttpClientFilterResolver filterResolver; List clientFilterEntries = null; @Nullable ThreadFactory threadFactory; ClientSslBuilder nettyClientSslBuilder; MediaTypeCodecRegistry codecRegistry; MessageBodyHandlerRegistry handlerRegistry; @NonNull WebSocketBeanRegistry webSocketBeanRegistry = WebSocketBeanRegistry.EMPTY; RequestBinderRegistry requestBinderRegistry; @Nullable EventLoopGroup eventLoopGroup = null; @NonNull ChannelFactory socketChannelFactory = NioSocketChannel::new; @NonNull ChannelFactory udpChannelFactory = NioDatagramChannel::new; NettyClientCustomizer clientCustomizer = CompositeNettyClientCustomizer.EMPTY; @Nullable String informationalServiceId = null; @NonNull ConversionService conversionService = ConversionService.SHARED; @Nullable AddressResolverGroup resolverGroup = null; @Nullable ExecutorService blockingExecutor = null; DefaultHttpClientBuilder() { } @NonNull DefaultHttpClientBuilder loadBalancer(@Nullable LoadBalancer loadBalancer) { this.loadBalancer = loadBalancer; return this; } /** * Set the optional URI for this client to use as the root. * * @param uri The URI * @return This builder */ @NonNull public DefaultHttpClientBuilder uri(@Nullable URI uri) { return loadBalancer(uri == null ? null : LoadBalancer.fixed(uri)); } @NonNull DefaultHttpClientBuilder explicitHttpVersion(@Nullable HttpVersionSelection explicitHttpVersion) { this.explicitHttpVersion = explicitHttpVersion; return this; } /** * Set the configuration. * * @param configuration The client configuration * @return This builder */ @NonNull public DefaultHttpClientBuilder configuration(@NonNull HttpClientConfiguration configuration) { ArgumentUtils.requireNonNull("configuration", configuration); this.configuration = configuration; return this; } @NonNull DefaultHttpClientBuilder contextPath(@Nullable String contextPath) { this.contextPath = contextPath; return this; } @NonNull DefaultHttpClientBuilder filterResolver(@NonNull HttpClientFilterResolver filterResolver) { ArgumentUtils.requireNonNull("filterResolver", filterResolver); this.filterResolver = filterResolver; return this; } @NonNull DefaultHttpClientBuilder annotationMetadataResolver(@Nullable AnnotationMetadataResolver annotationMetadataResolver) { if (annotationMetadataResolver != null) { this.annotationMetadataResolver = annotationMetadataResolver; } return this; } @NonNull DefaultHttpClientBuilder filters(HttpClientFilter... filters) { return filterResolver(new DefaultHttpClientFilterResolver(null, annotationMetadataResolver, Arrays.asList(filters))); } @NonNull DefaultHttpClientBuilder clientFilterEntries(@Nullable List clientFilterEntries) { this.clientFilterEntries = clientFilterEntries; return this; } @NonNull DefaultHttpClientBuilder threadFactory(@Nullable ThreadFactory threadFactory) { this.threadFactory = threadFactory; return this; } /** * The netty SSL context builder. Used by the micronaut-oracle-cloud OKE workload identity * client. * * @param nettyClientSslBuilder The SSL context builder * @return This builder */ @NonNull public DefaultHttpClientBuilder nettyClientSslBuilder(@NonNull ClientSslBuilder nettyClientSslBuilder) { ArgumentUtils.requireNonNull("nettyClientSslBuilder", nettyClientSslBuilder); this.nettyClientSslBuilder = nettyClientSslBuilder; return this; } /** * Set the codec registry. This has mostly been replaced by body handlers by now. * * @param codecRegistry The codec registry * @return This builder * @deprecated Use body handlers instead */ @NonNull @Deprecated DefaultHttpClientBuilder codecRegistry(@NonNull MediaTypeCodecRegistry codecRegistry) { ArgumentUtils.requireNonNull("codecRegistry", codecRegistry); this.codecRegistry = codecRegistry; return this; } @NonNull DefaultHttpClientBuilder handlerRegistry(@NonNull MessageBodyHandlerRegistry handlerRegistry) { ArgumentUtils.requireNonNull("handlerRegistry", handlerRegistry); this.handlerRegistry = handlerRegistry; return this; } @NonNull DefaultHttpClientBuilder webSocketBeanRegistry(@NonNull WebSocketBeanRegistry webSocketBeanRegistry) { ArgumentUtils.requireNonNull("webSocketBeanRegistry", webSocketBeanRegistry); this.webSocketBeanRegistry = webSocketBeanRegistry; return this; } @NonNull DefaultHttpClientBuilder requestBinderRegistry(@NonNull RequestBinderRegistry requestBinderRegistry) { ArgumentUtils.requireNonNull("requestBinderRegistry", requestBinderRegistry); this.requestBinderRegistry = requestBinderRegistry; return this; } @NonNull DefaultHttpClientBuilder eventLoopGroup(@Nullable EventLoopGroup eventLoopGroup) { this.eventLoopGroup = eventLoopGroup; return this; } @NonNull DefaultHttpClientBuilder socketChannelFactory(@NonNull ChannelFactory socketChannelFactory) { ArgumentUtils.requireNonNull("socketChannelFactory", socketChannelFactory); this.socketChannelFactory = socketChannelFactory; return this; } @NonNull DefaultHttpClientBuilder udpChannelFactory(@NonNull ChannelFactory udpChannelFactory) { ArgumentUtils.requireNonNull("udpChannelFactory", udpChannelFactory); this.udpChannelFactory = udpChannelFactory; return this; } @NonNull DefaultHttpClientBuilder clientCustomizer(@NonNull NettyClientCustomizer clientCustomizer) { ArgumentUtils.requireNonNull("clientCustomizer", clientCustomizer); this.clientCustomizer = clientCustomizer; return this; } @NonNull DefaultHttpClientBuilder informationalServiceId(@Nullable String informationalServiceId) { this.informationalServiceId = informationalServiceId; return this; } @NonNull DefaultHttpClientBuilder conversionService(@NonNull ConversionService conversionService) { ArgumentUtils.requireNonNull("conversionService", conversionService); this.conversionService = conversionService; return this; } @NonNull DefaultHttpClientBuilder resolverGroup(@Nullable AddressResolverGroup resolverGroup) { this.resolverGroup = resolverGroup; return this; } @NonNull DefaultHttpClientBuilder blockingExecutor(@Nullable ExecutorService blockingExecutor) { this.blockingExecutor = blockingExecutor; return this; } /** * Build the final HTTP client. This method may only be called once. * * @return The client */ @NonNull public DefaultHttpClient build() { return new DefaultHttpClient(this); } }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy