HTTP Servlet Response - how to prevent IllegalStateException ?

1
Hi, I'm create a Java Action which makes use of the Request Handler and the end result writes to the httpServletResponse pw = response.getWriter(); pw.print(r.getBody()); pw.flush(); pw.close(); basic result, it all works fine but I'm constantly getting the warning in my Mendix console Mar 1 14:03:28.167 127.0.0.1 tr10000: WARNING - Jetty: (1/19) java.lang.IllegalStateException: WRITER Mar 1 14:40:39.661 127.0.0.1 tr10000: WARNING - Jetty: (2/19) at org.eclipse.jetty.server.Response.getOutputStream(Response.java:681) Mar 1 14:40:39.661 127.0.0.1 tr10000: WARNING - Jetty: (3/19) at com.mendix.m2ee.appcontainer.server.request.HttpMxRuntimeResponse.getWriter(HttpMxRuntimeResponse.java:48) Mar 1 14:40:39.661 127.0.0.1 tr10000: WARNING - Jetty: (4/19) at com.mendix.m2ee.appcontainer.server.request.HttpMxRuntimeResponse.getWriter(HttpMxRuntimeResponse.java:14) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (5/19) at com.mendix.m2ee.appcontainer.server.handler.RuntimeHandler.handle(RuntimeHandler.java:50) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (6/19) at org.eclipse.jetty.server.handler.HandlerList.handle(HandlerList.java:52) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (7/19) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (8/19) at org.eclipse.jetty.server.Server.handle(Server.java:368) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (9/19) at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:489) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (10/19) at org.eclipse.jetty.server.AbstractHttpConnection.content(AbstractHttpConnection.java:953) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (11/19) at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content(AbstractHttpConnection.java:1014) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (12/19) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:861) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (13/19) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:240) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (14/19) at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (15/19) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:628) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (16/19) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:52) Mar 1 14:40:39.662 127.0.0.1 tr10000: WARNING - Jetty: (17/19) at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608) Mar 1 14:40:39.663 127.0.0.1 tr10000: WARNING - Jetty: (18/19) at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543) Mar 1 14:40:39.663 127.0.0.1 tr10000: WARNING - Jetty: (19/19) at java.lang.Thread.run(Thread.java:745) From my understanding this is when the jetty is not expecting a Writer to take place this warning occurs. My question is how can I prevent this from happening... Thanks.
asked
3 answers
2

In the Request handler case I'm always working with input- and outputstreams. A Java writer is a specialization of the outputstream or inputstream (I'm not sure which one right now) so in your Java you have always the right object to send the response data

String value = "Output data";
response.getOutputStream().write(value.getBytes());
response.setStatus(IMxRuntimeResponse.OK);

In default it should be a writer, but isn't always clear in which case it is and when it isn't. The outputstream is the low level option.

answered
0

Please post the relevant code. You surely not trying to write any results by just the one statement you pasted here. Also, the (1/19) in your error message to me indicates you left a lot out there as well.

I simply do

response.getWriter().append("blahdeeblah");

and never had any problems.

answered
0

In the Request handler case I'm always working with input- and outputstreams. A Java writer is a specialization of the outputstream or inputstream (I'm not sure which one right now) so in your Java you have always the right object to send the response data

String value = "Output data"; response.getOutputStream().write(value.getBytes()); response.setStatus(IMxRuntimeResponse.OK);

In default it should be a writer, but isn't always clear in which case it is and when it isn't. The outputstream is the low level option.

answered