0

尝试使用 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 从 jar 中找到正确的类并执行该功能。问题是每当我将返回值设置为 B.

String s = ...
Function <String, B> function = catalog.lookup("A");
B objectB = function.apply(s); // line that causes error

我得到一个 java.lang.ClassCastException: Caused by: java.lang.ClassCastException: com.library.B cannot be cast to com.library.B

此应用程序还从同一库中检索对象模型。我假设问题是由于类加载器,应用程序由一个类加载器加载,而 jar 由“FunctionArchiveDeployer”加载。无论如何围绕这个?还是我在这里错过了一些完全不同的东西?

4

1 回答 1

0

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为由应用程序类加载器加载。

你到底想完成什么。比如什么是业务用例?

于 2021-01-26T14:55:16.800 回答