5

ブラウザで実行され、Javascriptから呼び出されるアプレットがあります。PortalLauncherParamSplitterの2つのクラスがあり、これらはデフォルトのパッケージに含まれています。JavascriptはPortalLauncherのメソッドを呼び出し、PortalLauncherはParamSplitterの関数を呼び出します。アプレットは署名されたjarファイルにあります。

これはほとんどの場合機能します。ただし、一部のユーザーは時々問題を抱えています。1日のある時点で(つまり、最初のアクセスではない)、次の例外がスローされます。

java.lang.SecurityException: class "ParamSplitter"'s signer information does not
    match signer information of other classes in the same package
    at java.lang.ClassLoader.checkCerts(Unknown Source)
    at java.lang.ClassLoader.preDefineClass(Unknown Source)
    at java.lang.ClassLoader.defineClass(Unknown Source)
    at java.security.SecureClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.defineClass(Unknown Source)
    at java.net.URLClassLoader.access$000(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at sun.applet.AppletClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.applet.AppletClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at PortalLauncher.openFile(PortalLauncher.java:313)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.JSInvoke.invoke(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.plugin.javascript.JSClassLoader.invoke(Unknown Source)
    at sun.plugin.com.MethodDispatcher.invoke(Unknown Source)
    at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
    at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.com.DispatchImpl.invoke(Unknown Source)
java.lang.Exception: java.lang.SecurityException: class "ParamSplitter"'s signer
    information does not match signer information of other classes in the same package
    at sun.plugin.com.DispatchImpl.invokeImpl(Unknown Source)
    at sun.plugin.com.DispatchImpl$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at sun.plugin.com.DispatchImpl.invoke(Unknown Source)

誰かがこの例外の意味とそれを引き起こしている可能性のあるものに光を当てることができますか?このアプレットを使用しているユーザーは約800人ですが、影響を受けるのはほんの一握りであり、問​​題が発生するのはたまにしかありません。

4

1 に答える 1

5

これは、同じJVM内に、別の方法で署名された(または署名されていない可能性がある)他のjarからロードされた他のクラスが、デフォルトのパッケージにもあることを意味します。

私があなたの質問を正しく解釈すると、アプレット自体には1つのjarしかありません。したがって、それはどこか別の場所から来たjarである必要があります。一部のユーザーだけが持っています。私が最初に考えたのは、おそらく別のタブで実行されているアプレットのjarファイルです(同じjvmインスタンスを使用できます)。ただし、他のアプレットは別のクラスローダーを使用する必要があるため、そのように衝突しないようにする必要があります。多くの場合、jvmのブートクラスパスにjarがあり、ルートパッケージにもクラスがあります。

いずれにせよ、解決策/回避策は、単にデフォルトのパッケージを使用するのではなく、独自のパッケージを使用することです。そうすれば、他のjarファイルとの衝突を回避できます。

于 2009-08-27T09:23:55.850 に答える