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) 


Reply via email to