Dear Ferg,
I found a annoying bug describing below:
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