0

我有三个 Maven 项目:

  • demo-api:包含函数 API 的 POJO,即OutputPojo.class, InputPojo.class
  • demo-packaged-function:定义一个public OutputPojo apply(InputPojo) {...}依赖于“demo-api”项目的函数。
  • demo-deployer:使用 spring-cloud-function-deployer 来运行打包的函数,也依赖于 'demo-api' 项目。

如果我对函数签名使用简单类型(即重构为String apply(String input) {...}然后一切正常。但是,通过上述设置,我得到以下异常:

Exception in thread "main" java.lang.ClassCastException: class org.example.function.api.InputPojo cannot be cast to class org.example.function.api.InputPojo (org.example.function.api.InputPojo is in unnamed module of loader 'app'; org.example.function.api.InputPojo is in unnamed module of loader org.springframework.cloud.function.deployer.FunctionArchiveDeployer$1 @7fedfe27)

这是有道理的,因为类InputPojo是由两个类加载器加载的。如果我不将函数打包为胖 jar,我会ClassNotFoundException在尝试部署 jar 时得到,并且我无法demo-api从部署程序项目中删除依赖项,否则在调用函数时我无法使用 POJO 类。如果没有函数的简单参数类型,这意味着如何工作?

文档没有涵盖这一点,虽然有使用 POJO 的打包函数的示例,但我找不到部署者实际调用它们的任何示例 - 除了一个单元测试,它演示类型转换并将 POJO 转换为消息.

4

0 回答 0