public Object lookupServiceInstance()

in sdk/enclave/src/main/java/org/apache/teaclave/javasdk/enclave/framework/EnclaveContext.java [71:95]


    public Object lookupServiceInstance(String instanceIdentity, String serviceName, String implementationClassName) throws ConfidentialComputingException {
        if (!cachedServiceInstances.containsKey(instanceIdentity)) {
            throw new ConfidentialComputingException(String.format("No stored service %s with identity %s", serviceName, instanceIdentity));
        }
        Object serviceInstance = cachedServiceInstances.get(instanceIdentity);
        if (serviceInstance != null) {
            Class<?> serviceInstanceClass = serviceInstance.getClass();
            try {
                Class<?> interfaceClass = Class.forName(serviceName);
                if (!interfaceClass.isAssignableFrom(serviceInstanceClass)) {
                    throw new ConfidentialComputingException(String.format("Cached service instance with identity %s doesn't implement the interface %s.",
                            instanceIdentity, serviceName));
                }
            } catch (ClassNotFoundException e) {
                throw new ConfidentialComputingException(String.format("Can't find the interface class %s.",
                        serviceName), e);
            }

            String cachedImplementationClassName = serviceInstanceClass.getName();
            if (!cachedImplementationClassName.equals(implementationClassName)) {
                throw new ConfidentialComputingException(String.format("Implementation class does not match, expected is %s, but found is %s.", implementationClassName, cachedImplementationClassName));
            }
        }
        return serviceInstance;
    }