Встроенный Tomcat с Spring-бросками IllegalAccessError: <proxy>не может получить доступ к своему суперинтерфейсу <class> - PullRequest
0 голосов
/ 25 сентября 2018

У меня есть приложение, которое прекрасно работает, как война в Tomcat.Теперь я хотел бы запустить его из Embedded Tomcat, используя такой код:

    public static void main(String[] args) throws Exception {
    Tomcat tomcat = new Tomcat();
    tomcat.enableNaming();

    StandardContext ctx =
            (StandardContext) tomcat.addWebapp("/myapp", new File("src/main/webapp/").getAbsolutePath());

    StandardJarScanner jarScanner = (StandardJarScanner) ctx.getJarScanner();
    jarScanner.setScanClassPath(false);
    jarScanner.setScanAllDirectories(false);
    jarScanner.setScanBootstrapClassPath(false);

    tomcat.start();
    tomcat.getServer().await();
}

Швы приложения должны запускаться, но после загрузки нескольких Spring Services оно получает такое исключение

Caused by: java.lang.IllegalAccessError: class de.abc.service.intern.$Proxy213 cannot access its superinterface de.abc.service.intern.PageMetadataStorage
at java.lang.reflect.Proxy.defineClass0(Native Method)
at java.lang.reflect.Proxy.access$300(Proxy.java:228)
at java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:642)
at java.lang.reflect.Proxy$ProxyClassFactory.apply(Proxy.java:557)
at java.lang.reflect.WeakCache$Factory.get(WeakCache.java:230)
at java.lang.reflect.WeakCache.get(WeakCache.java:127)
at java.lang.reflect.Proxy.getProxyClass0(Proxy.java:419)
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:719)
at org.springframework.aop.framework.JdkDynamicAopProxy.getProxy(JdkDynamicAopProxy.java:122)
at org.springframework.aop.framework.ProxyFactory.getProxy(ProxyFactory.java:109)

Похоже$ Proxy213 загружен загрузчиком классов начальной загрузки и не может получить доступ к классу из веб-приложения.А проблемный интерфейс защищен пакетами.

Может кто-нибудь объяснить, что здесь происходит?Могу ли я решить это как-нибудь?

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