On Jun 17, 2009, at 5:40 AM, wesley wrote: > Dear Ferg, > > I found a annoying bug describing below:
Thanks. I've filed a bug report. It's probably just some counting we got wrong in the bytecode enhancement. -- Scott > > > Environment: > Resin 4.0.0 > JDK: Sun JDK 1.6.0_14 x64 or JRockit 1.6.0_11 x64 > > ================ test.TestServlet =============================== > package test; > > import javax.servlet.*; > import javax.servlet.http.HttpServlet; > import javax.servlet.http.HttpServletRequest; > import javax.servlet.http.HttpServletResponse; > import javax.inject.Current; > import java.io.IOException; > > public class TestServlet extends HttpServlet { > @Current > TestBean bean; > > @Override > protected void doGet(HttpServletRequest req, HttpServletResponse res) > throws ServletException, IOException { > res.getWriter().write("Hello world"); > } > } > > ================ test.TestBean =============================== > package test; > > import javax.context.RequestScoped; > > @RequestScoped > public class TestBean { > > public String evilMethod(int a, int b, String c, int d) { > return "I'm evil"; > } > > public String evilMethod2(int a, int b, int d, String c) { > return "I'm evil too"; > } > > public String goodMethod(int a, int b, String c) { > return "I'm good"; > } > } > > ================================================= > When running this servlet at http://localhost:8080/TestServlet > (mapped to /TestServlet in web.xml) > > Resin generate exceptions: > > error stack 1: > > javax.servlet.ServletException: java.lang.VerifyError: (class: test/ > TestBean$ScopeProxy, method: evilMethod signature: (IILjava/lang/ > String;I)Ljava/lang/String;) Register 0 contains wrong type > at > com > .caucho > .server > .dispatch.ServletConfigImpl.createServlet(ServletConfigImpl.java:848) > at > com > .caucho > .server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java: > 95) > at > org > .apache > .struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java: > 452) > at > com > .caucho > .server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87) > at > com > .caucho > .server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87) > at > com > .caucho > .server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:185) > at > com > .caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java: > 201) > at > com > .caucho > .server.dispatch.ServletInvocation.service(ServletInvocation.java:264) > at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java: > 275) > at > com > .caucho.server.port.TcpConnection.handleRequests(TcpConnection.java: > 644) > at com.caucho.server.port.TcpConnection > $AcceptTask.doAccept(TcpConnection.java:1311) > at com.caucho.server.port.TcpConnection > $AcceptTask.run(TcpConnection.java:1252) > at com.caucho.util.ThreadPool$PoolThread.runTasks(ThreadPool.java:866) > at com.caucho.util.ThreadPool$PoolThread.run(ThreadPool.java:779) > Caused by: java.lang.VerifyError: (class: test/TestBean$ScopeProxy, > method: evilMethod signature: (IILjava/lang/String;I)Ljava/lang/ > String;) Register 0 contains wrong type > at java.lang.Class.getDeclaredConstructors0(Native Method) > at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) > at java.lang.Class.getConstructors(Class.java:1459) > at > com > .caucho.config.bytecode.ScopeAdapter.generateProxy(ScopeAdapter.java: > 163) > at com.caucho.config.bytecode.ScopeAdapter.<init>(ScopeAdapter.java: > 59) > at com.caucho.config.bytecode.ScopeAdapter.create(ScopeAdapter.java: > 64) > at > com.caucho.config.inject.SimpleBean.getScopeAdapter(SimpleBean.java: > 450) > at > com > .caucho > .config.inject.InjectManager.getInstanceToInject(InjectManager.java: > 1454) > at > com > .caucho > .config > .program.FieldComponentProgram.inject(FieldComponentProgram.java:91) > at > com > .caucho.config.inject.ComponentImpl.createNoInit(ComponentImpl.java: > 316) > at > com > .caucho > .server > .dispatch.ServletConfigImpl.createServletImpl(ServletConfigImpl.java: > 895) > at > com > .caucho > .server > .dispatch.ServletConfigImpl.createServlet(ServletConfigImpl.java:810) > ... 14 more > > > error stack 2 (with evilMethod commented): > > javax.servlet.ServletException: java.lang.VerifyError: (class: test/ > TestBean$ScopeProxy, method: evilMethod2 signature: (IIILjava/lang/ > String;)Ljava/lang/String;) Expecting to find object/array on stack > at > com > .caucho > .server > .dispatch.ServletConfigImpl.createServlet(ServletConfigImpl.java:848) > at > com > .caucho > .server.dispatch.ServletFilterChain.doFilter(ServletFilterChain.java: > 95) > at > org > .apache > .struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java: > 452) > at > com > .caucho > .server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87) > at > com > .caucho > .server.dispatch.FilterFilterChain.doFilter(FilterFilterChain.java:87) > at > com > .caucho > .server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:185) > at > com > .caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java: > 201) > at > com > .caucho > .server.dispatch.ServletInvocation.service(ServletInvocation.java:264) > at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java: > 275) > at > com > .caucho.server.port.TcpConnection.handleRequests(TcpConnection.java: > 644) > at com.caucho.server.port.TcpConnection > $AcceptTask.doAccept(TcpConnection.java:1311) > at com.caucho.server.port.TcpConnection > $AcceptTask.run(TcpConnection.java:1252) > at com.caucho.util.ThreadPool$PoolThread.runTasks(ThreadPool.java:866) > at com.caucho.util.ThreadPool$PoolThread.run(ThreadPool.java:779) > Caused by: java.lang.VerifyError: (class: test/TestBean$ScopeProxy, > method: evilMethod2 signature: (IIILjava/lang/String;)Ljava/lang/ > String;) Expecting to find object/array on stack > at java.lang.Class.getDeclaredConstructors0(Native Method) > at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) > at java.lang.Class.getConstructors(Class.java:1459) > at > com > .caucho.config.bytecode.ScopeAdapter.generateProxy(ScopeAdapter.java: > 163) > at com.caucho.config.bytecode.ScopeAdapter.<init>(ScopeAdapter.java: > 59) > at com.caucho.config.bytecode.ScopeAdapter.create(ScopeAdapter.java: > 64) > at > com.caucho.config.inject.SimpleBean.getScopeAdapter(SimpleBean.java: > 450) > at > com > .caucho > .config.inject.InjectManager.getInstanceToInject(InjectManager.java: > 1454) > at > com > .caucho > .config > .program.FieldComponentProgram.inject(FieldComponentProgram.java:91) > at > com > .caucho.config.inject.ComponentImpl.createNoInit(ComponentImpl.java: > 316) > at > com > .caucho > .server > .dispatch.ServletConfigImpl.createServletImpl(ServletConfigImpl.java: > 895) > at > com > .caucho > .server > .dispatch.ServletConfigImpl.createServlet(ServletConfigImpl.java:810) > ... 14 more > > > servlet is good when evilMethod and evilMethod2 were both commented. > > I believe this is due to a bug in com.caucho.bytecode.JavaClass. > > -Wesley > > > _______________________________________________ > resin-interest mailing list > resin-interest@caucho.com > http://maillist.caucho.com/mailman/listinfo/resin-interest _______________________________________________ resin-interest mailing list resin-interest@caucho.com http://maillist.caucho.com/mailman/listinfo/resin-interest