500 internal server error for GAE application

0 views
Skip to first unread message

Marshall Tigerus via StackOverflow

unread,
Feb 3, 2014, 12:30:01 AM2/3/14
to google-appengin...@googlegroups.com

I am receiving an error when retrieving an image from the datastore.

Here is the full stack trace of this error:

 /getImage.jsp
 java.lang.IllegalStateException: STREAM
at com.google.appengine.runtime.Request.process-aacbf0abf7a842c8(Request.java)
at org.mortbay.jetty.Response.getWriter(Response.java:616)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:188)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:118)
at org.apache.jasper.runtime.JspFactoryImpl.access$100(JspFactoryImpl.java:40)
at org.apache.jasper.runtime.JspFactoryImpl$PrivilegedReleasePageContext.run(JspFactoryImpl.java:166)
at java.security.AccessController.doPrivileged(AccessController.java:34)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
at org.apache.jsp.getImage_jsp._jspService(getImage_jsp.java:81)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157)
at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388)
at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216)
at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182)
at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765)
at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418)
at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152)
at org.mortbay.jetty.Server.handle(Server.java:326)
at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542)
at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:923)
at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404)
at com.google.tracing.TraceContext$TraceContextRunnable.runInContext(TraceContext.java:437)
at com.google.tracing.TraceContext$TraceContextRunnable$1.run(TraceContext.java:444)
at com.google.tracing.CurrentContext.runInContext(CurrentContext.java:188)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContextNoUnref(TraceContext.java:308)
at com.google.tracing.TraceContext$AbstractTraceContextCallback.runInInheritedContext(TraceContext.java:300)
at com.google.tracing.TraceContext$TraceContextRunnable.run(TraceContext.java:441)
at java.lang.Thread.run(Thread.java:724)

Here is the relevant code of getImage.jsp:

<%@ page import="javax.jdo.*" %>
<%@ page import="com.todtm.*" %>
<%
// This code was borrowed from the captionator lecture code and modified for this project
// Comments added to show knowledge of what the code does

PersistenceManager pm = PMF.getPMF().getPersistenceManager(); // instantiates persistence manager
try {
    String imageId = request.getParameter("image");  // gets the image id

    Image thisImage = (Image)pm.getObjectById(Image.class, Long.parseLong(imageId)); // gets the object from the datastore
    byte[] photo = thisImage.getImage(); // retrieves the bitarray containing image data from the object
    response.setContentType("image/jpeg");   // sets content type
    response.getOutputStream().write(photo);  // sends image data
} catch (Exception cannotLoad) {    
} finally {
    pm.close();
}
%>

I would appreciate some help unravelling this.



Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/21520225/500-internal-server-error-for-gae-application

Martin Berends via StackOverflow

unread,
Feb 3, 2014, 3:30:04 AM2/3/14
to google-appengin...@googlegroups.com

It says the output stream is in a bad state. Verify that you have the right data with some debug logging such as:

java.util.logging.Logger.getLogger("todtm.getImage").warning(
    "photo.length:" + photo.length
);

Try commenting out the response.setContentType line in case it was affecting the output stream.

Try replacing the '// sends image data' line with:

javax.servlet.ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(photo);  // sends image data

to more accurately isolate the operation the throws the exception.

Put at least minimal logging into the catch block:

java.util.logging.Logger.getLogger("todtm.getImage").warning(
    "cannotLoad:" + cannotLoad.getMessage();
);


Please DO NOT REPLY directly to this email but go to StackOverflow:
http://stackoverflow.com/questions/21520225/500-internal-server-error-for-gae-application/21522640#21522640
Reply all
Reply to author
Forward
0 new messages