Its a server side OOM exception so you should increase your Java heap space 
for your application server using -Xmx (max heap size) JVM parameter. Your 
server JVM just don't have enough memory to build the RPC response.

If you want to display the image you always have the data URI limitations 
in IE6-8. Because of that most people use a HttpServlet to directly return 
the image with the correct mime type. That way the browser can directly 
display the image. Take a look 
at: https://groups.google.com/d/topic/google-web-toolkit/CWwkYQjQ0q4/discussion

-- J.


Am Dienstag, 6. März 2012 17:51:58 UTC+1 schrieb OxyGen:
>
> I am working on a GWT based web app for medical image display and 
> processing. The problem is this kind of medical image do not have the 
> standarded fomat and it is a huge bytearray (size: over 18M). I have 
> to directly read the image byte array and send it to the client for 
> display and further processing. When I transfer a little part of the 
> image, the client display the pixels normally. But when I transfer the 
> whole image, the console promotes error: 
>
> [ERROR] javax.servlet.ServletContext log: Exception while dispatching 
> incoming RPC call 
> java.lang.OutOfMemoryError: Java heap space 
>         at java.util.Arrays.copyOf(Unknown Source) 
>         at java.util.Arrays.copyOf(Unknown Source) 
>         at java.util.ArrayList.ensureCapacity(Unknown Source) 
>         at java.util.ArrayList.add(Unknown Source) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.append(ServerSerializationStreamWriter.java:
>  
>
> 583) 
>         at 
> com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeInt(AbstractSerializationStreamWriter.java:
>  
>
> 100) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter 
> $VectorWriter$6.write(ServerSerializationStreamWriter.java:233) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeArray(ServerSerializationStreamWriter.java:
>  
>
> 639) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
>  
>
> 743) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
>  
>
> 621) 
>         at 
> com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
>  
>
> 126) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter 
> $ValueWriter$8.write(ServerSerializationStreamWriter.java:153) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:
>  
>
> 539) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:
>  
>
> 709) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
>  
>
> 748) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
>  
>
> 621) 
>         at 
> com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
>  
>
> 126) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter 
> $ValueWriter$8.write(ServerSerializationStreamWriter.java:153) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:
>  
>
> 539) 
>         at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:616) 
>         at 
> com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java: 
> 474) 
>         at 
> com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: 
> 571) 
>         at 
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:
>  
>
> 208) 
>         at 
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:
>  
>
> 248) 
>         at 
> com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:
>  
>
> 62) 
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
>         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 
> com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:
>  
>
> 35) 
>         at org.mortbay.jetty.servlet.ServletHandler 
> $CachedChain.doFilter(ServletHandler.java:1157) 
>         at 
> com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
>  
>
> 58) 
>
> This might be the size limitation of data transfer within GWT, as I've 
> found other‘s solution like: 
>
> encode the byte array by using 
> com.google.gwt.user.server.Base64Utils.toBase64(byte[]) . But this 
> method does not work for IE 7. and IE8 has 32kb limit.. IE9 does not 
> have this limit. 
>
> The structure if my project is very simple and clear: 
>
>     Client side: 
>
>     -ImageService.java 
>
>     -ImageServiceAsync.java 
>
>     -WebImage.java (interface) 
>
>     -ImageArray.java (store the image data from server) 
>
>     Server side: 
>
>     -ImageServiceImpl.java 
>
> I used a button to active this image data delivery. In the background, 
> ImageServiceImpl read a medical image from disk file and send the data 
> array to client. Now as the limitation that I metioned above, this 
> process will not be succesful if I sent the whole image data. How can 
> I do to complete this process succesfully? I wonder if there is a way 
> to continuously deliver many small parts (<32kb) of data array from 
> server to client when I just click the button once. So I can divide 
> the image into many small parts to perform that. Or there are some 
> other mechanisms useful for this problem. 
>

Am Dienstag, 6. März 2012 17:51:58 UTC+1 schrieb OxyGen:
>
> I am working on a GWT based web app for medical image display and 
> processing. The problem is this kind of medical image do not have the 
> standarded fomat and it is a huge bytearray (size: over 18M). I have 
> to directly read the image byte array and send it to the client for 
> display and further processing. When I transfer a little part of the 
> image, the client display the pixels normally. But when I transfer the 
> whole image, the console promotes error: 
>
> [ERROR] javax.servlet.ServletContext log: Exception while dispatching 
> incoming RPC call 
> java.lang.OutOfMemoryError: Java heap space 
>         at java.util.Arrays.copyOf(Unknown Source) 
>         at java.util.Arrays.copyOf(Unknown Source) 
>         at java.util.ArrayList.ensureCapacity(Unknown Source) 
>         at java.util.ArrayList.add(Unknown Source) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.append(ServerSerializationStreamWriter.java:
>  
>
> 583) 
>         at 
> com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeInt(AbstractSerializationStreamWriter.java:
>  
>
> 100) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter 
> $VectorWriter$6.write(ServerSerializationStreamWriter.java:233) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeArray(ServerSerializationStreamWriter.java:
>  
>
> 639) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
>  
>
> 743) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
>  
>
> 621) 
>         at 
> com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
>  
>
> 126) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter 
> $ValueWriter$8.write(ServerSerializationStreamWriter.java:153) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:
>  
>
> 539) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:
>  
>
> 709) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
>  
>
> 748) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
>  
>
> 621) 
>         at 
> com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
>  
>
> 126) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter 
> $ValueWriter$8.write(ServerSerializationStreamWriter.java:153) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:
>  
>
> 539) 
>         at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:616) 
>         at 
> com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java: 
> 474) 
>         at 
> com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: 
> 571) 
>         at 
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:
>  
>
> 208) 
>         at 
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:
>  
>
> 248) 
>         at 
> com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:
>  
>
> 62) 
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
>         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 
> com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:
>  
>
> 35) 
>         at org.mortbay.jetty.servlet.ServletHandler 
> $CachedChain.doFilter(ServletHandler.java:1157) 
>         at 
> com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
>  
>
> 58) 
>
> This might be the size limitation of data transfer within GWT, as I've 
> found other‘s solution like: 
>
> encode the byte array by using 
> com.google.gwt.user.server.Base64Utils.toBase64(byte[]) . But this 
> method does not work for IE 7. and IE8 has 32kb limit.. IE9 does not 
> have this limit. 
>
> The structure if my project is very simple and clear: 
>
>     Client side: 
>
>     -ImageService.java 
>
>     -ImageServiceAsync.java 
>
>     -WebImage.java (interface) 
>
>     -ImageArray.java (store the image data from server) 
>
>     Server side: 
>
>     -ImageServiceImpl.java 
>
> I used a button to active this image data delivery. In the background, 
> ImageServiceImpl read a medical image from disk file and send the data 
> array to client. Now as the limitation that I metioned above, this 
> process will not be succesful if I sent the whole image data. How can 
> I do to complete this process succesfully? I wonder if there is a way 
> to continuously deliver many small parts (<32kb) of data array from 
> server to client when I just click the button once. So I can divide 
> the image into many small parts to perform that. Or there are some 
> other mechanisms useful for this problem. 
>

Am Dienstag, 6. März 2012 17:51:58 UTC+1 schrieb OxyGen:
>
> I am working on a GWT based web app for medical image display and 
> processing. The problem is this kind of medical image do not have the 
> standarded fomat and it is a huge bytearray (size: over 18M). I have 
> to directly read the image byte array and send it to the client for 
> display and further processing. When I transfer a little part of the 
> image, the client display the pixels normally. But when I transfer the 
> whole image, the console promotes error: 
>
> [ERROR] javax.servlet.ServletContext log: Exception while dispatching 
> incoming RPC call 
> java.lang.OutOfMemoryError: Java heap space 
>         at java.util.Arrays.copyOf(Unknown Source) 
>         at java.util.Arrays.copyOf(Unknown Source) 
>         at java.util.ArrayList.ensureCapacity(Unknown Source) 
>         at java.util.ArrayList.add(Unknown Source) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.append(ServerSerializationStreamWriter.java:
>  
>
> 583) 
>         at 
> com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeInt(AbstractSerializationStreamWriter.java:
>  
>
> 100) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter 
> $VectorWriter$6.write(ServerSerializationStreamWriter.java:233) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeArray(ServerSerializationStreamWriter.java:
>  
>
> 639) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
>  
>
> 743) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
>  
>
> 621) 
>         at 
> com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
>  
>
> 126) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter 
> $ValueWriter$8.write(ServerSerializationStreamWriter.java:153) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:
>  
>
> 539) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeClass(ServerSerializationStreamWriter.java:
>  
>
> 709) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeImpl(ServerSerializationStreamWriter.java:
>  
>
> 748) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serialize(ServerSerializationStreamWriter.java:
>  
>
> 621) 
>         at 
> com.google.gwt.user.client.rpc.impl.AbstractSerializationStreamWriter.writeObject(AbstractSerializationStreamWriter.java:
>  
>
> 126) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter 
> $ValueWriter$8.write(ServerSerializationStreamWriter.java:153) 
>         at 
> com.google.gwt.user.server.rpc.impl.ServerSerializationStreamWriter.serializeValue(ServerSerializationStreamWriter.java:
>  
>
> 539) 
>         at com.google.gwt.user.server.rpc.RPC.encodeResponse(RPC.java:616) 
>         at 
> com.google.gwt.user.server.rpc.RPC.encodeResponseForSuccess(RPC.java: 
> 474) 
>         at 
> com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java: 
> 571) 
>         at 
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:
>  
>
> 208) 
>         at 
> com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:
>  
>
> 248) 
>         at 
> com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:
>  
>
> 62) 
>         at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 
>         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 
> com.google.appengine.tools.development.HeaderVerificationFilter.doFilter(HeaderVerificationFilter.java:
>  
>
> 35) 
>         at org.mortbay.jetty.servlet.ServletHandler 
> $CachedChain.doFilter(ServletHandler.java:1157) 
>         at 
> com.google.appengine.api.blobstore.dev.ServeBlobFilter.doFilter(ServeBlobFilter.java:
>  
>
> 58) 
>
> This might be the size limitation of data transfer within GWT, as I've 
> found other‘s solution like: 
>
> encode the byte array by using 
> com.google.gwt.user.server.Base64Utils.toBase64(byte[]) . But this 
> method does not work for IE 7. and IE8 has 32kb limit.. IE9 does not 
> have this limit. 
>
> The structure if my project is very simple and clear: 
>
>     Client side: 
>
>     -ImageService.java 
>
>     -ImageServiceAsync.java 
>
>     -WebImage.java (interface) 
>
>     -ImageArray.java (store the image data from server) 
>
>     Server side: 
>
>     -ImageServiceImpl.java 
>
> I used a button to active this image data delivery. In the background, 
> ImageServiceImpl read a medical image from disk file and send the data 
> array to client. Now as the limitation that I metioned above, this 
> process will not be succesful if I sent the whole image data. How can 
> I do to complete this process succesfully? I wonder if there is a way 
> to continuously deliver many small parts (<32kb) of data array from 
> server to client when I just click the button once. So I can divide 
> the image into many small parts to perform that. Or there are some 
> other mechanisms useful for this problem. 
>

-- 
You received this message because you are subscribed to the Google Groups 
"Google Web Toolkit" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-web-toolkit/-/3n2UWb1NbvIJ.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/google-web-toolkit?hl=en.

Reply via email to