下面列出了io.grpc.ServerMethodDefinition#getMethodDescriptor ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
private static <ReqT, RespT> ServerCall.Listener<ReqT> startServerCallHelper(
final ServerMethodDefinition<ReqT, RespT> methodDef,
final List<Object> serializedResp) {
ServerCall<ReqT, RespT> serverCall = new NoopServerCall<ReqT, RespT>() {
@Override
public void sendMessage(RespT message) {
serializedResp.add(message);
}
@Override
public MethodDescriptor<ReqT, RespT> getMethodDescriptor() {
return methodDef.getMethodDescriptor();
}
};
return methodDef.getServerCallHandler().startCall(serverCall, new Metadata());
}
private <WReqT, WRespT> ServerStreamListener startWrappedCall(
String fullMethodName,
ServerMethodDefinition<WReqT, WRespT> methodDef,
ServerStream stream,
Metadata headers,
Context.CancellableContext context) {
ServerCallImpl<WReqT, WRespT> call = new ServerCallImpl<WReqT, WRespT>(
stream,
methodDef.getMethodDescriptor(),
headers,
context,
decompressorRegistry,
compressorRegistry,
serverCallTracer);
ServerCall.Listener<WReqT> listener =
methodDef.getServerCallHandler().startCall(call, headers);
if (listener == null) {
throw new NullPointerException(
"startCall() returned a null listener for method " + fullMethodName);
}
return call.newServerStreamListener(listener);
}
private static <ReqT, RespT> ServerCall.Listener<ReqT> startServerCallHelper(
final ServerMethodDefinition<ReqT, RespT> methodDef,
final List<Object> serializedResp) {
ServerCall<ReqT, RespT> serverCall = new NoopServerCall<ReqT, RespT>() {
@Override
public void sendMessage(RespT message) {
serializedResp.add(message);
}
@Override
public MethodDescriptor<ReqT, RespT> getMethodDescriptor() {
return methodDef.getMethodDescriptor();
}
};
return methodDef.getServerCallHandler().startCall(serverCall, new Metadata());
}
private <WReqT, WRespT> ServerStreamListener startWrappedCall(
String fullMethodName,
ServerMethodDefinition<WReqT, WRespT> methodDef,
ServerStream stream,
Metadata headers,
Context.CancellableContext context,
Tag tag) {
ServerCallImpl<WReqT, WRespT> call = new ServerCallImpl<>(
stream,
methodDef.getMethodDescriptor(),
headers,
context,
decompressorRegistry,
compressorRegistry,
serverCallTracer,
tag);
ServerCall.Listener<WReqT> listener =
methodDef.getServerCallHandler().startCall(call, headers);
if (listener == null) {
throw new NullPointerException(
"startCall() returned a null listener for method " + fullMethodName);
}
return call.newServerStreamListener(listener);
}
@Nullable
private <I, O> ArmeriaServerCall<I, O> startCall(
String fullMethodName,
ServerMethodDefinition<I, O> methodDef,
ServiceRequestContext ctx,
HttpHeaders headers,
HttpResponseWriter res,
SerializationFormat serializationFormat) {
final MethodDescriptor<I, O> methodDescriptor = methodDef.getMethodDescriptor();
final ArmeriaServerCall<I, O> call = new ArmeriaServerCall<>(
headers,
methodDescriptor,
compressorRegistry,
decompressorRegistry,
res,
maxInboundMessageSizeBytes,
maxOutboundMessageSizeBytes,
ctx,
serializationFormat,
jsonMarshallers.get(methodDescriptor.getServiceName()),
unsafeWrapRequestBuffers,
useBlockingTaskExecutor,
defaultHeaders.get(serializationFormat));
final ServerCall.Listener<I> listener;
try (SafeCloseable ignored = ctx.push()) {
listener = methodDef.getServerCallHandler().startCall(call, MetadataUtil.copyFromHeaders(headers));
} catch (Throwable t) {
call.setListener(new EmptyListener<>());
call.close(GrpcStatus.fromThrowable(t), new Metadata());
logger.warn(
"Exception thrown from streaming request stub method before processing any request data" +
" - this is likely a bug in the stub implementation.");
return null;
}
if (listener == null) {
// This will never happen for normal generated stubs but could conceivably happen for manually
// constructed ones.
throw new NullPointerException(
"startCall() returned a null listener for method " + fullMethodName);
}
call.setListener(listener);
return call;
}