2012-02-20 3 views
4

Я разрабатывал простой весенний mvc-приложение с одним контроллером. когда я развертываю военный файл, я получаю следующее исключение.Весна 3.1 проблема веб-приложений

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

Можете ли вы проверить все свои весенние JAR-версии с одинаковой версией? –

+0

Да, все мои весенние баночки - это версия 3.1.0. – user509755

+0

Еще одна вещь, которую я заметил, - если изменить весеннюю версию с 3.1.0 до 3.0.7, все будет хорошо. Так что это имеет какое-то отношение к последней версии весны. – user509755

ответ

0

Это звучит как проблема с загрузчиком. Я сталкивался с этим раньше, когда сталкивался с конфликтами, возникающими из-за загрузки MyEclipse разных файлов jar, а не тех, которые, как я думал, были загружены приложением!

Один из способов проверить - запустить Process Explorer и посмотреть файлы jar, которые загружаются в память и откуда они возникли.

Чтобы получить более конкретную с ошибкой вы получаете, я цитирую из JVM 7 specification, который перечисляет, что точную ошибку в 5.4.3.1 .:

5.3. Создание и загрузка

В процессе выполнения, класс или интерфейс определяется не только его именем, но и парой: его двоичное имя (§4.2.1) и его определяющий загрузчик классов. Каждый такой класс или интерфейс относится к одному пакету времени выполнения. Пакет времени выполнения класса или интерфейса определяется именем пакета и определением загрузчика классов класса или интерфейса.

5.4.3.1. Класс и разрешение Интерфейс

Чтобы устранить неразрешенный символическую ссылку от D до класса или интерфейса C обозначим через N, то выполняются следующие шаги:

Определяющий класс погрузчик D используется для создания класса или интерфейс, обозначенный N. Этот класс или интерфейс - C. Детали процесса приведены в п. 5.3.

Любое исключение, которое может быть вызвано в результате отказа от создания класса или интерфейса, может быть выбрано из-за отказа разрешения класса и интерфейса.

Если C - класс массива, а его тип элемента является ссылочным типом, то символическая ссылка на класс или интерфейс, представляющие тип элемента, разрешается путем рекурсивного вызова алгоритма из п. 5.4.3.1.

Наконец, разрешены разрешения доступа к C: Если C не доступно (§5.4.4) до D, класс или разрешение интерфейса бросает IllegalAccessError.

Это условие может возникнуть, например, если C является классом, который изначально был объявлен публичным, но был изменен на непубличный после компиляции D.

Если шаги 1 и 2 преуспевают, но шаг 3 выходит из строя, C все еще действителен и применим. Тем не менее разрешение выходит из строя, и D запрещается к доступу C.

Чтобы все это произошло, это похоже на то, что банка из другого пакета, то есть из другого загрузчика классов.

Смежные вопросы