|
49 | 49 | import java.util.Collections; |
50 | 50 | import java.util.List; |
51 | 51 | import java.util.concurrent.ScheduledExecutorService; |
| 52 | +import java.util.function.Function; |
52 | 53 | import javax.annotation.Nullable; |
53 | 54 | import javax.annotation.concurrent.NotThreadSafe; |
| 55 | +import javax.servlet.http.HttpServletRequest; |
54 | 56 |
|
55 | 57 | /** |
56 | 58 | * Builder to build a gRPC server that can run as a servlet. This is for advanced custom settings. |
|
64 | 66 | @NotThreadSafe |
65 | 67 | public final class ServletServerBuilder extends ForwardingServerBuilder<ServletServerBuilder> { |
66 | 68 | List<? extends ServerStreamTracer.Factory> streamTracerFactories; |
| 69 | + private Function<HttpServletRequest, String> methodNameResolver = |
| 70 | + ServletAdapter.DEFAULT_METHOD_NAME_RESOLVER; |
67 | 71 | int maxInboundMessageSize = DEFAULT_MAX_MESSAGE_SIZE; |
68 | 72 |
|
69 | 73 | private final ServerImplBuilder serverImplBuilder; |
@@ -98,7 +102,8 @@ public Server build() { |
98 | 102 | * Creates a {@link ServletAdapter}. |
99 | 103 | */ |
100 | 104 | public ServletAdapter buildServletAdapter() { |
101 | | - return new ServletAdapter(buildAndStart(), streamTracerFactories, maxInboundMessageSize); |
| 105 | + return new ServletAdapter(buildAndStart(), streamTracerFactories, methodNameResolver, |
| 106 | + maxInboundMessageSize); |
102 | 107 | } |
103 | 108 |
|
104 | 109 | /** |
@@ -176,6 +181,18 @@ public ServletServerBuilder useTransportSecurity(File certChain, File privateKey |
176 | 181 | throw new UnsupportedOperationException("TLS should be configured by the servlet container"); |
177 | 182 | } |
178 | 183 |
|
| 184 | + /** |
| 185 | + * Specifies how to determine gRPC method name from servlet request. |
| 186 | + * |
| 187 | + * <p>The default strategy is using {@link HttpServletRequest#getRequestURI()} without the leading |
| 188 | + * slash.</p> |
| 189 | + */ |
| 190 | + public ServletServerBuilder methodNameResolver( |
| 191 | + Function<HttpServletRequest, String> methodResolver) { |
| 192 | + this.methodNameResolver = checkNotNull(methodResolver); |
| 193 | + return this; |
| 194 | + } |
| 195 | + |
179 | 196 | @Override |
180 | 197 | public ServletServerBuilder maxInboundMessageSize(int bytes) { |
181 | 198 | checkArgument(bytes >= 0, "bytes must be >= 0"); |
|
0 commit comments