@FunctionalInterface public interface HeaderServiceCall<Request,Response> extends ServerServiceCall<Request,Response>
of(HeaderServiceCall)
method.
Generally, you shouldn't need to implement this interface with anything but a lambda.Modifier and Type | Method and Description |
---|---|
static <Request,Response> |
compose(java.util.function.Function<RequestHeader,? extends ServerServiceCall<Request,Response>> block)
Compose a header service call.
|
static <Request,Response> |
composeAsync(java.util.function.Function<RequestHeader,java.util.concurrent.CompletionStage<? extends ServerServiceCall<Request,Response>>> block)
Compose a header service call asynchronously.
|
default java.util.concurrent.CompletionStage<Response> |
invoke(Request request)
Invoke the service call.
|
java.util.concurrent.CompletionStage<akka.japi.Pair<ResponseHeader,Response>> |
invokeWithHeaders(RequestHeader requestHeader,
Request request)
Invoke the given action with the request and response headers.
|
static <Request,Response> |
of(HeaderServiceCall<Request,Response> serviceCall)
Convenience method for providing a
HeaderServiceCall when a method accepts a less specific type, eg
ServerServiceCall . |
handleRequestHeader, handleResponseHeader
invoke, withResponseHeader
java.util.concurrent.CompletionStage<akka.japi.Pair<ResponseHeader,Response>> invokeWithHeaders(RequestHeader requestHeader, Request request)
ServerServiceCall.invokeWithHeaders(RequestHeader, Object)
to allow
it to be made an abstract method.invokeWithHeaders
in interface ServerServiceCall<Request,Response>
requestHeader
- The request header.request
- The request message.default java.util.concurrent.CompletionStage<Response> invoke(Request request)
ServiceCall
invoke
in interface ServiceCall<Request,Response>
request
- The request entity.static <Request,Response> HeaderServiceCall<Request,Response> of(HeaderServiceCall<Request,Response> serviceCall)
HeaderServiceCall
when a method accepts a less specific type, eg
ServerServiceCall
. For example, the following method:
<Request, Response> ServerServiceCall<Request, Response> authenticated( Function<User, ServerServiceCall<Request, Response>> serviceCall );Could be invoked like this:
authenticated(user -> HeaderServiceCall.of( (requestHeader, request) -> { ... }));
serviceCall
- The service call.static <Request,Response> HeaderServiceCall<Request,Response> compose(java.util.function.Function<RequestHeader,? extends ServerServiceCall<Request,Response>> block)
<Request, Response> ServerServiceCall<Request, Response> authenticated( Function<String, ServerServiceCall<Request, Response>> block) { return HeaderServiceCall.compose(requestHeader -> { // Get the user String user = requestHeader.principal().orElseGet(() -> { throw new NotAuthenticated("Not authenticated"); }).getName(); // Pass it to the block, and return the resulting call return block.apply(user); }); }
block
- The block that will do the composition.static <Request,Response> HeaderServiceCall<Request,Response> composeAsync(java.util.function.Function<RequestHeader,java.util.concurrent.CompletionStage<? extends ServerServiceCall<Request,Response>>> block)
<Request, Response> ServerServiceCall<Request, Response> authenticated( Function<String, ServerServiceCall<Request, Response>> block) { return HeaderServiceCall.compose(requestHeader -> { // Get the user String userName = requestHeader.principal().orElseGet(() -> { throw new NotAuthenticated("Not authenticated"); }).getName(); // Load the user CompletionStage<User> userFuture = userService.getUser(userName); // Pass it to the block, and return the resulting call return userFuture.thenApply(user -> block.apply(user)); }); }
block
- The block that will do the composition.