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