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