代码之家  ›  专栏  ›  技术社区  ›  bmargulies

当thread.currentThread().getContextClassLoader()返回空值时,发生了什么?

  •  4
  • bmargulies  · 技术社区  · 14 年前

    从一个JAR文件开始,该文件在/META-INF中包含一个JAX-WS SPI文本文件,然后是它指向的类。把它放到类路径中。将当前线程的ContextClassLoader设置为空。

    打电话给 Service 从JDK1.6中的JAX-WSAPI类,并开始单步执行。在没有上下文类加载器的情况下,此代码将调用 Class 找到东西。

    它将成功找到SPI文件。但它找不到它命名的.class。

    如果您真的想亲自尝试这个方法,请获取ApacheCXF 2.2.10,将其放在类路径上,并将上下文类加载器设为空。

    这不是一个毫无意义的受虐行为:事实证明,当Open Office调用Java扩展(Uno)时,它会离开上下文类加载器。 null . 这需要一些重要的 直肠学 考古学来解决这个问题。这让我想知道,是否有一个JDK错误解释了不一致的结果,或者一些我不理解的特定行为?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Stephen C    14 年前

    对于这类事情,已经出现了各种各样的错误;例如扫描 this query . 一般的Sun响应是,这些功能不是bug,不会被修复;例如 http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4155645 .

    底线是 getContextClassLoader 可以 返回 null .