Hi,

I am trying to run Partuza using the Java Shindig server and have run into an 
issue.  The problem occurs whenever I try to add a new gadget to my page -- I 
end up getting back an error from Shindig saying "Malformed JSON request".  I 
traced the issue back to the doPost method of the RpcServlet and found two 
different problems:

1) Since the code in the doPost method is reading the data directly from the 
input stream of the request, I think it needs to URL decode it before it tries 
to use it.

2) It seems like there is a mismatch between what Partuza is sending and what 
Shindig is expecting.  Partuza is sending the JSON using name-value pairs, and 
Shindig seems to expect the JSON to be the only thing the in body of the POST 
body.

This is an example of what the RpcServlet ends up trying to create a new 
JSONObject with:

request=%7B%22context%22%3A%7B%22country%22%3A%22US%22%2C%22language%22%3A%22en%22%2C%22view%22%3A%22default%22%2C%22container%22%3A%22partuza%22%7D%2C%22gadgets%22%3A%5B%7B%22url%22%3A%22http%3A%5C%2F%5C%2Fwww.labpixies.com%5C%2Fcampaigns%5C%2Fmaps%5C%2Fmaps.xml%22%2C%22moduleId%22%3A%221%22%7D%5D%7D

which causes the JSONObject constructor to throw an exception.

If I replace this code in the doPost method:

    ServletInputStream is = request.getInputStream();
    byte[] body = IOUtils.toByteArray(is);
    if (body.length != length) {
      logger.info("Wrong size. Length: " + length + " real: " + body.length);
      response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
      return;
    }

with this:

    byte[] body = request.getParameter("request").getBytes();

everything works fine (since getParameter does the decoding for me, and I end 
up with just the JSON data).

So my question is this -- how do I figure out who's right with regards to how 
the data should be sent?  Should the data be send as the value of the "request" 
parameter (like Partuza is doing), or should the JSON be the only thing in the 
POST body (like Shindig seems to expect)?  I tried to find a specification that 
would give me the answer, but all I came up with is this:

http://code.google.com/apis/gadgets/docs/spec.html

which doesn't get into enough detail to answer the question.

Thanks,

--Jesse

Reply via email to