You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@shindig.apache.org by Phillip Rhodes <mo...@gmail.com> on 2010/12/23 09:16:53 UTC

Weird "Malformed JSON" problem with Shindig

Hi guys, hoping somebody can help me with a little problem I'm having with
Shindig...

What I have is this:  I've built Shindig from SVN, using the latest code
from trunk.  I've deployed to Tomcat 6.0.26, with Shindig
as the ROOT webapp.  I can browse to <
http://localhost:8080/container/sample1.html> and see both gadgets rendered
and working.  So, Shindig is fundamentally functional.  Ok...

Now here's where it gets weird.  I'm trying to integrate Shindig into my
application, so I setup a page that basically
mimics the content of sample1.html.  It's a Grails app, and is deployed to
the same Tomcat instance, but in a context
of 'quoddy2/'.  I'm reaching the page through a URL of <
http://localhost:8080/quoddy2/opensocial> and at runtime the
generated HTML includes this bit, copied almost verbatim from sample1.html:

		<!-- default container look and feel -->
		<link rel="stylesheet" href="/quoddy2/css/gadgets.css
<view-source:http://localhost:8080/quoddy2/css/gadgets.css>">
		<script type="text/javascript"
src="../gadgets/js/shindig-container:rpc.js?c=1&debug=1&nocache=1
<view-source:http://localhost:8080/gadgets/js/shindig-container:rpc.js?c=1&debug=1&nocache=1>"></script>
		<script type="text/javascript">
			var specUrl0 = 'http://www.google.com/ig/modules/horoscope.xml';
			var specUrl1 = 'http://www.labpixies.com/campaigns/todo/todo.xml';

			// This container lays out and renders gadgets itself.

			function renderGadgets() {
  			var gadget0 = shindig.container.createGadget({specUrl: specUrl0});
  			var gadget1 = shindig.container.createGadget({specUrl: specUrl1});

			shindig.container.addGadget(gadget0);
  			shindig.container.addGadget(gadget1);
  			shindig.container.layoutManager.setGadgetChromeIds(
      		['gadget-chrome-x', 'gadget-chrome-y']);
			shindig.container.renderGadget(gadget0);
  			shindig.container.renderGadget(gadget1);
			};
		</script>


the <body onload="">  bit is there, as are the two divs for the
gadgets.  But, no gadget is rendered.  I am getting back a response

from a call to /gadgets/metadata of "Malformed JSON response."
Debugging into the RpcServlet, I've found that, sure enough, the JSON
that

comes in is different depending on which URL I used.  In the working
case, (sample1.html from the actual Shindig deployment) I get (for the
first gadget):


{"context":{"country":"default","language":"default","view":"default","container":"default"},"gadgets":[{"url":"http://www.google.com/ig/modules/horoscope.xml","moduleId":1}]}


But when I load my page, the JSON that is sent looks like:

{"context":{"country":"default","language":"default","view":"default","container":"default"},"gadgets":"[{\"url\":
\"http://www.google.com/ig/modules/horoscope.xml\", \"moduleId\":
1}]"}


and the JSON parser complains that "gadgets is not a valid JSON array."

Sooo... there seems to be something very subtle going on here, that I'm
missing.  Why would I get the JSON with the escaped quotes in one case, when
everything else seems to be
essentially the same?

I'm not much a browser / javascript / client-side guy, so please forgive my
ignorance if this is something obvious!


Thanks,


Phillip Rhodes
Fogbeam Labs