jakarta-cactus-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Nicholas Lesiecki" <n...@eblox.com>
Subject RE: Dispatch problem
Date Fri, 08 Feb 2002 21:04:48 GMT
Kim, very good issues, clearly described. I don't have the answers right
now, but we'll take a look at them and see if we can get you some info.
First, what version of Cactus are you using? If you are using the 1.2
release, can you try using the 1.3  nightly build and seeing if any of the
issues clear up?

Thanks,

Nick

-----Original Message-----
From: kim [mailto:kim]On Behalf Of Kim Madsen
Sent: Friday, February 08, 2002 7:47 AM
To: cactus-user@jakarta.apache.org
Subject: Dispatch problem


I have a few problems with Cactus, which I have been unable to find any
information about. I got several Cactus test cases which works fine, but
the below cases does not work for me.

I am using JBoss with Tomcat 3.2.3.


1) Problem with dispatching from Servlet to JSP.

In my Servlet I redirect/dispatch to a JSP template. This works fine,
when running the Servlet without Cactus. But when running my Cactus test
case I get below error every time. This is the code that fails.


        ServletContext servletContext  = getServletContext();

	javax.servlet.RequestDispatcher requestDispatcher  =
	    servletContext.getNamedDispatcher( template );
	requestDispatcher.forward( req, res );  <------- This goes wrong.

I have initialized the servlet context first in the Cactus test case:
	servlet.init(config);

This is the error I get:

java.lang.NullPointerException
at
org.apache.cactus.server.RequestDispatcherWrapper.forward(RequestDispatcherW
rapper.java:98)
at com.inceptor.rt.Servlet.dispatchError(Servlet.java:164)
at com.inceptor.rt.Servlet.unexpectedErrorHandling(Servlet.java:132)
at com.inceptor.rt.Servlet.processRequest(Servlet.java:94)
at com.inceptor.rt.Servlet.doGet(Servlet.java:48)
at
com.inceptor.cactus.TestServletChannelMatch.testChannelMatchLongestMatchWins
(TestServletChannelMatch.java:82)
at java.lang.reflect.Method.invoke(Native Method)
at
org.apache.cactus.AbstractTestCase.runServerTest(AbstractTestCase.java:491)
at
org.apache.cactus.AbstractTestCase.runBareServerTest(AbstractTestCase.java:4
56)
at
org.apache.cactus.server.AbstractTestCaller.doTest(AbstractTestCaller.java:1
37)
at
org.apache.cactus.server.AbstractTestController.handleRequest(AbstractTestCo
ntroller.java:122)
at
org.apache.cactus.server.ServletTestRedirector.doPost(ServletTestRedirector.
java:134)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at
org.apache.tomcat.core.ServletWrapper.doService(ServletWrapper.java:405)
at org.apache.tomcat.core.Handler.service(Handler.java:287)
at
org.apache.tomcat.core.ServletWrapper.service(ServletWrapper.java:372)
at
org.apache.tomcat.core.ContextManager.internalService(ContextManager.java:81
2)
at
org.apache.tomcat.core.ContextManager.service(ContextManager.java:758)
at
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(HttpC
onnectionHandler.java:213)
at
org.apache.tomcat.service.TcpWorkerThread.runIt(PoolTcpEndpoint.java:416)
at
org.apache.tomcat.util.ThreadPool$ControlRunnable.run(ThreadPool.java:501)
at java.lang.Thread.run(Thread.java:484)


2) Response 404 least to file not found exception:

For some request my Servlet correct behaviour is to respond with a 404
Page Not Found.
This works fine when running the servlet without Cactus, however, when
running my Cactus test case I get the below error:

So the servlet code is:
	res.sendError(HttpServletResponse.SC_NOT_FOUND);
	res.flushBuffer();

The exception I get is:

java.io.FileNotFoundException:
http://localhost:8080/cactus/ServletRedirector/
at
sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection
.java:562)
at
org.apache.cactus.client.AutoReadHttpURLConnection.getInputStream(AutoReadHt
tpURLConnection.java:127)
at
org.apache.cactus.client.AbstractHttpClient.doTest(AbstractHttpClient.java:1
36)
at
org.apache.cactus.AbstractTestCase.runGenericTest(AbstractTestCase.java:422)
at org.apache.cactus.ServletTestCase.runTest(ServletTestCase.java:130)
at org.apache.cactus.AbstractTestCase.runBare(AbstractTestCase.java:371)
at junit.framework.TestResult$1.protect(TestResult.java:106)
at junit.framework.TestResult.runProtected(TestResult.java:124)
at junit.framework.TestResult.run(TestResult.java:109)
at junit.framework.TestCase.run(TestCase.java:131)
at junit.framework.TestSuite.runTest(TestSuite.java:173)
at junit.framework.TestSuite.run(TestSuite.java:168)
at junit.framework.TestSuite.runTest(TestSuite.java:173)
at junit.framework.TestSuite.run(TestSuite.java:168)
at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRu
nner.java:231)
at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.executeInVM(JUnitTask
.java:582)
at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.jav
a:403)
at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTask.execute(JUnitTask.jav
a:380)
at org.apache.tools.ant.Task.perform(Task.java:217)
at org.apache.tools.ant.Target.execute(Target.java:164)
at org.apache.tools.ant.Target.performTasks(Target.java:182)
at org.apache.tools.ant.Project.executeTarget(Project.java:601)
at org.apache.tools.ant.Project.executeTargets(Project.java:560)
at org.apache.tools.ant.Main.runBuild(Main.java:454)
at org.apache.tools.ant.Main.start(Main.java:153)
at org.apache.tools.ant.Main.main(Main.java:176)


3) Synchronization problem.

In some cases my Servlet sends a redirect flushes the buffer... and then
continues to do some processing for logging.

	    response.sendRedirect(redirectURL);
	    response.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);
	    response.flushBuffer();
	    ... more stuff for logging.

This works fine, as long as the test is run in isolation. However, if I
do 2 of these test after each other I get into trouble because the setUp
method of the second test is run before the tearDown method of the first
test. I have avoided this by inserting a statement in the endXXX method
that makes the first test sleep for 10 seconds - such that the start of
the next test is delayed.

However, it seems to me that fact that I am flushing the http-response
tricks Cactus into thinking that the test has completed, when in fact
the Servlet is still processing.


Any help on any of these 3 issues would greatly be appreciated.

--
To unsubscribe, e-mail:
<mailto:cactus-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail:
<mailto:cactus-user-help@jakarta.apache.org>


--
To unsubscribe, e-mail:   <mailto:cactus-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:cactus-user-help@jakarta.apache.org>


Mime
View raw message