patches are always welcome! I added that to Partuza at some point because someone was having problems with the RAW HTTP POST var's, and i added support for both raw posts + x-form/www-urlencoded posts to php-shindig ... but indeed if you want to run partuza with java-shindig that could be a problem.
We use raw posts all over the place now, so having a work around in only one place doesn't really make sense anymore, so i'm more then willing to accept the patch that switches this behavior back to the default one sorry for the confusion that caused! 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? > > 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 > > >

