Re: Problem integrating with Cactus

2005-02-26 Thread anaema_ml
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 

Re: Problem integrating with Cactus

2005-02-26 Thread anaema_ml
On 25 Feb 2005 at 10:33, Nathan Bubna wrote:

 
 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.
 

I've followed your advice and just added servlet.init(this.config); in my 
setupServletAndRun method and voila... Everything is right !

Thanks 



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]