public void removeService(ServerServiceDefinition service) { if (service != null) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { methods.remove(method.getMethodDescriptor().getFullMethodName()); } } }
HandlerRegistry build() { final ImmutableMap.Builder<String, ServerMethodDefinition<?, ?>> mapBuilder = ImmutableMap.builder(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { mapBuilder.put(method.getMethodDescriptor().getFullMethodName(), method); } } return new HandlerRegistry(ImmutableList.copyOf(services.values()), mapBuilder.build()); } }
@Nullable private static MessageMarshaller jsonMarshaller(HandlerRegistry registry, Set<SerializationFormat> supportedSerializationFormats) { if (supportedSerializationFormats.stream().noneMatch(GrpcSerializationFormats::isJson)) { return null; } final List<MethodDescriptor<?, ?>> methods = registry.services().stream() .flatMap(service -> service.getMethods().stream()) .map(ServerMethodDefinition::getMethodDescriptor) .collect(toImmutableList()); return GrpcJsonUtil.jsonMarshaller(methods); }
/** * Creates a new instance that decorates the specified {@link Service}. */ UnframedGrpcService(Service<HttpRequest, HttpResponse> delegate) { super(delegate); delegateGrpcService = delegate.as(GrpcService.class) .orElseThrow( () -> new IllegalArgumentException("Decorated service must be a GrpcService.")); methodsByName = delegateGrpcService.services() .stream() .flatMap(service -> service.getMethods().stream()) .map(ServerMethodDefinition::getMethodDescriptor) .collect(ImmutableMap.toImmutableMap(MethodDescriptor::getFullMethodName, Function.identity())); }
@SuppressWarnings({"rawtypes", "unchecked"}) public void addService(ServerServiceDefinition service, Provider provider) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { Method providerMethod = GrpcUtil.getMethod(method.getMethodDescriptor().getFullMethodName(), provider.getInterface()); MotanServerCallHandler handler; if (method.getServerCallHandler() instanceof MotanServerCallHandler) { handler = (MotanServerCallHandler) method.getServerCallHandler(); } else { handler = new MotanServerCallHandler(); method = method.withServerCallHandler(handler); } handler.init(provider, providerMethod); if (GrpcUtil.JSON_CODEC.equals(provider.getUrl().getParameter(URLParamType.serialize.getName()))) { MethodDescriptor jsonDesc = GrpcUtil.convertJsonDescriptor(method.getMethodDescriptor(), providerMethod.getParameterTypes()[0], providerMethod.getReturnType()); if(jsonDesc != null){ method = ServerMethodDefinition.create(jsonDesc, method.getServerCallHandler()); LoggerUtil.info("grpc method " + jsonDesc.getFullMethodName() +" use codec json."); } } methods.put(method.getMethodDescriptor().getFullMethodName(), method); } }
InternalHandlerRegistry build() { Map<String, ServerMethodDefinition<?, ?>> map = new HashMap<String, ServerMethodDefinition<?, ?>>(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { map.put(method.getMethodDescriptor().getFullMethodName(), method); } } return new InternalHandlerRegistry( Collections.unmodifiableList(new ArrayList<ServerServiceDefinition>(services.values())), Collections.unmodifiableMap(map)); } }
InternalHandlerRegistry build() { Map<String, ServerMethodDefinition<?, ?>> map = new HashMap<String, ServerMethodDefinition<?, ?>>(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { map.put(method.getMethodDescriptor().getFullMethodName(), method); } } return new InternalHandlerRegistry( Collections.unmodifiableList(new ArrayList<>(services.values())), Collections.unmodifiableMap(map)); } }
private static MessageMarshaller jsonMarshaller(HandlerRegistry registry) { final List<MethodDescriptor<?, ?>> methods = registry.services().stream() .flatMap(service -> service.getMethods().stream()) .map(ServerMethodDefinition::getMethodDescriptor) .collect(toImmutableList()); return GrpcJsonUtil.jsonMarshaller(methods); }
/** * Create a new {@code ServerServiceDefinition} whose {@link ServerCallHandler}s will call * {@code interceptors} before calling the pre-existing {@code ServerCallHandler}. The last * interceptor will have its {@link ServerInterceptor#interceptCall} called first. * * @param serviceDef the service definition for which to intercept all its methods. * @param interceptors list of interceptors to apply to the service. * @return a wrapped version of {@code serviceDef} with the interceptors applied. */ public static ServerServiceDefinition intercept(ServerServiceDefinition serviceDef, List<? extends ServerInterceptor> interceptors) { Preconditions.checkNotNull(serviceDef, "serviceDef"); if (interceptors.isEmpty()) { return serviceDef; } ServerServiceDefinition.Builder serviceDefBuilder = ServerServiceDefinition.builder(serviceDef.getServiceDescriptor()); for (ServerMethodDefinition<?, ?> method : serviceDef.getMethods()) { wrapAndAddMethod(serviceDefBuilder, method, interceptors); } return serviceDefBuilder.build(); }
/** * Creates a new instance that decorates the specified {@link Service}. */ UnframedGrpcService(Service<HttpRequest, HttpResponse> delegate) { super(delegate); delegateGrpcService = delegate.as(GrpcService.class) .orElseThrow( () -> new IllegalArgumentException("Decorated service must be a GrpcService.")); methodsByName = delegateGrpcService.services() .stream() .flatMap(service -> service.getMethods().stream()) .map(ServerMethodDefinition::getMethodDescriptor) .collect(ImmutableMap.toImmutableMap(MethodDescriptor::getFullMethodName, Function.identity())); }
@SuppressWarnings("unchecked") private ServerServiceDefinition bindService(Supplier<T> factory) { ServerServiceDefinition baseDefinition = factory.get().bindService(); ServiceDescriptor descriptor = baseDefinition.getServiceDescriptor(); Collection<ServerMethodDefinition<?, ?>> methods = baseDefinition.getMethods(); ServerServiceDefinition.Builder builder = ServerServiceDefinition.builder(descriptor); methods.forEach(method -> builder.addMethod(ServerMethodDefinition.create(method.getMethodDescriptor(), new PerCallServerCallHandler(factory)))); return builder.build(); }
@SuppressWarnings("unchecked") private ServerServiceDefinition bindService(Supplier<T> factory) { ServerServiceDefinition baseDefinition = factory.get().bindService(); ServiceDescriptor descriptor = baseDefinition.getServiceDescriptor(); Collection<ServerMethodDefinition<?, ?>> methods = baseDefinition.getMethods(); ServerServiceDefinition.Builder builder = ServerServiceDefinition.builder(descriptor); methods.forEach(method -> builder.addMethod(ServerMethodDefinition.create(method.getMethodDescriptor(), new PerCallServerCallHandler(factory)))); return builder.build(); }
/** * Create a new {@code ServerServiceDefinition} whose {@link ServerCallHandler}s will call * {@code interceptors} before calling the pre-existing {@code ServerCallHandler}. The last * interceptor will have its {@link ServerInterceptor#interceptCall} called first. * * @param serviceDef the service definition for which to intercept all its methods. * @param interceptors list of interceptors to apply to the service. * @return a wrapped version of {@code serviceDef} with the interceptors applied. */ public static ServerServiceDefinition intercept(ServerServiceDefinition serviceDef, List<? extends ServerInterceptor> interceptors) { Preconditions.checkNotNull(serviceDef, "serviceDef"); if (interceptors.isEmpty()) { return serviceDef; } ServerServiceDefinition.Builder serviceDefBuilder = ServerServiceDefinition.builder(serviceDef.getServiceDescriptor()); for (ServerMethodDefinition<?, ?> method : serviceDef.getMethods()) { wrapAndAddMethod(serviceDefBuilder, method, interceptors); } return serviceDefBuilder.build(); }
/** * Build the proxy handler registry. * * @return registry builder */ public ProxyHandlerRegistry build() { checkNotNull(finder, "No channel finder defined"); ProxyServerCallHandler<InputStream, InputStream> proxyHandler = new ProxyServerCallHandler<>(finder, CallOptions.DEFAULT); Map<String, ServerMethodDefinition<?, ?>> methods = new HashMap<>(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { String methodName = method.getMethodDescriptor().getFullMethodName(); methods.put( methodName, createProxyServerMethodDefinition( method.getMethodDescriptor(), proxyHandler) ); } } return new ProxyHandlerRegistry( Collections.unmodifiableMap(methods)); }
HandlerRegistry build() { final ImmutableMap.Builder<String, ServerMethodDefinition<?, ?>> mapBuilder = ImmutableMap.builder(); for (ServerServiceDefinition service : services.values()) { for (ServerMethodDefinition<?, ?> method : service.getMethods()) { mapBuilder.put(method.getMethodDescriptor().getFullMethodName(), method); } } return new HandlerRegistry(ImmutableList.copyOf(services.values()), mapBuilder.build()); } }
new ArrayList<MethodDescriptor<?, ?>>(); for (final ServerMethodDefinition<?, ?> definition : serviceDef.getMethods()) { final MethodDescriptor<?, ?> originalMethodDescriptor = definition.getMethodDescriptor(); final MethodDescriptor<T, T> wrappedMethodDescriptor =
new ArrayList<MethodDescriptor<?, ?>>(); for (final ServerMethodDefinition<?, ?> definition : serviceDef.getMethods()) { final MethodDescriptor<?, ?> originalMethodDescriptor = definition.getMethodDescriptor(); final MethodDescriptor<T, T> wrappedMethodDescriptor =