Ява.яз..IllegalAccessError: пытался получить доступ к классу xyz из класса zxy
У меня есть приложение grails, которое отлично работает, если я запускаю его для разработки через
grails run-app
На более ранней стадии я уже развернул это приложение на экземпляре tomcat на узле и не обнаружил никаких проблем. Однако вчера я начал готовить все к производству и устанавливал бродячую коробку, чтобы развернуть всю стопку. И вдруг произошло нечто совершенно странное:
У меня есть метод
def checkEmail(String email)
В моем RegisterController, который вызывает статический метод
static String normalize(final String email) throws InvalidEmailAddressException
Внутри класса groovy, который помещается под '/ src/groovy' в соответствующем пакете в моем проекте.
Всякий раз, когда вызывается метод checkEmail в контроллере, я вижу следующее исключение:
2014-04-07 20:19:20,588 [http-bio-8080-exec-6] ERROR errors.GrailsExceptionResolver  - IllegalAccessError occurred when processing request: [GET] /register/checkEmail
tried to access class com.getgrape.core.exception.InvalidEmailAddressException from class com.getgrape.authority.RegisterController. Stacktrace follows:
org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Executing action [checkEmail] of controller [com.getgrape.authority.RegisterController]  caused exception: Runtime error executing action
    at grails.plugin.springsecurity.web.filter.GrailsAnonymousAuthenticationFilter.doFilter(GrailsAnonymousAuthenticationFilter.java:53)
    at grails.plugin.springsecurity.web.authentication.RequestHolderAuthenticationFilter.doFilter(RequestHolderAuthenticationFilter.java:49)
    at grails.plugin.springsecurity.web.authentication.logout.MutableLogoutFilter.doFilter(MutableLogoutFilter.java:82)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:744)
Caused by: org.codehaus.groovy.grails.web.servlet.mvc.exceptions.ControllerExecutionException: Runtime error executing action
    ... 6 more
Caused by: java.lang.reflect.InvocationTargetException
    ... 6 more
Caused by: java.lang.IllegalAccessError: tried to access class com.getgrape.core.exception.InvalidEmailAddressException from class com.getgrape.authority.RegisterController
    at com.getgrape.authority.RegisterController.checkEmail(RegisterController.groovy:128)
    ... 6 more
Исключение InvalidEmailAddressException выглядит следующим образом и помещается под '/ src / java' в соответствующем пакете в моем проекте:
package com.getgrape.core.exception;
class InvalidEmailAddressException extends Exception {
    private static final long serialVersionUID = 1L;
    InvalidEmailAddressException() {
        super();
    }
    InvalidEmailAddressException(String message) {
        super(message);
    }
}
- я проверил возможное дублирующее определение InvalidEmailAddressException, но не смог ничего найти.
- я попытался переименовать исключение в случае, если я что-то пропустил или это может конфликтовать с другой библиотекой, но это не помогло любой. Я проверил все инструкции импорта, и они тоже выглядят хорошо.
- Если я полностью удаляю вызов метода normalize, ошибка исчезает. Итак, это должно быть что-то о том методе, который бросает исключение.
- я пытался ... удалите статический модификатор из метода и вызовите его через экземпляр объекта, но это не имеет значения.
- я проверил файл war, чтобы увидеть, содержит ли он исключение InvalidEmailAddressException и находится ли он там, где должен быть. Я попытался развернуть это приложение на только что загруженном tomcat, но проблема не исчезла. Итак, это не должно быть конфигурацией проблема.
- ошибок компилятора нет.
Есть ли у кого-нибудь идеи, что может произойти дальше?
java version is: oracle jdk 1.7.0_51
grails: 2.3.7
running on ubuntu 12.04
1 ответ:
Без модификатора
publicметод доступен только для пакета классов. См. http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html . это относится к вашему классу исключений, который не является общедоступным. Конструкторы и методы также должны быть общедоступными, если требуется глобальный доступ.