Workflow class is not visible from class loader which is used to create proxy
I have an application where app classes are loaded by a different class loader than that which loads library classes (the library class loader is a parent of the application class loader). Cadence client library is loaded by the library class loader while the workflow class is loaded by the application class loader. When I try to create new workflow with workflowClient.newWorkflowStub(MyWorkflow.class) the following exception occurs.
Stack trace:
java.lang.IllegalArgumentException: com.data.workflow.MyWorkflow referenced from a method is not visible from class loader
java.base/java.lang.reflect.Proxy$ProxyBuilder.ensureVisible(Proxy.java:858)
java.base/java.lang.reflect.Proxy$ProxyBuilder.validateProxyInterfaces(Proxy.java:681)
java.base/java.lang.reflect.Proxy$ProxyBuilder.<init>(Proxy.java:627)
java.base/java.lang.reflect.Proxy$ProxyBuilder.<init>(Proxy.java:635)
java.base/java.lang.reflect.Proxy.lambda$getProxyConstructor$0(Proxy.java:415)
java.base/jdk.internal.loader.AbstractClassLoaderValue$Memoizer.get(AbstractClassLoaderValue.java:329)
java.base/jdk.internal.loader.AbstractClassLoaderValue.computeIfAbsent(AbstractClassLoaderValue.java:205)
java.base/java.lang.reflect.Proxy.getProxyConstructor(Proxy.java:413)
java.base/java.lang.reflect.Proxy.newProxyInstance(Proxy.java:1006)
com.uber.cadence.internal.sync.WorkflowClientInternal.newWorkflowStub(WorkflowClientInternal.java:162)
com.uber.cadence.internal.sync.WorkflowClientInternal.newWorkflowStub(WorkflowClientInternal.java:146)
com.data.workflow.HelloWorkflowStarter.startHelloCadenceWorkflow(HelloWorkflowStarter.java:28)
WorkflowInternal.class.getClassLoader() is used to create proxy: https://github.com/uber/cadence-java-client/blob/0afa7ee18e6745c413f0501b08b27add42adaf2b/src/main/java/com/uber/cadence/internal/sync/WorkflowClientInternal.java#L163