You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by et...@apache.org on 2008/05/03 01:05:29 UTC

svn commit: r652944 - in /incubator/shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/ main/java/org/apache/shindig/gadgets/spec/ main/java/org/apache/shindig/util/ test/java/org/apache/shindig/gadgets/spec/

Author: etnu
Date: Fri May  2 16:05:29 2008
New Revision: 652944

URL: http://svn.apache.org/viewvc?rev=652944&view=rev
Log:
Applied SHINDIG-219, with contributions from Nik Haldimann and Vincent Siveton.


Modified:
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
    incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/XmlUtil.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java
    incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java?rev=652944&r1=652943&r2=652944&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/GadgetServer.java Fri May  2 16:05:29 2008
@@ -25,6 +25,7 @@
 
 import com.google.inject.Inject;
 
+import java.net.URI;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedList;
@@ -100,8 +101,9 @@
    */
   private MessageBundle getBundle(LocaleSpec localeSpec, GadgetContext context)
       throws GadgetException {
-    RemoteContentRequest request = RemoteContentRequest.getRequest(
-        localeSpec.getMessages(), context.getIgnoreCache());
+    URI bundleUrl = localeSpec.getMessages();
+    RemoteContentRequest request
+        = RemoteContentRequest.getRequest(bundleUrl, context.getIgnoreCache());
     RemoteContent response = messageBundleFetcher.fetch(request);
     if (response.getHttpStatusCode() != RemoteContent.SC_OK) {
       throw new GadgetException(
@@ -109,7 +111,8 @@
           "Unable to retrieve message bundle xml. HTTP error " +
           response.getHttpStatusCode());
     }
-    MessageBundle bundle = new MessageBundle(response.getResponseAsString());
+    MessageBundle bundle
+        = new MessageBundle(bundleUrl, response.getResponseAsString());
     return bundle;
   }
 

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java?rev=652944&r1=652943&r2=652944&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/GadgetSpec.java Fri May  2 16:05:29 2008
@@ -149,7 +149,8 @@
     try {
       doc = XmlUtil.parse(xml);
     } catch (XmlException e) {
-      throw new SpecParserException(e);
+      throw new SpecParserException("Malformed XML in file " + url.toString()
+          + ": " + e.getMessage());
     }
     this.url = url;
 

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java?rev=652944&r1=652943&r2=652944&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/spec/MessageBundle.java Fri May  2 16:05:29 2008
@@ -23,6 +23,7 @@
 import org.w3c.dom.Element;
 import org.w3c.dom.NodeList;
 
+import java.net.URI;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
@@ -60,15 +61,15 @@
    * @param xml
    * @throws SpecParserException
    */
-  public MessageBundle(String xml) throws SpecParserException {
+  public MessageBundle(URI url, String xml) throws SpecParserException {
     Element doc;
     try {
       doc = XmlUtil.parse(xml);
     } catch (XmlException e) {
-      throw new SpecParserException(e);
+      throw new SpecParserException("Malformed XML in file " + url.toString()
+          + ": " + e.getMessage());
     }
 
-
     NodeList nodes = doc.getElementsByTagName("msg");
     Map<String, String> messages
         = new HashMap<String, String>(nodes.getLength(), 1);

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/XmlUtil.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/XmlUtil.java?rev=652944&r1=652943&r2=652944&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/XmlUtil.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/util/XmlUtil.java Fri May  2 16:05:29 2008
@@ -23,6 +23,7 @@
 import org.w3c.dom.Node;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
+import org.xml.sax.SAXParseException;
 
 import java.io.IOException;
 import java.io.StringReader;
@@ -127,6 +128,8 @@
       DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
       InputSource is = new InputSource(new StringReader(xml.trim()));
       return factory.newDocumentBuilder().parse(is).getDocumentElement();
+    } catch (SAXParseException e) {
+      throw new XmlException(e.getMessage()+" At: ("+e.getLineNumber()+","+e.getColumnNumber()+")", e);
     } catch (SAXException e) {
       throw new XmlException(e);
     } catch (ParserConfigurationException e) {

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java?rev=652944&r1=652943&r2=652944&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/GadgetSpecTest.java Fri May  2 16:05:29 2008
@@ -19,6 +19,7 @@
 
 package org.apache.shindig.gadgets.spec;
 
+import org.apache.shindig.gadgets.GadgetException;
 import org.apache.shindig.gadgets.Substitutions;
 import org.apache.shindig.gadgets.Substitutions.Type;
 
@@ -80,6 +81,18 @@
     }
   }
 
+  public void testMalformedXml() throws Exception {
+    String xml = "<Module><ModulePrefs/>";
+    try {
+      GadgetSpec spec = new GadgetSpec(SPEC_URL, xml);
+      fail("No exception thrown on malformed XML.");
+    } catch (SpecParserException e) {
+      // OK
+      assertEquals(GadgetException.Code.MALFORMED_XML_DOCUMENT, e.getCode());
+      assertTrue(e.getMessage().contains(SPEC_URL.toString()));
+    }
+  }
+
   public void testSubstitutions() throws Exception {
     Substitutions substituter = new Substitutions();
     String title = "Hello, World!";

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java?rev=652944&r1=652943&r2=652944&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/spec/MessageBundleTest.java Fri May  2 16:05:29 2008
@@ -21,10 +21,14 @@
 
 import junit.framework.TestCase;
 
+import org.apache.shindig.gadgets.GadgetException;
+
+import java.net.URI;
 import java.util.HashMap;
 import java.util.Map;
 
 public class MessageBundleTest extends TestCase {
+  private static final URI BUNDLE_URL = URI.create("http://example.org/m.xml");
   public void testNormalMessageBundle() throws Exception {
     Map<String, String> messages = new HashMap<String, String>();
     messages.put("hello", "world");
@@ -36,17 +40,29 @@
           "</msg>";
     }
     xml += "</messagebundle>";
-    MessageBundle bundle = new MessageBundle(xml);
+    MessageBundle bundle = new MessageBundle(BUNDLE_URL, xml);
     assertEquals(messages, bundle.getMessages());
   }
 
   public void testMissingNames() {
     String xml = "<messagebundle><msg>foo</msg></messagebundle>";
     try {
-      MessageBundle bundle = new MessageBundle(xml);
+      MessageBundle bundle = new MessageBundle(BUNDLE_URL, xml);
       fail("No exception thrown when a msg has no name.");
     } catch (SpecParserException e) {
       // OK.
     }
   }
+
+  public void testMalformedXml() {
+    String xml = "</messagebundle>";
+    try {
+      MessageBundle bundle = new MessageBundle(BUNDLE_URL, xml);
+      fail("No exception thrown on malformed XML.");
+    } catch (SpecParserException e) {
+      // OK
+      assertEquals(GadgetException.Code.MALFORMED_XML_DOCUMENT, e.getCode());
+      assertTrue(e.getMessage().contains(BUNDLE_URL.toString()));
+    }
+  }
 }