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(", "))
我正在尝试 运行 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(", "))