After two days of banging my head against this, it turns out to be a bug in the development environment, but works fine on the production servers. Silly me for thinking you should make things work in development first before deploying to production... ;-)
Issue #2097 in case anyone's interested in the gory details. Vince On Wed, Sep 9, 2009 at 8:20 AM, Vince Bonfanti <vbonfa...@gmail.com> wrote: > I'm trying to send binary data--a serialized Java object--via the > TaskOptions.payload() method, but can't figure out how to send and/or > read the data properly. First, I serialized an object to a byte[], > which I know is working properly. Then I set the byte[] as the task > payload via: > > TaskOptions.payload( byte[], contentType ); > > I've tried different values for contentType; > "application/octet-stream" and "application/x-java-serialized-object" > seemed like the two most reasonable, but this seems to have no effect. > > In my task handler (a servlet), I read the data into a byte[] prior to > object deserialization via the following: > > byte[] bytesIn = new byte[ req.getContentLength() ]; > req.getInputStream().readLine( bytesIn, 0, bytesIn.length ); > > However, the byte[] I read in is not the same as the byte[] I wrote > out. Here are the first few bytes of the array as I wrote it to > TaskOptions.payload (this is cut-and-paste from the Eclipse debugger): > > -84, -19, 0, 5, 115, 114, 0, 38, 99, 111, 109, 46, 103, 111, > > and here are the first few bytes I read in, which is tantalizingly > close to what was written out: > > 63, 63, 5, 115, 114, 38, 99, 111, 109, 46, 103, 111 > > So then I tried a different tack. I converted the byte[] to a string > in the outward direction: > > TaskOptions.payload( new String( byte[] ) ); > > and then used req.getReader() to read it in my task handler: > > byte[] bytesIn = req.getReader().readLine().getBytes(); > > This time I got even closer to my original byte[], but it's still > missing all of the "0" bytes: > > -84, -19, 5, 115, 114, 38, 99, 111, 109, 46, 103, 111, 111 > > Note that in both cases, the content length reported in the request > header is smaller than the byte[] length when I invoked > TaskOptions.payload(). > > How do I send a byte[] as the task payload? Any clues would be appreciated. > > Vince > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Google App Engine for Java" group. To post to this group, send email to google-appengine-java@googlegroups.com To unsubscribe from this group, send email to google-appengine-java+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/google-appengine-java?hl=en -~----------~----~----~----~------~----~------~--~---