【发布时间】:2012-08-07 20:00:26
【问题描述】:
我正在创建一个简单的 REST 服务,它只拥有 REST 资源(带有 Jersey 注释的 java 类)。此 REST 资源需要多个 Java 对象才能工作。这些 Java 对象非常大,只有几百 MB,因此将它们加载到 RAM 中很慢。因此,我尝试将这些对象添加为该 REST 类的 static 成员。但是,当我向 REST 服务发送请求时,它总是会抛出 NullPonterException。谁能解释为什么在加载 REST 资源(类)之前没有实例化这些静态成员?还是其他一些原因?
提前谢谢你们。
注意:这些静态成员只是一些 Maps 和 Lists 对象,由依赖 jar 中的类创建。
编辑: 假设下面的 InfoConstructor 是一个负责创建这些静态对象的实用程序类。
我的 REST 资源类的代码如下:
@Path("test")
public class TestResource {
public static Map<String, Integer> vocMap = InfoConstructor.getVocMap();
@Get
@Produce(Media.TEXT_HTML)
public String testGet() {
return vocMap.hashCode();
}
}
【问题讨论】:
-
一些代码会有所帮助。您如何以及何时实例化这些对象?
-
那些
InfoConstructor方法也是静态的吗?getVocMap是否有可能返回null? Jersey 应该可以毫无问题地实例化您的静态资源。要验证您是否可以将vocMap设置为new HashMap<String, Integer>()并查看在进行 REST 调用时是否仍然获得相同的 NPE... -
@user463324 是的,InfoConstructor 中的那些方法是静态的。没错,泽西岛初始化静态资源没有任何困难。问题是那些静态方法无法正确找到构建地图所需的文件。所以我的问题变成了一个 jar 中的类如何在同一个 jar 中找到一些资源(例如,txt 文件,在同一个 jar 中),当 jar 是战争的依赖项时。
-
这些资源在你的类路径中吗?看看stackoverflow.com/questions/1900154/…
-
@user463324 感谢您的参考帖子。当我想从 jar 中的 txt 文件中获取 InputStream 时,它可以工作。但是,我无法通过 getResource 方法使用获得的 URL 创建一个 File 对象。它抛出“URI 不是分层的”异常!你能给我一些提示吗?
标签: java rest nullpointerexception jersey