4

I have an application that works just fine as war in tomcat. Now I would like to start it from Embedded Tomcat using such code:

    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();
}

Application seams to be starting but after loading of few Spring Services it gets such Exception

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)

Looks like $Proxy213 got loaded by bootstrap class loader and cannot access class from web app. And problematic interface is package protected.

Could some one explain what is happening here? Could I solve it somehow?

Maciej Miklas
  • 3,305
  • 4
  • 27
  • 52

0 Answers0