Skip to content

Commit

Permalink
Update HttpRules API to not have varargs with generics (#7687)
Browse files Browse the repository at this point in the history
* Update HttpRules API to not have method with vararg with generics

- Update HttpService interface to not be a Supplier<HttpService> to remove ambiguity

- Replace `register(Supplier<? extends HttpService>... service)` with register(HttpService... service)`
- Overload it with 5 variants to accept up to 5 suppliers of services (@SafeVarags is not usable on interfaces)
- Add `register(List<HttpService> services)` for more than 5 services

- Replace `register(String pathPattern, Supplier<? extends HttpService>... service)` with register(String pathPattern, HttpService... service)`
- Overload it with 5 variants to accept up to 5 suppliers of services (@SafeVarags is not usable on interfaces)
- Add `register(String pathPattern, List<HttpService> services)` for more than 5 services

Fixes #7656

* Fix javadoc references to the old  method `register(java.util.function.Supplier[])`
  • Loading branch information
romain-grecourt authored Sep 29, 2023
1 parent 3d4796d commit d61541f
Show file tree
Hide file tree
Showing 11 changed files with 299 additions and 48 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
/**
* Path of a {@link io.helidon.webserver.http.HttpService} to register with routing.
* If a service is not annotated with this annotation, it would be registered without a path using
* {@link io.helidon.webserver.http.HttpRules#register(java.util.function.Supplier[])}.
* {@link io.helidon.webserver.http.HttpRules#register(io.helidon.webserver.http.HttpService[])}.
*
* Configuration can be overridden using configuration:
* <ul>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ private SecurityFeature(Security security, Config config, SecurityHandler defaul

/**
* Create a consumer of routing config to be
* {@link io.helidon.webserver.http.HttpRouting.Builder#register(java.util.function.Supplier[])} registered} with
* {@link io.helidon.webserver.http.HttpRouting.Builder#addFeature(java.util.function.Supplier) registered} with
* web server routing to process security requests.
* This method is to be used together with other routing methods to protect web resources programmatically.
* Example:
Expand All @@ -143,7 +143,7 @@ public static SecurityFeature create(Security security) {

/**
* Create a consumer of routing config to be
* {@link io.helidon.webserver.http.HttpRouting.Builder#register(java.util.function.Supplier[])} registered} with
* {@link io.helidon.webserver.http.HttpRouting.Builder#addFeature(java.util.function.Supplier) registered} with
* web server routing to process security requests.
* This method configures security and web server integration from a config instance
*
Expand All @@ -157,7 +157,7 @@ public static SecurityFeature create(Config config) {

/**
* Create a consumer of routing config to be
* {@link io.helidon.webserver.http.HttpRouting.Builder#register(java.util.function.Supplier[])} registered} with
* {@link io.helidon.webserver.http.HttpRouting.Builder#addFeature(java.util.function.Supplier) registered} with
* web server routing to process security requests.
* This method expects initialized security and creates web server integration from a config instance
*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
* Serves 'static content' (files) from filesystem or using a classloader to the
* {@link io.helidon.webserver.WebServer WebServer}
* {@link io.helidon.webserver.http.HttpRouting}. It is possible to
* {@link io.helidon.webserver.http.HttpRouting.Builder#register(java.util.function.Supplier[]) register} it on the routing.
* {@link io.helidon.webserver.http.HttpRouting.Builder#register(HttpService[]) register} it on the routing.
* <pre>{@code
* // Serve content of attached '/static/pictures' on '/pics'
* Routing.builder()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,7 @@ private TracingFeature(Builder builder) {
*
* @param tracer tracer to use for tracing spans created by this feature
* @return tracing configuration to register with
* {@link
* io.helidon.webserver.http.HttpRouting.Builder#register(java.util.function.Supplier[])}
* {@link io.helidon.webserver.http.HttpRouting.Builder#addFeature(java.util.function.Supplier)}
*/
public static TracingFeature create(Tracer tracer) {
return create(tracer, TracingConfig.ENABLED);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,10 +143,105 @@ private enum RoutingResult {
*/
public interface Builder extends HttpRules, io.helidon.common.Builder<Builder, HttpRouting> {
@Override
Builder register(Supplier<? extends HttpService>... service);
Builder register(HttpService... service);

@Override
Builder register(String path, Supplier<? extends HttpService>... service);
default Builder register(Supplier<? extends HttpService> service) {
HttpRules.super.register(service);
return this;
}

@Override
default Builder register(Supplier<? extends HttpService> service1, Supplier<? extends HttpService> service2) {
HttpRules.super.register(service1, service2);
return this;
}

@Override
default Builder register(Supplier<? extends HttpService> service1,
Supplier<? extends HttpService> service2,
Supplier<? extends HttpService> service3) {
HttpRules.super.register(service1, service2, service3);
return this;
}

@Override
default Builder register(Supplier<? extends HttpService> service1,
Supplier<? extends HttpService> service2,
Supplier<? extends HttpService> service3,
Supplier<? extends HttpService> service4) {
HttpRules.super.register(service1, service2, service3, service4);
return this;
}

@Override
default Builder register(Supplier<? extends HttpService> service1,
Supplier<? extends HttpService> service2,
Supplier<? extends HttpService> service3,
Supplier<? extends HttpService> service4,
Supplier<? extends HttpService> service5) {
HttpRules.super.register(service1, service2, service3, service4, service5);
return this;
}

@Override
default Builder register(List<Supplier<? extends HttpService>> services) {
HttpRules.super.register(services);
return this;
}

@Override
Builder register(String path, HttpService... service);

@Override
default Builder register(String pathPattern, Supplier<? extends HttpService> service) {
HttpRules.super.register(pathPattern, service);
return this;
}

@Override
default Builder register(String pathPattern,
Supplier<? extends HttpService> service1,
Supplier<? extends HttpService> service2) {
HttpRules.super.register(pathPattern, service1, service2);
return this;
}

@Override
default Builder register(String pathPattern,
Supplier<? extends HttpService> service1,
Supplier<? extends HttpService> service2,
Supplier<? extends HttpService> service3) {
HttpRules.super.register(pathPattern, service1, service2, service3);
return this;
}

@Override
default Builder register(String pathPattern,
Supplier<? extends HttpService> service1,
Supplier<? extends HttpService> service2,
Supplier<? extends HttpService> service3,
Supplier<? extends HttpService> service4) {
HttpRules.super.register(pathPattern, service1, service2, service3, service4);
return this;
}

@Override
default Builder register(String pathPattern,
Supplier<? extends HttpService> service1,
Supplier<? extends HttpService> service2,
Supplier<? extends HttpService> service3,
Supplier<? extends HttpService> service4,
Supplier<? extends HttpService> service5) {
HttpRules.super.register(pathPattern, service1, service2, service3, service4, service5);
return this;
}

@Override
default Builder register(String pathPattern, List<Supplier<? extends HttpService>> services) {
HttpRules.super.register(pathPattern, services);
return this;
}

@Override
Builder route(HttpRoute route);
Expand Down Expand Up @@ -438,13 +533,13 @@ public HttpRouting build() {
}

@Override
public Builder register(Supplier<? extends HttpService>... service) {
public Builder register(HttpService... service) {
mainRouting.service(service);
return this;
}

@Override
public Builder register(String path, Supplier<? extends HttpService>... service) {
public Builder register(String path, HttpService... service) {
mainRouting.service(path, service);
return this;
}
Expand Down Expand Up @@ -620,13 +715,13 @@ public HttpRouting build() {
}

@Override
public Builder register(Supplier<? extends HttpService>... service) {
public Builder register(HttpService... service) {
rootRules.register(service);
return this;
}

@Override
public Builder register(String pathPattern, Supplier<? extends HttpService>... service) {
public Builder register(String pathPattern, HttpService... service) {
rootRules.register(pathPattern, service);
return this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@

import java.util.ArrayList;
import java.util.List;
import java.util.function.Supplier;

import io.helidon.common.Weighted;

Expand All @@ -42,14 +41,14 @@ void filter(Filter filter) {
}

<T extends Throwable> void error(Class<T> exceptionClass, ErrorHandler<? super T> handler) {
this.registrations.add(new ErrorReg<T>(exceptionClass, handler));
this.registrations.add(new ErrorReg<>(exceptionClass, handler));
}

void service(Supplier<? extends HttpService>... services) {
void service(HttpService... services) {
this.registrations.add(new ServiceReg(services));
}

void service(String path, Supplier<? extends HttpService>... services) {
void service(String path, HttpService... services) {
this.registrations.add(new ServicePathReg(path, services));
}

Expand Down Expand Up @@ -78,14 +77,14 @@ public void register(HttpRouting.Builder routing) {
}
}

private record ServiceReg(Supplier<? extends HttpService>[] services) implements Registration {
private record ServiceReg(HttpService[] services) implements Registration {
@Override
public void register(HttpRouting.Builder routing) {
routing.register(services);
}
}

private record ServicePathReg(String path, Supplier<? extends HttpService>[] services) implements Registration {
private record ServicePathReg(String path, HttpService[] services) implements Registration {
@Override
public void register(HttpRouting.Builder routing) {
routing.register(path, services);
Expand Down
Loading

0 comments on commit d61541f

Please sign in to comment.