gpt4 book ai didi

java - 类型安全配置 - 空指针异常

转载 作者:太空宇宙 更新时间:2023-11-04 06:59:31 26 4
gpt4 key购买 nike

我正在为 Play/Scala/Akka 应用程序手动构建类路径,以便我可以使用 ScalaTest 运行程序在 CI 管道的不同阶段测试我的应用程序,而无需重新编译。但是,我收到以下错误:

java.lang.NullPointerException:
at com.typesafe.config.impl.Parseable$ParseableResources.rawParseValue(Parseable.java:509)
at com.typesafe.config.impl.Parseable$ParseableResources.rawParseValue(Parseable.java:492)
at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:171)
at com.typesafe.config.impl.Parseable.parseValue(Parseable.java:165)
at com.typesafe.config.impl.Parseable.parse(Parseable.java:204)
at com.typesafe.config.impl.ConfigImpl$1.call(ConfigImpl.java:368)
at com.typesafe.config.impl.ConfigImpl$1.call(ConfigImpl.java:365)
at com.typesafe.config.impl.ConfigImpl$LoaderCache.getOrElseUpdate(ConfigImpl.java:58)
at com.typesafe.config.impl.ConfigImpl.computeCachedConfig(ConfigImpl.java:86)
at com.typesafe.config.impl.ConfigImpl.defaultReference(ConfigImpl.java:365)

这是我正在运行的命令:

/usr/lib/jvm/java-7-openjdk//bin/java -Xmx256M -Xms32M -Xbootclasspath/a:$BOOTCP -classpath '""' -Dscala.home=/usr/opt/scala -Dscala.usejavacp=true -jar /home/nick/repos/testrunnnertest/lib/scalatest.jar -R target/scala-2.10/test-classes -o 

$BOOTCP 的值是一个庞大的依赖项列表,包括应用程序 jar、.ivy2 中的依赖项以及包含配置文件的文件夹(/conf、/test/resources)。我从 Scala shell 脚本复制了这个命令。我还使用 $BOOTCP 的值作为 -classpath 的值,但仍然遇到同样的问题。

只有当我运行正在启动 Play 框架测试服务器的验收测试时,才会出现此问题。因此,在/conf 中加载主应用程序配置(而不是/test/resources 配置)似乎可能是一个问题,当单元和集成测试愉快地运行时,/test/resources 配置似乎会加载 find 。

最佳答案

这个问题很晚才问,但是你弄清楚了吗?您的类路径上有哪个类型安全配置版本?

master 上的第 509 行看起来不太正确:https://github.com/typesafehub/config/blob/master/config/src/main/java/com/typesafe/config/impl/Parseable.java#L509

所以您可能有一个来源略有不同的版本。

版本 1.0.2 第 509 行看起来更有可能:https://github.com/typesafehub/config/blob/v1.0.2/config/src/main/java/com/typesafe/config/impl/Parseable.java#L509

在该行上,我猜类加载器很可能为空?它应该来自该跟踪中的这里:https://github.com/typesafehub/config/blob/v1.0.2/config/src/main/java/com/typesafe/config/impl/ConfigImpl.java#L365依次来自:https://github.com/typesafehub/config/blob/v1.0.2/config/src/main/java/com/typesafe/config/ConfigFactory.java#L380

因此,一种理论是线程在抛出异常的情况下没有设置上下文类加载器。我无法告诉您为什么在您的场景中会出现这种情况(如果是的话),但也许这是一个线索。

我认为类型安全配置无论如何都不应该“迟到”抛出 NPE,所以我创建了 https://github.com/typesafehub/config/issues/155来解决这个问题。然而,最终很可能是游戏中的问题和/或如何设置线程上下文类加载器为空并且没有向 ConfigFactory 方法提供其他类加载器。

这是假设 NPE 来自空类加载器,我认为这不一定是问题,但从堆栈跟踪来看它看起来似乎是合理的。

关于java - 类型安全配置 - 空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22300105/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com