Я использую cglib для улучшения HashMap, чтобы я мог перехватывать вызовы методов в HashMap.
Он отлично работает на моем локальном компьютере, и когда я запускаю веб-приложение Google в Eclipse.Однако после развертывания на сервере я получаю исключение "java.lang.NoClassDefFoundError: [Ljava / util / HashMap $ Entry;"
Строка кода, которая выдает исключение:
Enhancer.create(HashMap.class, new SomeInterceptor());
Я использую последний плагин для затмения (3.7).Я использую cglib версии 2.2 (cglib-nodep-2.2.jar)
РЕДАКТИРОВАТЬ: Это интересно: если я создаю класс, который расширяет HashMap, то я могу улучшить этот класс без каких-либо проблем.Например, работает следующий код:
public class MyHashMap extends HashMap {
}
Enhancer.create(MyHashMap.class, new SomeInterceptor());
И Enhancer работает для TreeMap, HashSet и TreeSet: ENDEDIT
Трассировка стека:
java.lang.NoClassDefFoundError: [Ljava/util/HashMap$Entry;
at com.google.appengine.runtime.Request.process-02796318ce7d3a7b(Request.java)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Class.java:2444)
at java.lang.Class.getDeclaredMethod(Class.java:229)
at net.sf.cglib.proxy.Enhancer.getCallbacksSetter(Enhancer.java:630)
at net.sf.cglib.proxy.Enhancer.setCallbacksHelper(Enhancer.java:618)
at net.sf.cglib.proxy.Enhancer.setThreadCallbacks(Enhancer.java:612)
at net.sf.cglib.proxy.Enhancer.createUsingReflection(Enhancer.java:634)
at net.sf.cglib.proxy.Enhancer.firstInstance(Enhancer.java:538)
at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:225)
at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:663)
at com.enhancetest.EnhanceTestServlet.doGet(EnhanceTestServlet.java:30)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:449)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:455)
at com.google.tracing.TraceContext.runInContext(TraceContext.java:695)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:333)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:325)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:453)
at java.lang.Thread.run(Thread.java:679)
Причинаавтор: java.lang.ClassNotFoundException: java.util.HashMap $ Entry ... еще 35