Class ServletAdapter
- java.lang.Object
-
- io.grpc.servlet.jakarta.ServletAdapter
-
@ExperimentalApi("https://github.com/grpc/grpc-java/issues/5066") public final class ServletAdapter extends java.lang.Object
An adapter that transformsHttpServletRequest
into gRPC request and lets a gRPC server process it, and transforms the gRPC response intoHttpServletResponse
. An adapter can be instantiated byServletServerBuilder.buildServletAdapter()
.In a servlet, calling
doPost(HttpServletRequest, HttpServletResponse)
insideHttpServlet.doPost(HttpServletRequest, HttpServletResponse)
makes the servlet backed by the gRPC server associated with the adapter. The servlet must support Asynchronous Processing and must be deployed to a container that supports servlet 4.0 and enables HTTP/2.The API is experimental. The authors would like to know more about the real usecases. Users are welcome to provide feedback by commenting on the tracking issue.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
ServletAdapter.GrpcAsyncListener
private static class
ServletAdapter.GrpcReadListener
-
Field Summary
Fields Modifier and Type Field Description private Attributes
attributes
(package private) static java.util.logging.Logger
logger
private int
maxInboundMessageSize
private java.util.List<? extends ServerStreamTracer.Factory>
streamTracerFactories
private ServerTransportListener
transportListener
-
Constructor Summary
Constructors Constructor Description ServletAdapter(ServerTransportListener transportListener, java.util.List<? extends ServerStreamTracer.Factory> streamTracerFactories, int maxInboundMessageSize)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
destroy()
Call this method when the adapter is no longer needed.void
doGet(jakarta.servlet.http.HttpServletRequest req, jakarta.servlet.http.HttpServletResponse resp)
Call this method insideHttpServlet.doGet(HttpServletRequest, HttpServletResponse)
to serve gRPC GET request.void
doPost(jakarta.servlet.http.HttpServletRequest req, jakarta.servlet.http.HttpServletResponse resp)
Call this method insideHttpServlet.doPost(HttpServletRequest, HttpServletResponse)
to serve gRPC POST request.private static java.lang.String
getAuthority(jakarta.servlet.http.HttpServletRequest req)
private static Metadata
getHeaders(jakarta.servlet.http.HttpServletRequest req)
static boolean
isGrpc(jakarta.servlet.http.HttpServletRequest request)
Checks whether an incomingHttpServletRequest
may come from a gRPC client.
-
-
-
Field Detail
-
logger
static final java.util.logging.Logger logger
-
transportListener
private final ServerTransportListener transportListener
-
streamTracerFactories
private final java.util.List<? extends ServerStreamTracer.Factory> streamTracerFactories
-
maxInboundMessageSize
private final int maxInboundMessageSize
-
attributes
private final Attributes attributes
-
-
Constructor Detail
-
ServletAdapter
ServletAdapter(ServerTransportListener transportListener, java.util.List<? extends ServerStreamTracer.Factory> streamTracerFactories, int maxInboundMessageSize)
-
-
Method Detail
-
doGet
public void doGet(jakarta.servlet.http.HttpServletRequest req, jakarta.servlet.http.HttpServletResponse resp) throws java.io.IOException
Call this method insideHttpServlet.doGet(HttpServletRequest, HttpServletResponse)
to serve gRPC GET request.This method is currently not implemented.
Note that in rare case gRPC client sends GET requests.
Do not modify
req
andresp
before or after calling this method. However, callingresp.setBufferSize()
before invocation is allowed.- Throws:
java.io.IOException
-
doPost
public void doPost(jakarta.servlet.http.HttpServletRequest req, jakarta.servlet.http.HttpServletResponse resp) throws java.io.IOException
Call this method insideHttpServlet.doPost(HttpServletRequest, HttpServletResponse)
to serve gRPC POST request.Do not modify
req
andresp
before or after calling this method. However, callingresp.setBufferSize()
before invocation is allowed.- Throws:
java.io.IOException
-
getHeaders
private static Metadata getHeaders(jakarta.servlet.http.HttpServletRequest req)
-
getAuthority
private static java.lang.String getAuthority(jakarta.servlet.http.HttpServletRequest req)
-
destroy
public void destroy()
Call this method when the adapter is no longer needed. The gRPC server will be terminated.
-
isGrpc
public static boolean isGrpc(jakarta.servlet.http.HttpServletRequest request)
Checks whether an incomingHttpServletRequest
may come from a gRPC client.- Returns:
- true if the request comes from a gRPC client
-
-