问题描述
尝试使用 Spring Cloud Functions,我创建了一个外部 jar 文件,其中包含一个如下所示的类:
Public class A implements Function<String,B>{
Public B apply(String s){
//...
return instance of B;
}
}
其中 B 是我在单独库中的自定义对象。我的应用程序(单独的 Spring Boot 应用程序)可以使用 Catalog.lookup()
从 jar 中找到正确的类并执行该函数。问题是,每当我将返回值设置为 B 时。
String s = ...
Function <String,B> function = catalog.lookup("A");
B objectB = function.apply(s); // line that causes error
我得到一个 java.lang.classCastException: 由:java.lang.classCastException: com.library.B 无法转换为 com.library.B
此应用程序还从同一个库中检索对象模型。我假设问题是由于类加载器,应用程序由一个类加载器加载,而 jar 由“FunctionArchiveDeployer”加载。反正围绕这个?还是我在这里遗漏了一些完全不同的东西?
解决方法
Caused by: java.lang.ClassCastException: com.library.B cannot be cast to com.library.B
表示同一个类被两个不同的类加载器加载两次。请记住,如果您使用 spring-cloud-function 的部署程序功能,则部署的 JAR 将在独立且专用的类加载器中执行。因此,查找返回由部署器的类加载器加载的 com.library.B
,您将其转换为由应用程序类加载器加载的 com.library.B
。
你到底想完成什么。比如什么是业务用例?