Ява.яз..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
Война строится через "войну граалей", и я всегда запускал" grails clean-all", прежде чем строить войну.
1 3

1 ответ:

Без модификатора public метод доступен только для пакета классов. См. http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html . это относится к вашему классу исключений, который не является общедоступным. Конструкторы и методы также должны быть общедоступными, если требуется глобальный доступ.