2

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

我试图运行的代码应该Map<String, 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 上运行它会在地图为空的情况下返回错误。
Key PaginationConverter is missing in the map.: java.util.NoSuchElementException

有没有其他人遇到过这个问题?

4

1 回答 1

2

还有一个案例。你有

val cl = ClassLoader.getSystemClassLoader()

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

尝试使用

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

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

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

于 2019-03-13T15:31:21.443 回答