在Glassfish 3.1上使用自定义处理程序获取NoClassDefFoundError

时间:2012-10-29 22:35:06

标签: classloader glassfish-3 urlclassloader

问题

  1. 我们的网络应用会创建一个java.net.URL,将URLStreamHandler的自定义实现传递给构造函数。
  2. 在该网址上,我们致电url.openConnection()
  3. java.net.URL代码在我们的处理程序上调用openConnection()
  4. 此时,我们为处理程序使用的类获取NoClassDefFoundError
  5. Glassfish 3.1会发生这种情况,但Tomcat,WebLogic和JBoss不会发生这种情况。 (此外,它曾用于旧版本的Glassfish。)

    我尝试了什么

    我尝试添加glassfish-web.xml告诉Glassfish首先从Web应用程序加载类(如预期的那样),但这并没有解决问题。

    <glassfish-web-app>
        <class-loader delegate="false"/>
    </glassfish-web-app>
    

    我该如何解决这个问题,为什么会这样?

2 个答案:

答案 0 :(得分:2)

GF委托模型总是将java。*和javax。*委托给类加载器链。

答案 1 :(得分:0)

NoClassDefFoundError可能是由JVM找不到类引起的,也可能是happened earlier in a static initializer的失败引起的。 NoClassDefFoundError的消息是Could not initialize class org.orbeon.oxf.resources.handler.HTTPURLConnection,并且在该类的静态初始化程序中确实发生了错误。 Solving该错误修复了NoClassDefFoundError