On Fri, Oct 31, 2008 at 1:21 PM, Ciancetta, Jesse E. <[EMAIL PROTECTED]>wrote:
> I don't think you need to send a request parameter with the data -- Partuza > does. That's what it does right now. I could see that there was a > mismatch, but I wasn't sure who had it right (Partuza or Shindig). In the > fetch_gadget_metadata function in the applications.php file, Partuza sets > the JSON into the POST body like this: > > curl_setopt($ch, CURLOPT_POSTFIELDS, 'request=' . > urlencode($request)); > > I'll update my local copy of the Partuza code to send text/json instead of > x-form/www-urlencoded so it works properly with Java Shindig, and I'll send > a message to the Partuza developers list asking them to do the same > (although I suspect that the PHP version of the RpcServlet is built to > expect x-form/www-urlencoded, so they'll probably have to change that too). > > But this brings me back to my original question -- in order to be able to > swap out PHP Shindig for Java Shindig, they obviously need to handle > requests for metadata the same way. I tried to find a specification that > would tell me how the request is supposed to be made, 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. Is there a > more detailed specification somewhere that I missed? There is no specification for this, because the specification only governs the developer interactions. Developers aren't expected to use the metadata service. > > > Thanks again, > > --Jesse > > -----Original Message----- > From: Kevin Brown [mailto:[EMAIL PROTECTED] > Sent: Friday, October 31, 2008 3:27 PM > To: [email protected] > Subject: Re: Partuza with Java Shindig > > On Fri, Oct 31, 2008 at 7:46 AM, Ciancetta, Jesse E. <[EMAIL PROTECTED] > >wrote: > > > 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. > > > Yes, Shindig is expecting that you post text/json, not > x-form/www-urlencoded. They're two very different things. Why do you think > you need to send a request parameter with this data? I wrote the metadata > handler and it's always been this way, and it's intentional. > > > > > > > > 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 > > >

