【问题标题】:How does jersey create static members in one resourcejersey 如何在一个资源中创建静态成员
【发布时间】: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&lt;String, Integer&gt;() 并查看在进行 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


【解决方案1】:

根据 cmets,听起来静态资源已正确初始化。更多的是解决类路径资源的问题。看看Classpath resource within jar

【讨论】:

    猜你喜欢
    • 2012-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多