AWS Lambda 和 Java 反射 (Guava)

AWS Lambda and Java Reflections (Guava)

我正在尝试 运行 Guava 在我的 AWS Lambda 函数中进行反射,但它似乎在生产环境中不起作用..

我正在尝试 运行 的代码应该创建一个 Map<String, Class> 名称 class 和 class。

代码:

val converterClassMap by lazy {
val cl = ClassLoader.getSystemClassLoader()
ClassPath.from(cl).getTopLevelClasses("converters").asSequence().mapNotNull { it.load().kotlin }
        .filter { it.simpleName?.endsWith("Converter") == true }
        .associateBy( { it.simpleName }, { it } )
}

运行 此代码在本地完美运行,但 运行 在 lambda 生产环境中使用它 return 地图为空时出现错误。
Key PaginationConverter is missing in the map.: java.util.NoSuchElementException

还有其他人运行遇到这个问题吗?

还有一个案例。你有

val cl = ClassLoader.getSystemClassLoader()

代码中的行。这意味着它需要系统类加载器来扫描 类.

尝试使用

class SomeClassFromYouCodeNotALibrary
val cl = SomeClassFromYouCodeNotALibrary::class.java.classLoader

那一个将工作稳定,独立于应用程序中使用的类加载器的数量。例如,AWS Lambda 运行时可能有特定的类加载器。

如果它不起作用,请尝试记录类加载器类型和类路径,例如println(cl)println((cl as? URLClassLoader).getURLs().joinToString(", "))