1

問題

  1. 私たちの Web アプリは、コンストラクターjava.net.URLに a のカスタム実装を渡すことを作成しURLStreamHandlerます。
  2. その URL で、 を呼び出しますurl.openConnection()
  3. java.net.URLコードはハンドラーを呼び出しますopenConnection()
  4. この時点でNoClassDefFoundError、ハンドラーが使用するクラスの を取得します。

これは Glassfish 3.1 で発生しますが、Tomcat、WebLogic、および JBoss では発生しません。(また、Glassfish の古いバージョンでも動作していました。)

私が試したこと

glassfish-web.xmlGlassfish に最初に Web アプリからクラスをロードするように (予想どおり) を追加しようとしましたが、これで問題は解決しません。

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

この問題を解決するにはどうすればよいですか? また、なぜこの問題が発生するのですか?

4

2 に答える 2

2

GF 委譲モデルは、常に java.* および javax.* をクラスローダー チェーンに委譲します。

于 2012-11-08T21:51:04.043 に答える
0

は、JVM がクラスを見つけられないことによって発生する可能性がありますが、以前に静的イニシャライザーで発生NoClassDefFoundErrorした失敗によって発生することもあります。のメッセージは で、そのクラスの静的初期化子で以前に発生したエラーが実際にありました。そのエラーを解決すると、 .NoClassDefFoundErrorCould not initialize class org.orbeon.oxf.resources.handler.HTTPURLConnectionNoClassDefFoundError

于 2012-11-10T02:08:48.183 に答える