@FunctionalInterface public interface ServerServiceCall<Request,Response> extends ServiceCall<Request,Response>
While the server implementation of the service doesn't have to make use of this type, what
this type does is it allows the supply and composition of request and response headers. When
working with and or composing server service calls, it is almost never a good idea to call ServiceCall.invoke(Object)
, rather, invokeWithHeaders(RequestHeader, Object)
should be called.
Invocation of the former may result in an UnsupportedOperationException
being thrown.
In some cases, where the underlying transport doesn't allow sending a header after the request message has been received (eg WebSockets), the response header may be ignored. In these cases, Lagom will make a best effort attempt at determining whether there was custom information in the response header, and if so, log a warning that it wasn't set.
As this is a functional interface, it is generally advised that you implement it using a lambda.
If you want to actually handle the headers in a service call, it is recommended that rather
than implementing this interface, you use HeaderServiceCall
, which makes the invokeWithHeaders(RequestHeader, Object)
method abstract so that it can be implemented with a
lambda.
Modifier and Type | Method and Description |
---|---|
default ServerServiceCall<Request,Response> |
handleRequestHeader(Function<RequestHeader,RequestHeader> handler)
Make any modifications necessary to the request header.
|
default <T> ServerServiceCall<Request,T> |
handleResponseHeader(BiFunction<ResponseHeader,Response,T> handler)
Transform the response using the given function that takes the response header and the
response.
|
default CompletionStage<akka.japi.Pair<ResponseHeader,Response>> |
invokeWithHeaders(RequestHeader requestHeader,
Request request)
Invoke the given action with the request and response headers.
|
invoke, invoke, withResponseHeader
default CompletionStage<akka.japi.Pair<ResponseHeader,Response>> invokeWithHeaders(RequestHeader requestHeader, Request request)
requestHeader
- The request header.request
- The request message.default <T> ServerServiceCall<Request,T> handleResponseHeader(BiFunction<ResponseHeader,Response,T> handler)
ServiceCall
For client service calls, this gives clients an opportunity to inspect the response headers and status code. The passed in handler is applied after the header transformers configured for the descriptor/endpoint are applied.
For server implementations of service calls, this will be invoked by the server in order to give the service call an opportunity to supply the response header when it supplies the response, but only if the underlying transport supports sending a response header. Generally, server implementations should not implement this method directly, rather, they should use ServerServiceCall, which provides an appropriate implementation.
handleResponseHeader
in interface ServiceCall<Request,Response>
handler
- The handler.default ServerServiceCall<Request,Response> handleRequestHeader(Function<RequestHeader,RequestHeader> handler)
ServiceCall
For client service calls, this gives clients an opportunity to add custom headers and/or modify the request in some way before it is made. The passed in handler is applied before the header transformers configured for the descriptor/endpoint are applied.
For server implementations of service calls, this will be invoked by the server in order to
supply the request header. A new service call can then be returned that uses the header. The
header passed in to the handler by the service call can be anything, it will be ignored -
RequestHeader.DEFAULT
exists for this purpose. Generally, server implementations should
not implement this method directly, rather, they should use ServerServiceCall, which
provides an appropriate implementation.
handleRequestHeader
in interface ServiceCall<Request,Response>
handler
- A function that takes in the request header representing the request, and
transforms it.