On 25 Feb 2005 at 10:33, Nathan Bubna wrote: > i don't really know anything about Cactus, but this code snippet > hardly seems representative of a sensible way to test a servlet. > surely they must have a better setup than this? or am i just getting > the wrong impression because you've posted so little code? >
It depends on the test you want to do. In my case, before doing any real test I'm trying to get it running at all. But a simple test case is not much longer (see http://jakarta.apache.org/cactus/integration/howto_tomcat.html) For now the code I'm using is : public class CactusTestsServlet extends ServletTestCase { public CactusTestsServlet(String theName) { super(theName); } public static Test suite() { return new TestSuite(CactusTestsServlet.class); } public void setupCommonParameters(WebRequest webRequest) { webRequest.addParameter("module","blog"); } public void setupServletAndRun() throws Exception { AnaemServlet servlet = new AnaemServlet(); VelocityContext context=new VelocityContext(); Template result=servlet.handleRequest(request, response, context); } public void beginPostAddMessage(WebRequest webRequest) { setupCommonParameters(webRequest); } public void testPostAddMessage() throws Exception { setupServletAndRun(); } public void endPostAddMessage(WebResponse webResponse) throws Exception { System.out.println(webResponse.getText()); } } > anyway, the VelocityViewServlet requires a good bit more than just the > handleRequest() method to run. first it will need to be init'ed > (going thru init(), initToolbox(), initVelocity() and > loadConfiguration()), then it calls createContext() to get the > context, sets the content type, gets the Template from handleRequest() > and then it finally does the merge. unless you are making sure it > goes through all (or most) of those steps, i wouldn't expect it to > work. > It did. 2 or 3 times I did get my template generated under cactus. But most of the time it didn't work. Of course I can't rely on the fact that it did work 2 or 3 times... I should try to mimic a VelocityViewServlet initialisation sequence, from API source code... But, without logging it's difficult to go further... > i'm also fairly confused by all that was in your first post (probably > at least in part due to ignorance of Cactus). but it seems to me that > a NPE could be caused by any number of things. without a stack trace > or a better idea of what your code is doing, i'm not sure we'll be > able to help you much. > Sure, here is the trace. java.lang.NullPointerException at org.apache.velocity.runtime.RuntimeInstance.getTemplate(RuntimeInstance.java:831) at org.apache.velocity.runtime.RuntimeSingleton.getTemplate(RuntimeSingleton.java:30 3) at org.apache.velocity.app.Velocity.mergeTemplate(Velocity.java:439) at app.WebApp.produce(WebApp.java:165) at app.WebApp.execute(WebApp.java:286) at AnaemServlet.handleRequest(AnaemServlet.java:115) at CactusTestsServlet.setupServletAndRun(CactusTestsServlet.java:34) at CactusTestsServlet.testPostAddMessage(CactusTestsServlet.java:49) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at org.apache.cactus.internal.AbstractCactusTestCase.runBareServer(AbstractCactusTe stCase.java:153) at org.apache.cactus.internal.server.AbstractWebTestCaller.doTest(AbstractWebTestCa ller.java:119) at org.apache.cactus.internal.server.AbstractWebTestController.handleRequest_around Body0(AbstractWebTestController.java:93) at org.apache.cactus.internal.server.AbstractWebTestController.handleRequest_around Body1$advice(AbstractWebTestController.java:224) at org.apache.cactus.internal.server.AbstractWebTestController.handleRequest(Abstract WebTestController.java) at org.apache.cactus.server.ServletTestRedirector.doPost_aroundBody2(ServletTestRed irector.java:101) at org.apache.cactus.server.ServletTestRedirector.doPost_aroundBody3$advice(Servlet TestRedirector.java:224) at org.apache.cactus.server.ServletTestRedirector.doPost(ServletTestRedirector.java) at org.apache.cactus.server.ServletTestRedirector.doGet_aroundBody0(ServletTestRedi rector.java:72) at org.apache.cactus.server.ServletTestRedirector.doGet_aroundBody1$advice(ServletT estRedirector.java:224) at org.apache.cactus.server.ServletTestRedirector.doGet(ServletTestRedirector.java) at javax.servlet.http.HttpServlet.service(HttpServlet.java:689) at javax.servlet.http.HttpServlet.service(HttpServlet.java:802) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain. java:237) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:15 7) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 214) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.ja va:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve. java:198) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:15 2) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.ja va:104) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:4 62) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.ja va:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.ja va:104) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:118) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.ja va:102) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109 ) at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.ja va:104) at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:520) at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:929) at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:160) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:799) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnecti on(Http11Protocol.java:705) at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:577) at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683 ) at java.lang.Thread.run(Unknown Source)