2012-02-20 21 views
4

私は1つのコントローラで単純なスプリングmvcアプリケーションを開発していました。私がwarファイルをデプロイするとき、私は例外を受けています。Spring 3.1 Webアプリケーションの問題

java.lang.IllegalAccessError: tried to access class org.springframework.core.convert.support.StringToBooleanConverter from class org.springframework.core.convert.support.DefaultConversionService 
    at org.springframework.core.convert.support.DefaultConversionService.addScalarConverters(DefaultConversionService.java:61) 
    at org.springframework.core.convert.support.DefaultConversionService.addDefaultConverters(DefaultConversionService.java:53) 
    at org.springframework.core.convert.support.DefaultConversionService.<init>(DefaultConversionService.java:42) 
    at org.springframework.core.env.AbstractPropertyResolver.<init>(AbstractPropertyResolver.java:44) 
    at org.springframework.core.env.PropertySourcesPropertyResolver.<init>(PropertySourcesPropertyResolver.java:42) 
    at org.springframework.core.env.AbstractEnvironment.<init>(AbstractEnvironment.java:95) 
    at org.springframework.core.env.StandardEnvironment.<init>(StandardEnvironment.java:54) 
    at org.springframework.web.context.support.StandardServletEnvironment.<init>(StandardServletEnvironment.java:43) 
    at org.springframework.web.servlet.HttpServletBean.<init>(HttpServletBean.java:90) 
    at org.springframework.web.servlet.FrameworkServlet.<init>(FrameworkServlet.java:211) 
    at org.springframework.web.servlet.DispatcherServlet.<init>(DispatcherServlet.java:303) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
+0

すべてのSpring JARが同じバージョンであることを再度確認できますか? –

+0

はい、私の春の瓶はすべてバージョン3.1.0です。 – user509755

+0

私が気づいたもう一つの事は、春のバージョンを3.1.0から3.0.7に変更すると、すべて正常に動作することです。だから、春の最新バージョンと関係があります。 – user509755

答えて

0

これはクラスローダーの問題のようです。私はこれまでに、MyEclipseがアプリケーションによってロードされたと思われるものの代わりに異なるjarファイルをロードすることに起因する競合に遭遇したときに実行しました!

チェックする方法の1つは、Process Explorerを実行して、メモリにロードされたjarファイルとその発信元を確認することです。

あなたが取得しているエラーをより具体的な取得するには、私は5.4.3.1:

5.3にその正確なエラーを示していますJVM 7 specificationから引用しています。

実行時に、クラスまたはインタフェースは、その名前だけではなく、そのバイナリ名(§4.2.1)とその定義クラスローダのペアによって決定されます。このような各クラスまたはインタフェースは、1つの実行時パッケージに属します。 クラスまたはインタフェースの実行時パッケージは、パッケージ名とクラスまたはインタフェースのクラスローダの定義によって決定されます。

5.4.3.1。

がNで示されるクラスまたはインタフェースCにDからの未解決のシンボリック参照を解決するクラスおよびインタフェース解像度は、以下のステップが実行される。

Dの定義クラスローダは、クラスを作成するために使用される

又はこのクラスまたはインタフェースは、Cである。プロセスの詳細は、5.3節に記載されている。

クラスまたはインターフェイスの作成が失敗したためにスローされる例外は、クラスおよびインターフェイスの解決が失敗したためにスローされます。

Cが配列クラスであり、その要素型が参照型である場合、要素型を表すクラスまたはインタフェースへのシンボリック参照は、5.4.3.1項のアルゴリズムを再帰的に呼び出すことによって解決されます。

最後に、Cへのアクセス権がチェックされ:Cは(§5.4.4)Dにアクセスできない場合 は、クラスまたはインタフェースの解像度はないIllegalAccessErrorをスロー

この状態は、たとえば、Cが元々公開と宣言されていたがDがコンパイルされた後に非公開に変更されたクラスである場合に発生する可能性があります。

手順1と手順2が成功したにもかかわらず手順3が失敗した場合でも、Cは有効で有効です。それにもかかわらず、解決は失敗し、DはCへのアクセスが禁止されています。

合計すると、別のクラスローダーからの別のパッケージからのものです。

関連する問題