Проблема с веб-приложением Spring 3.1 - PullRequest
4 голосов
/ 20 февраля 2012

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

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)

1 Ответ

0 голосов
/ 31 января 2015

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

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

Чтобы получить более конкретную информацию об ошибке, которую вы получаете, я приведу цитату из спецификации JVM 7 , в которой указана точная ошибка в 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.

Подводя итог, звучит так, как будто баночка из другой упаковки, то есть из другого загрузчика классов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...