Я пытаюсь выполнить экстернализацию конфигурации aop.xml, поэтому я удалил aop.xml
с META-INF
и сделал его доступным на сервере для ручной настройки администраторами sys.AspectJ: проблема с ClassLoading при попытке использовать внешний файл aop.xml
Когда я пытаюсь использовать внешний aop.xml с помощью
-Dorg.aspectj.weaver.loadtime.configuration="file:D:\Workspace\tomcat7\shared\lib\aop.xml"
я получаю java.lang.RuntimeException: Cannot register non aspect: aspectclass....
в основном потому, что А.Я. casses не загружены AppClassLoader
еще в то время. И в следующий раз, когда он попытается зарегистрировать аспекты из WebAppClassLoader
(после того, как все классы будут загружены), он отлично работает, но я все равно получаю исключения, записанные с первой попытки зарегистрировать его.
Исключение перехватывается и вошел в ClassLoaderWeavingAdaptor.java
линии 307.
, когда следующая строка называется: успеха = registerAspects (Weaver, погрузчик, определение);
исключение поймано и зарегистрировано.
try {
registerOptions(weaver, loader, definitions);
registerAspectExclude(weaver, loader, definitions);
registerAspectInclude(weaver, loader, definitions);
success = registerAspects(weaver, loader, definitions);
registerIncludeExclude(weaver, loader, definitions);
registerDump(weaver, loader, definitions);
} catch (Exception ex) {
trace.error("register definition failed", ex);
success = false;
warn("register definition failed", (ex instanceof AbortException) ? null : ex);
}
исключение выбрасывается excactly в следующей строке в BcelWeaver.java
if (type.isAspect()) {
......
} else {
// FIXME AV - better warning upon no such aspect from aop.xml
RuntimeException ex = new RuntimeException("Cannot register non aspect: " + type.getName() + " , " + aspectName);
if (trace.isTraceEnabled()) {
trace.exit("addLibraryAspect", ex);
}
throw ex;
}
Как я могу предотвратить ClassLoader от входа ошибку в консоль, когда аспекты еще не загружены. Я думал о комментировании строки, которая регистрирует исключение из исходного файла и перестраивает файл jar-файла aspectjweaver, но искала лучшее решение без изменения источника aspectj.
Пожалуйста, укажите, какие версии вы используете, и предоставить ссылку на 'ClassLoaderWeavingAdaptor.java' или рассмотреть возможность включения кода в вашем вопросе –
добавил фрагмент кода, который бросает исключение. – Sammy
(не слишком знакомы с AspectJ). Я не понимаю, какая разница в том, где находится файл конфигурации (в разделе «META-INF» или внешнее местоположение). Как это может изменить найденные классы или нет? Или вы получаете это сообщение, когда вы также не используете системное свойство? –