- @Deprecated
- @NonNull ImmutableMap<QName, MethodHandle> getRpcMethods(final @NonNull Class<? extends RpcService> serviceType) {
- return rpcMethods.computeIfAbsent(serviceType, ignored -> {
- final var lookup = MethodHandles.publicLookup();
- return ImmutableMap.copyOf(Maps.transformValues(createQNameToMethod(serviceType), method -> {
- final MethodHandle raw;
- try {
- raw = lookup.unreflect(method);
- } catch (IllegalAccessException e) {
- throw new IllegalStateException("Lookup on public method failed", e);
- }
- return raw.asType(RPC_SERVICE_METHOD_SIGNATURE);
- }));
- });
- }
-
- @Deprecated
- @VisibleForTesting
- // FIXME: This should be probably part of Binding Runtime context
- ImmutableMap<QName, Method> createQNameToMethod(final Class<? extends RpcService> key) {
- final var moduleName = BindingReflections.getQNameModule(key);
- final var runtimeContext = getRuntimeContext();
- final var module = runtimeContext.getEffectiveModelContext().findModule(moduleName).orElse(null);
- if (module == null) {
- LOG.trace("Schema for {} is not available; expected module name: {}; BindingRuntimeContext: {}",
- key, moduleName, runtimeContext);
- throw new IllegalStateException(String.format("Schema for %s is not available; expected module name: %s;"
- + " full BindingRuntimeContext available in trace log", key, moduleName));
- }
-
- final var ret = ImmutableBiMap.<QName, Method>builder();
- try {
- for (var rpcDef : module.getRpcs()) {
- final var rpcName = rpcDef.getQName();
- ret.put(rpcName, key.getMethod(BindingMapping.getRpcMethodName(rpcName),
- runtimeContext.getRpcInput(rpcName)));
- }
- } catch (NoSuchMethodException e) {
- throw new IllegalStateException("Rpc defined in model does not have representation in generated class.", e);
- }
- return ret.build();
- }
-