diff --git a/core/src/main/java/com/linecorp/armeria/client/ClientBuilderParams.java b/core/src/main/java/com/linecorp/armeria/client/ClientBuilderParams.java index d57f8acbe89..097b3616b69 100644 --- a/core/src/main/java/com/linecorp/armeria/client/ClientBuilderParams.java +++ b/core/src/main/java/com/linecorp/armeria/client/ClientBuilderParams.java @@ -23,6 +23,7 @@ import com.linecorp.armeria.client.endpoint.EndpointGroup; import com.linecorp.armeria.common.Scheme; import com.linecorp.armeria.common.annotation.Nullable; +import com.linecorp.armeria.common.annotation.UnstableApi; /** * Provides the construction parameters of a client. @@ -36,7 +37,9 @@ static ClientBuilderParams of(URI uri, Class type, ClientOptions options) { requireNonNull(uri, "uri"); requireNonNull(type, "type"); requireNonNull(options, "options"); - return new DefaultClientBuilderParams(uri, type, options); + return new ClientBuilderParamsBuilder(uri).options(options) + .clientType(type) + .build(); } /** @@ -48,7 +51,10 @@ static ClientBuilderParams of(Scheme scheme, EndpointGroup endpointGroup, requireNonNull(endpointGroup, "endpointGroup"); requireNonNull(type, "type"); requireNonNull(options, "options"); - return new DefaultClientBuilderParams(scheme, endpointGroup, absolutePathRef, type, options); + return new ClientBuilderParamsBuilder(scheme, endpointGroup, absolutePathRef) + .clientType(type) + .options(options) + .build(); } /** @@ -85,6 +91,7 @@ static ClientBuilderParams of(Scheme scheme, EndpointGroup endpointGroup, * Returns a {@link ClientBuilderParamsBuilder} which allows creation of a new * {@link ClientBuilderParams} based on the current properties. */ + @UnstableApi default ClientBuilderParamsBuilder paramsBuilder() { return new ClientBuilderParamsBuilder(this); } diff --git a/core/src/main/java/com/linecorp/armeria/client/ClientBuilderParamsBuilder.java b/core/src/main/java/com/linecorp/armeria/client/ClientBuilderParamsBuilder.java index 665f5db31f1..ac52d061dea 100644 --- a/core/src/main/java/com/linecorp/armeria/client/ClientBuilderParamsBuilder.java +++ b/core/src/main/java/com/linecorp/armeria/client/ClientBuilderParamsBuilder.java @@ -16,41 +16,108 @@ package com.linecorp.armeria.client; -import static com.google.common.base.MoreObjects.firstNonNull; import static com.linecorp.armeria.internal.client.ClientBuilderParamsUtil.nullOrEmptyToSlash; +import static java.util.Objects.requireNonNull; import java.net.URI; import java.net.URISyntaxException; +import com.linecorp.armeria.client.endpoint.EndpointGroup; import com.linecorp.armeria.common.Scheme; import com.linecorp.armeria.common.SerializationFormat; +import com.linecorp.armeria.common.SessionProtocol; import com.linecorp.armeria.common.annotation.Nullable; +import com.linecorp.armeria.common.annotation.UnstableApi; +import com.linecorp.armeria.internal.client.ClientBuilderParamsUtil; +import com.linecorp.armeria.internal.client.endpoint.FailingEndpointGroup; +import com.linecorp.armeria.internal.common.util.TemporaryThreadLocals; /** * Allows creation of a new {@link ClientBuilderParams} based on a previous {@link ClientBuilderParams}. */ +@UnstableApi public final class ClientBuilderParamsBuilder { - private final ClientBuilderParams params; + private final URI uri; + private final EndpointGroup endpointGroup; + private final SessionProtocol sessionProtocol; - @Nullable private SerializationFormat serializationFormat; - @Nullable private String absolutePathRef; + @Nullable private Class type; @Nullable private ClientOptions options; ClientBuilderParamsBuilder(ClientBuilderParams params) { - this.params = params; + uri = params.uri(); + endpointGroup = params.endpointGroup(); + sessionProtocol = params.scheme().sessionProtocol(); + + serializationFormat = params.scheme().serializationFormat(); + absolutePathRef = params.absolutePathRef(); + type = params.clientType(); + options = params.options(); + } + + ClientBuilderParamsBuilder(URI uri) { + this.uri = uri; + final Scheme scheme = Scheme.parse(uri.getScheme()); + final EndpointGroup endpointGroup; + if (ClientBuilderParamsUtil.isInternalUri(uri)) { + endpointGroup = FailingEndpointGroup.of(); + } else { + endpointGroup = Endpoint.parse(uri.getRawAuthority()); + } + final String absolutePathRef; + try (TemporaryThreadLocals tempThreadLocals = TemporaryThreadLocals.acquire()) { + final StringBuilder buf = tempThreadLocals.stringBuilder(); + buf.append(nullOrEmptyToSlash(uri.getRawPath())); + if (uri.getRawQuery() != null) { + buf.append('?').append(uri.getRawQuery()); + } + if (uri.getRawFragment() != null) { + buf.append('#').append(uri.getRawFragment()); + } + absolutePathRef = buf.toString(); + } + this.endpointGroup = endpointGroup; + serializationFormat = scheme.serializationFormat(); + sessionProtocol = scheme.sessionProtocol(); + this.absolutePathRef = absolutePathRef; + } + + ClientBuilderParamsBuilder(Scheme scheme, EndpointGroup endpointGroup, @Nullable String absolutePathRef) { + this.endpointGroup = endpointGroup; + final String schemeStr; + if (scheme.serializationFormat() == SerializationFormat.NONE) { + schemeStr = scheme.sessionProtocol().uriText(); + } else { + schemeStr = scheme.uriText(); + } + final String normalizedAbsolutePathRef = nullOrEmptyToSlash(absolutePathRef); + final URI uri; + if (endpointGroup instanceof Endpoint) { + uri = URI.create(schemeStr + "://" + ((Endpoint) endpointGroup).authority() + + normalizedAbsolutePathRef); + } else { + // Create a valid URI which will never succeed. + uri = URI.create(schemeStr + "://" + ClientBuilderParamsUtil.ENDPOINTGROUP_PREFIX + + Integer.toHexString(System.identityHashCode(endpointGroup)) + + ":1" + normalizedAbsolutePathRef); + } + this.uri = uri; + serializationFormat = scheme.serializationFormat(); + sessionProtocol = scheme.sessionProtocol(); + this.absolutePathRef = normalizedAbsolutePathRef; } /** * Sets the {@link SerializationFormat} for this {@link ClientBuilderParams}. */ public ClientBuilderParamsBuilder serializationFormat(SerializationFormat serializationFormat) { - this.serializationFormat = serializationFormat; + this.serializationFormat = requireNonNull(serializationFormat, "serializationFormat"); return this; } @@ -58,7 +125,7 @@ public ClientBuilderParamsBuilder serializationFormat(SerializationFormat serial * Sets the {@param absolutePathRef} for this {@link ClientBuilderParams}. */ public ClientBuilderParamsBuilder absolutePathRef(String absolutePathRef) { - this.absolutePathRef = absolutePathRef; + this.absolutePathRef = requireNonNull(absolutePathRef, "absolutePathRef"); return this; } @@ -66,7 +133,7 @@ public ClientBuilderParamsBuilder absolutePathRef(String absolutePathRef) { * Sets the {@param type} for this {@link ClientBuilderParams}. */ public ClientBuilderParamsBuilder clientType(Class type) { - this.type = type; + this.type = requireNonNull(type, "type"); return this; } @@ -74,7 +141,7 @@ public ClientBuilderParamsBuilder clientType(Class type) { * Sets the {@link ClientOptions} for this {@link ClientBuilderParams}. */ public ClientBuilderParamsBuilder options(ClientOptions options) { - this.options = options; + this.options = requireNonNull(options, "options"); return this; } @@ -82,12 +149,13 @@ public ClientBuilderParamsBuilder options(ClientOptions options) { * Builds a new {@link ClientBuilderParams} based on the configured properties. */ public ClientBuilderParams build() { - final Scheme scheme; - if (serializationFormat != null) { - scheme = Scheme.of(serializationFormat, params.scheme().sessionProtocol()); - } else { - scheme = params.scheme(); - } + final ClientOptions options = requireNonNull(this.options, "options"); + final Class type = requireNonNull(this.type, "type"); + + final SerializationFormat serializationFormat = this.serializationFormat; + final String absolutePathRef = this.absolutePathRef; + final ClientFactory factory = options.factory(); + final Scheme scheme = factory.validateScheme(Scheme.of(serializationFormat, sessionProtocol)); final String schemeStr; if (scheme.serializationFormat() == SerializationFormat.NONE) { schemeStr = scheme.sessionProtocol().uriText(); @@ -95,23 +163,15 @@ public ClientBuilderParams build() { schemeStr = scheme.uriText(); } - final String path; - if (absolutePathRef != null) { - path = nullOrEmptyToSlash(absolutePathRef); - } else { - path = params.absolutePathRef(); - } + final String path = nullOrEmptyToSlash(absolutePathRef); - final URI prevUri = params.uri(); final URI uri; try { - uri = new URI(schemeStr, prevUri.getRawAuthority(), path, - prevUri.getRawQuery(), prevUri.getRawFragment()); + uri = new URI(schemeStr + "://" + this.uri.getRawAuthority() + path); } catch (URISyntaxException e) { throw new IllegalArgumentException(e); } - return new DefaultClientBuilderParams(scheme, params.endpointGroup(), uri.getRawPath(), - uri, firstNonNull(type, params.clientType()), - firstNonNull(options, params.options())); + return new DefaultClientBuilderParams(scheme, endpointGroup, path, + factory.validateUri(uri), type, options); } } diff --git a/core/src/main/java/com/linecorp/armeria/client/Clients.java b/core/src/main/java/com/linecorp/armeria/client/Clients.java index 66fa625e6e1..6777b59beb4 100644 --- a/core/src/main/java/com/linecorp/armeria/client/Clients.java +++ b/core/src/main/java/com/linecorp/armeria/client/Clients.java @@ -32,6 +32,7 @@ import com.linecorp.armeria.common.SerializationFormat; import com.linecorp.armeria.common.SessionProtocol; import com.linecorp.armeria.common.annotation.Nullable; +import com.linecorp.armeria.common.annotation.UnstableApi; import com.linecorp.armeria.common.util.SafeCloseable; import com.linecorp.armeria.common.util.Unwrappable; import com.linecorp.armeria.internal.client.ClientBuilderParamsUtil; @@ -179,12 +180,9 @@ public static T newClient(SessionProtocol protocol, EndpointGroup endpointGr * * @param preprocessors the {@link ClientPreprocessors} * @param clientType the type of the new client - * - * @throws IllegalArgumentException if the specified {@code clientType} is unsupported for - * the specified {@link SerializationFormat} or - * {@link ClientPreprocessors} */ - public static T newClient(ClientPreprocessors preprocessors, Class clientType) { + @UnstableApi + public static T newClient(ClientPreprocessors preprocessors, Class clientType) { return builder(preprocessors).build(clientType); } @@ -200,6 +198,7 @@ public static T newClient(ClientPreprocessors preprocessors, Class clien * the specified {@link SerializationFormat} or * {@link ClientPreprocessors} */ + @UnstableApi public static T newClient(SerializationFormat serializationFormat, ClientPreprocessors preprocessors, Class clientType) { return builder(serializationFormat, preprocessors).build(clientType); @@ -218,6 +217,7 @@ public static T newClient(SerializationFormat serializationFormat, ClientPre * the specified {@link SerializationFormat} or * {@link ClientPreprocessors} */ + @UnstableApi public static T newClient(SerializationFormat serializationFormat, ClientPreprocessors preprocessors, Class clientType, String path) { return builder(serializationFormat, preprocessors, path).build(clientType); @@ -307,6 +307,7 @@ public static ClientBuilder builder(Scheme scheme, EndpointGroup endpointGroup, * Returns a new {@link ClientBuilder} that builds the client that is configured with the specified * {@link ClientPreprocessors}. */ + @UnstableApi public static ClientBuilder builder(ClientPreprocessors preprocessors) { requireNonNull(preprocessors, "preprocessors"); return new ClientBuilder(SerializationFormat.NONE, preprocessors, null); @@ -316,6 +317,7 @@ public static ClientBuilder builder(ClientPreprocessors preprocessors) { * Returns a new {@link ClientBuilder} that builds the client that is configured with the specified * {@link ClientPreprocessors}. */ + @UnstableApi public static ClientBuilder builder(SerializationFormat serializationFormat, ClientPreprocessors preprocessors) { requireNonNull(serializationFormat, "serializationFormat"); @@ -327,6 +329,7 @@ public static ClientBuilder builder(SerializationFormat serializationFormat, * Returns a new {@link ClientBuilder} that builds the client that is configured with the specified * {@link SerializationFormat}, {@link ClientPreprocessors} and {@param path}. */ + @UnstableApi public static ClientBuilder builder(SerializationFormat serializationFormat, ClientPreprocessors preprocessors, String path) { requireNonNull(serializationFormat, "serializationFormat"); diff --git a/core/src/main/java/com/linecorp/armeria/client/DefaultClientBuilderParams.java b/core/src/main/java/com/linecorp/armeria/client/DefaultClientBuilderParams.java index f32d6cf5d29..942bdd9ce15 100644 --- a/core/src/main/java/com/linecorp/armeria/client/DefaultClientBuilderParams.java +++ b/core/src/main/java/com/linecorp/armeria/client/DefaultClientBuilderParams.java @@ -15,20 +15,12 @@ */ package com.linecorp.armeria.client; -import static com.linecorp.armeria.internal.client.ClientBuilderParamsUtil.nullOrEmptyToSlash; -import static java.util.Objects.requireNonNull; - import java.net.URI; import com.google.common.base.MoreObjects; import com.linecorp.armeria.client.endpoint.EndpointGroup; import com.linecorp.armeria.common.Scheme; -import com.linecorp.armeria.common.SerializationFormat; -import com.linecorp.armeria.common.annotation.Nullable; -import com.linecorp.armeria.internal.client.ClientBuilderParamsUtil; -import com.linecorp.armeria.internal.client.endpoint.FailingEndpointGroup; -import com.linecorp.armeria.internal.common.util.TemporaryThreadLocals; /** * Default {@link ClientBuilderParams} implementation. @@ -42,67 +34,6 @@ final class DefaultClientBuilderParams implements ClientBuilderParams { private final Class type; private final ClientOptions options; - /** - * Creates a new instance. - */ - DefaultClientBuilderParams(URI uri, Class type, ClientOptions options) { - final ClientFactory factory = requireNonNull(options, "options").factory(); - this.uri = factory.validateUri(uri); - this.type = requireNonNull(type, "type"); - this.options = options; - - scheme = factory.validateScheme(Scheme.parse(uri.getScheme())); - if (ClientBuilderParamsUtil.isInternalUri(uri)) { - endpointGroup = FailingEndpointGroup.of(); - } else { - endpointGroup = Endpoint.parse(uri.getRawAuthority()); - } - - try (TemporaryThreadLocals tempThreadLocals = TemporaryThreadLocals.acquire()) { - final StringBuilder buf = tempThreadLocals.stringBuilder(); - buf.append(nullOrEmptyToSlash(uri.getRawPath())); - if (uri.getRawQuery() != null) { - buf.append('?').append(uri.getRawQuery()); - } - if (uri.getRawFragment() != null) { - buf.append('#').append(uri.getRawFragment()); - } - absolutePathRef = buf.toString(); - } - } - - DefaultClientBuilderParams(Scheme scheme, EndpointGroup endpointGroup, - @Nullable String absolutePathRef, - Class type, ClientOptions options) { - final ClientFactory factory = requireNonNull(options, "options").factory(); - this.scheme = factory.validateScheme(scheme); - this.endpointGroup = requireNonNull(endpointGroup, "endpointGroup"); - this.type = requireNonNull(type, "type"); - this.options = options; - - final String schemeStr; - if (scheme.serializationFormat() == SerializationFormat.NONE) { - schemeStr = scheme.sessionProtocol().uriText(); - } else { - schemeStr = scheme.uriText(); - } - - final String normalizedAbsolutePathRef = nullOrEmptyToSlash(absolutePathRef); - final URI uri; - if (endpointGroup instanceof Endpoint) { - uri = URI.create(schemeStr + "://" + ((Endpoint) endpointGroup).authority() + - normalizedAbsolutePathRef); - } else { - // Create a valid URI which will never succeed. - uri = URI.create(schemeStr + "://" + ClientBuilderParamsUtil.ENDPOINTGROUP_PREFIX + - Integer.toHexString(System.identityHashCode(endpointGroup)) + - ":1" + normalizedAbsolutePathRef); - } - - this.uri = factory.validateUri(uri); - this.absolutePathRef = normalizedAbsolutePathRef; - } - DefaultClientBuilderParams(Scheme scheme, EndpointGroup endpointGroup, String absolutePathRef, URI uri, Class type, ClientOptions options) { this.scheme = options.factory().validateScheme(scheme); diff --git a/core/src/main/java/com/linecorp/armeria/client/DefaultWebClient.java b/core/src/main/java/com/linecorp/armeria/client/DefaultWebClient.java index d99bba4f791..e082cc7fa30 100644 --- a/core/src/main/java/com/linecorp/armeria/client/DefaultWebClient.java +++ b/core/src/main/java/com/linecorp/armeria/client/DefaultWebClient.java @@ -84,7 +84,7 @@ public HttpResponse execute(HttpRequest req, RequestOptions requestOptions) { assert scheme != null; assert authority != null; } else { - // the scheme and authority may be null if the client is preprocessor-based + // the scheme and authority may be null if the client has preprocessors scheme = req.scheme(); authority = req.authority(); } diff --git a/core/src/main/java/com/linecorp/armeria/client/RestClient.java b/core/src/main/java/com/linecorp/armeria/client/RestClient.java index 9614574a789..79816059ca6 100644 --- a/core/src/main/java/com/linecorp/armeria/client/RestClient.java +++ b/core/src/main/java/com/linecorp/armeria/client/RestClient.java @@ -150,6 +150,7 @@ static RestClient of(SessionProtocol protocol, EndpointGroup endpointGroup, Stri * * @param httpPreprocessor the preprocessor */ + @UnstableApi static RestClient of(HttpPreprocessor httpPreprocessor) { return builder(httpPreprocessor).build(); } @@ -161,6 +162,7 @@ static RestClient of(HttpPreprocessor httpPreprocessor) { * @param httpPreprocessor the preprocessor * @param path the path to the endpoint */ + @UnstableApi static RestClient of(HttpPreprocessor httpPreprocessor, String path) { return builder(httpPreprocessor, path).build(); } @@ -253,6 +255,7 @@ static RestClientBuilder builder(SessionProtocol protocol, EndpointGroup endpoin /** * Returns a new {@link RestClientBuilder} created with the specified {@link HttpPreprocessor}. */ + @UnstableApi static RestClientBuilder builder(HttpPreprocessor httpPreprocessor) { requireNonNull(httpPreprocessor, "httpPreprocessor"); return new RestClientBuilder(httpPreprocessor, null); @@ -262,6 +265,7 @@ static RestClientBuilder builder(HttpPreprocessor httpPreprocessor) { * Returns a new {@link RestClientBuilder} created with the specified {@link HttpPreprocessor} * and path. */ + @UnstableApi static RestClientBuilder builder(HttpPreprocessor httpPreprocessor, String path) { requireNonNull(httpPreprocessor, "httpPreprocessor"); requireNonNull(path, "path"); diff --git a/core/src/main/java/com/linecorp/armeria/client/WebClient.java b/core/src/main/java/com/linecorp/armeria/client/WebClient.java index 785c9bfcf82..4f7f26c04d2 100644 --- a/core/src/main/java/com/linecorp/armeria/client/WebClient.java +++ b/core/src/main/java/com/linecorp/armeria/client/WebClient.java @@ -151,6 +151,7 @@ static WebClient of(SessionProtocol protocol, EndpointGroup endpointGroup, Strin * * @param httpPreprocessor the preprocessor */ + @UnstableApi static WebClient of(HttpPreprocessor httpPreprocessor) { return builder(httpPreprocessor).build(); } @@ -162,6 +163,7 @@ static WebClient of(HttpPreprocessor httpPreprocessor) { * @param httpPreprocessor the preprocessor * @param path the path to the endpoint */ + @UnstableApi static WebClient of(HttpPreprocessor httpPreprocessor, String path) { return builder(httpPreprocessor, path).build(); } @@ -254,6 +256,7 @@ static WebClientBuilder builder(SessionProtocol protocol, EndpointGroup endpoint /** * Returns a new {@link WebClientBuilder} created with the specified {@link HttpPreprocessor}. */ + @UnstableApi static WebClientBuilder builder(HttpPreprocessor httpPreprocessor) { return new WebClientBuilder(httpPreprocessor, null); } @@ -262,6 +265,7 @@ static WebClientBuilder builder(HttpPreprocessor httpPreprocessor) { * Returns a new {@link WebClientBuilder} created with the specified {@link HttpPreprocessor} * and path. */ + @UnstableApi static WebClientBuilder builder(HttpPreprocessor httpPreprocessor, String path) { return new WebClientBuilder(requireNonNull(httpPreprocessor, "httpPreprocessor"), requireNonNull(path, "path")); diff --git a/core/src/main/java/com/linecorp/armeria/client/endpoint/EndpointGroup.java b/core/src/main/java/com/linecorp/armeria/client/endpoint/EndpointGroup.java index 1e5a54dc087..eba3d3050d4 100644 --- a/core/src/main/java/com/linecorp/armeria/client/endpoint/EndpointGroup.java +++ b/core/src/main/java/com/linecorp/armeria/client/endpoint/EndpointGroup.java @@ -18,6 +18,7 @@ import static java.util.Objects.requireNonNull; +import java.net.URI; import java.util.ArrayList; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -33,6 +34,7 @@ import com.linecorp.armeria.common.annotation.UnstableApi; import com.linecorp.armeria.common.util.AsyncCloseable; import com.linecorp.armeria.common.util.Listenable; +import com.linecorp.armeria.internal.client.endpoint.FailingEndpointGroup; import com.linecorp.armeria.internal.client.endpoint.StaticEndpointGroup; /** @@ -189,4 +191,23 @@ default void removeListener(Consumer listener) {} default EndpointGroup orElse(EndpointGroup nextEndpointGroup) { return new OrElseEndpointGroup(this, nextEndpointGroup); } + + /** + * Returns {@code true} if the specified {@code endpointGroup} is an undefined {@link EndpointGroup}, + * which signifies that a request was created without a {@link URI} or {@link EndpointGroup}. + * For example, + *
{@code
+     * HttpPreprocessor preprocessor = (delegate, ctx, req) -> {
+     *     if (EndpointGroup.isUndefined(ctx.endpointGroup())) {
+     *         ctx.setEndpointGroup(Endpoint.of("fallback-endpoint"));
+     *     }
+     *     return delegate.execute(ctx, req);
+     * };
+     * WebClient client = WebClient.builder(preprocessor)
+     *                             .build();
+     * }
+ */ + static boolean isUndefined(EndpointGroup endpointGroup) { + return FailingEndpointGroup.of() == endpointGroup; + } } diff --git a/eureka/src/main/java/com/linecorp/armeria/client/eureka/EurekaEndpointGroup.java b/eureka/src/main/java/com/linecorp/armeria/client/eureka/EurekaEndpointGroup.java index 8b0597fe4d9..a5555c2d985 100644 --- a/eureka/src/main/java/com/linecorp/armeria/client/eureka/EurekaEndpointGroup.java +++ b/eureka/src/main/java/com/linecorp/armeria/client/eureka/EurekaEndpointGroup.java @@ -59,6 +59,7 @@ import com.linecorp.armeria.common.RequestHeadersBuilder; import com.linecorp.armeria.common.SessionProtocol; import com.linecorp.armeria.common.annotation.Nullable; +import com.linecorp.armeria.common.annotation.UnstableApi; import com.linecorp.armeria.internal.common.eureka.Application; import com.linecorp.armeria.internal.common.eureka.Applications; import com.linecorp.armeria.internal.common.eureka.InstanceInfo; @@ -129,6 +130,7 @@ public static EurekaEndpointGroup of( * Returns a new {@link EurekaEndpointGroup} that retrieves the {@link Endpoint} list from the specified * {@link HttpPreprocessor}. */ + @UnstableApi public static EurekaEndpointGroup of(HttpPreprocessor preprocessor) { return new EurekaEndpointGroupBuilder(preprocessor, null).build(); } @@ -137,6 +139,7 @@ public static EurekaEndpointGroup of(HttpPreprocessor preprocessor) { * Returns a new {@link EurekaEndpointGroup} that retrieves the {@link Endpoint} list from the specified * {@link HttpPreprocessor} under the specified {@code path}. */ + @UnstableApi public static EurekaEndpointGroup of(HttpPreprocessor preprocessor, String path) { return new EurekaEndpointGroupBuilder(preprocessor, requireNonNull(path, "path")).build(); } @@ -176,6 +179,7 @@ public static EurekaEndpointGroupBuilder builder( /** * Returns a new {@link EurekaEndpointGroupBuilder} created with the specified {@link HttpPreprocessor}. */ + @UnstableApi public static EurekaEndpointGroupBuilder builder(HttpPreprocessor preprocessor) { return new EurekaEndpointGroupBuilder(preprocessor, null); } @@ -184,6 +188,7 @@ public static EurekaEndpointGroupBuilder builder(HttpPreprocessor preprocessor) * Returns a new {@link EurekaEndpointGroupBuilder} created with the specified {@link HttpPreprocessor} * and path. */ + @UnstableApi public static EurekaEndpointGroupBuilder builder(HttpPreprocessor preprocessor, String path) { return new EurekaEndpointGroupBuilder(preprocessor, requireNonNull(path, "path")); } diff --git a/eureka/src/main/java/com/linecorp/armeria/server/eureka/EurekaUpdatingListener.java b/eureka/src/main/java/com/linecorp/armeria/server/eureka/EurekaUpdatingListener.java index 12d0436fd6e..e3a2eda2f96 100644 --- a/eureka/src/main/java/com/linecorp/armeria/server/eureka/EurekaUpdatingListener.java +++ b/eureka/src/main/java/com/linecorp/armeria/server/eureka/EurekaUpdatingListener.java @@ -37,6 +37,7 @@ import com.linecorp.armeria.common.ResponseHeaders; import com.linecorp.armeria.common.SessionProtocol; import com.linecorp.armeria.common.annotation.Nullable; +import com.linecorp.armeria.common.annotation.UnstableApi; import com.linecorp.armeria.common.util.SystemInfo; import com.linecorp.armeria.internal.common.eureka.EurekaWebClient; import com.linecorp.armeria.internal.common.eureka.InstanceInfo; @@ -104,6 +105,7 @@ public static EurekaUpdatingListener of( * Returns a new {@link EurekaUpdatingListener} which registers the current {@link Server} using * the specified {@link HttpPreprocessor}. */ + @UnstableApi public static EurekaUpdatingListener of(HttpPreprocessor preprocessor) { return new EurekaUpdatingListenerBuilder(preprocessor, null).build(); } @@ -112,6 +114,7 @@ public static EurekaUpdatingListener of(HttpPreprocessor preprocessor) { * Returns a new {@link EurekaUpdatingListener} which registers the current {@link Server} using * the specified {@link HttpPreprocessor} under the specified {@code path}. */ + @UnstableApi public static EurekaUpdatingListener of(HttpPreprocessor preprocessor, String path) { return new EurekaUpdatingListenerBuilder(preprocessor, requireNonNull(path, "path")) .build(); @@ -152,6 +155,7 @@ public static EurekaUpdatingListenerBuilder builder( /** * Returns a new {@link EurekaUpdatingListenerBuilder} created with the specified {@link HttpPreprocessor}. */ + @UnstableApi public static EurekaUpdatingListenerBuilder builder(HttpPreprocessor preprocessor) { return new EurekaUpdatingListenerBuilder(preprocessor, null); } @@ -160,6 +164,7 @@ public static EurekaUpdatingListenerBuilder builder(HttpPreprocessor preprocesso * Returns a new {@link EurekaUpdatingListenerBuilder} created with the specified {@link HttpPreprocessor} * and path. */ + @UnstableApi public static EurekaUpdatingListenerBuilder builder(HttpPreprocessor preprocessor, String path) { return new EurekaUpdatingListenerBuilder(preprocessor, requireNonNull(path, "path")); } diff --git a/grpc/src/main/java/com/linecorp/armeria/client/grpc/GrpcClients.java b/grpc/src/main/java/com/linecorp/armeria/client/grpc/GrpcClients.java index 1a707e6504d..f66a17dd11d 100644 --- a/grpc/src/main/java/com/linecorp/armeria/client/grpc/GrpcClients.java +++ b/grpc/src/main/java/com/linecorp/armeria/client/grpc/GrpcClients.java @@ -130,6 +130,7 @@ public static T newClient(SessionProtocol protocol, EndpointGroup endpointGr * * @throws IllegalArgumentException if the {@code clientType} is an unsupported gRPC client stub. */ + @UnstableApi public static T newClient(HttpPreprocessor httpPreprocessor, Class clientType) { return newClient(SerializationFormat.NONE, httpPreprocessor, clientType); } @@ -144,6 +145,7 @@ public static T newClient(HttpPreprocessor httpPreprocessor, Class client * * @throws IllegalArgumentException if the {@code clientType} is an unsupported gRPC client stub. */ + @UnstableApi public static T newClient(SerializationFormat serializationFormat, HttpPreprocessor httpPreprocessor, Class clientType) { return builder(serializationFormat, httpPreprocessor).build(clientType); @@ -219,6 +221,7 @@ public static GrpcClientBuilder builder(Scheme scheme, EndpointGroup endpointGro * *

Note that {@link GrpcSerializationFormats#PROTO} will be used by default. */ + @UnstableApi public static GrpcClientBuilder builder(HttpPreprocessor httpPreprocessor) { requireNonNull(httpPreprocessor, "httpPreprocessor"); return builder(SerializationFormat.NONE, httpPreprocessor); @@ -231,6 +234,7 @@ public static GrpcClientBuilder builder(HttpPreprocessor httpPreprocessor) { *

Note that if {@link SerializationFormat#NONE} is specified, * {@link GrpcSerializationFormats#PROTO} will be used by default. */ + @UnstableApi public static GrpcClientBuilder builder(SerializationFormat serializationFormat, HttpPreprocessor httpPreprocessor) { requireNonNull(serializationFormat, "serializationFormat"); diff --git a/retrofit2/src/main/java/com/linecorp/armeria/client/retrofit2/ArmeriaRetrofit.java b/retrofit2/src/main/java/com/linecorp/armeria/client/retrofit2/ArmeriaRetrofit.java index c8aeee2b016..a3964d1ba71 100644 --- a/retrofit2/src/main/java/com/linecorp/armeria/client/retrofit2/ArmeriaRetrofit.java +++ b/retrofit2/src/main/java/com/linecorp/armeria/client/retrofit2/ArmeriaRetrofit.java @@ -26,6 +26,7 @@ import com.linecorp.armeria.client.WebClient; import com.linecorp.armeria.client.endpoint.EndpointGroup; import com.linecorp.armeria.common.SessionProtocol; +import com.linecorp.armeria.common.annotation.UnstableApi; import retrofit2.Retrofit; @@ -107,6 +108,7 @@ public static Retrofit of(SessionProtocol protocol, EndpointGroup endpointGroup, /** * Returns a new {@link Retrofit} which is configured with specified {@link HttpPreprocessor}. */ + @UnstableApi public static Retrofit of(HttpPreprocessor preprocessor) { return builder(preprocessor).build(); } @@ -115,6 +117,7 @@ public static Retrofit of(HttpPreprocessor preprocessor) { * Returns a new {@link Retrofit} which is configured with specified {@link HttpPreprocessor} * and {@code path}. */ + @UnstableApi public static Retrofit of(HttpPreprocessor preprocessor, String path) { return builder(preprocessor, path).build(); } @@ -209,6 +212,7 @@ public static ArmeriaRetrofitBuilder builder(SessionProtocol protocol, EndpointG * Returns a new {@link ArmeriaRetrofitBuilder} which is configured with specified * {@link HttpPreprocessor}. */ + @UnstableApi public static ArmeriaRetrofitBuilder builder(HttpPreprocessor httpPreprocessor) { return builder(WebClient.of(httpPreprocessor)); } @@ -217,6 +221,7 @@ public static ArmeriaRetrofitBuilder builder(HttpPreprocessor httpPreprocessor) * Returns a new {@link ArmeriaRetrofitBuilder} which is configured with specified {@link HttpPreprocessor} * and {@code path}. */ + @UnstableApi public static ArmeriaRetrofitBuilder builder(HttpPreprocessor httpPreprocessor, String path) { return builder(WebClient.of(httpPreprocessor, path)); } diff --git a/thrift/thrift0.13/src/main/java/com/linecorp/armeria/client/thrift/ThriftClients.java b/thrift/thrift0.13/src/main/java/com/linecorp/armeria/client/thrift/ThriftClients.java index 55b8a2316a8..02caf140169 100644 --- a/thrift/thrift0.13/src/main/java/com/linecorp/armeria/client/thrift/ThriftClients.java +++ b/thrift/thrift0.13/src/main/java/com/linecorp/armeria/client/thrift/ThriftClients.java @@ -166,6 +166,7 @@ public static T newClient(SessionProtocol protocol, EndpointGroup endpointGr * * @throws IllegalArgumentException if the {@code clientType} is an unsupported Thrift client stub. */ + @UnstableApi public static T newClient(RpcPreprocessor rpcPreprocessor, Class clientType) { return builder(rpcPreprocessor).build(clientType); } @@ -180,6 +181,7 @@ public static T newClient(RpcPreprocessor rpcPreprocessor, Class clientTy * * @throws IllegalArgumentException if the {@code clientType} is an unsupported Thrift client stub. */ + @UnstableApi public static T newClient(SerializationFormat serializationFormat, RpcPreprocessor rpcPreprocessor, Class clientType) { return builder(serializationFormat, rpcPreprocessor).build(clientType); @@ -196,6 +198,7 @@ public static T newClient(SerializationFormat serializationFormat, * * @throws IllegalArgumentException if the {@code clientType} is an unsupported Thrift client stub. */ + @UnstableApi public static T newClient(SerializationFormat serializationFormat, RpcPreprocessor rpcPreprocessor, Class clientType, String path) { @@ -270,6 +273,7 @@ public static ThriftClientBuilder builder(Scheme scheme, EndpointGroup endpointG * Returns a new {@link ThriftClientBuilder} that builds the client that is configured with * the specified {@link RpcPreprocessor} using {@link ThriftSerializationFormats#BINARY}. */ + @UnstableApi public static ThriftClientBuilder builder(RpcPreprocessor rpcPreprocessor) { return new ThriftClientBuilder(SerializationFormat.NONE, requireNonNull(rpcPreprocessor, "rpcPreprocessor")); @@ -282,6 +286,7 @@ public static ThriftClientBuilder builder(RpcPreprocessor rpcPreprocessor) { *

Note that if {@link SerializationFormat#NONE} is specified * {@link ThriftSerializationFormats#BINARY} will be used by default. */ + @UnstableApi public static ThriftClientBuilder builder(SerializationFormat serializationFormat, RpcPreprocessor rpcPreprocessor) { requireNonNull(serializationFormat, "serializationFormat");