in sdk/host/src/main/java/org/apache/teaclave/javasdk/host/AbstractEnclave.java [73:93]
<T> Iterator<T> loadProxyServiceMockJVM(Class<?> service) throws ServicesLoadingException {
try (MetricTraceContext trace = new MetricTraceContext(
this.getEnclaveInfo(),
MetricTraceContext.LogPrefix.METRIC_LOG_ENCLAVE_SERVICE_LOADING_PATTERN,
service.getName())) {
List<T> serviceProxies = new ArrayList<>();
Class<?>[] serviceInterface = new Class[]{service};
ServiceLoader<T> innerProxyServices = (ServiceLoader<T>) ServiceLoader.load(service);
for (T innerProxyService : innerProxyServices) {
ProxyMockJvmInvocationHandler handler = new ProxyMockJvmInvocationHandler(this, innerProxyService);
T proxy = (T) Proxy.newProxyInstance(service.getClassLoader(), serviceInterface, handler);
serviceProxies.add(proxy);
// Register proxy handler for enclave's corresponding service gc recycling.
enclaveContext.getEnclaveServicesRecycler().registerProxyHandler(proxy, handler);
}
return serviceProxies.iterator();
} catch (MetricTraceLogWriteException e) {
throw new ServicesLoadingException(e);
}
}