You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by jo...@apache.org on 2010/02/11 22:23:54 UTC

svn commit: r909151 - in /shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets: ./ http/ oauth/ parse/caja/ servlet/ templates/

Author: johnh
Date: Thu Feb 11 21:23:49 2010
New Revision: 909151

URL: http://svn.apache.org/viewvc?rev=909151&view=rev
Log:
Send context-specific status codes that will be emitted to the direct Shindig client, in response to Shindig processing content of various kinds.

General guideline:
* SC_BAD_REQUEST used when inputs are bad ie. query parameters or data
provided by the gadget developer.
* SC_BAD_GATEWAY used when data format (eg. FeedProcessor) is incorrect.


Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractSpecFactory.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthArguments.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HtmlAccelServlet.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateLibraryFactory.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractSpecFactory.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractSpecFactory.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractSpecFactory.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/AbstractSpecFactory.java Thu Feb 11 21:23:49 2010
@@ -131,7 +131,7 @@
       throw new GadgetException(GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT,
                                 "Unable to retrieve spec for " + query.specUri + ". HTTP error " +
                                 response.getHttpStatusCode(),
-                                response.getHttpStatusCode());
+                                HttpResponse.SC_BAD_GATEWAY);
     }
 
     try {

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/FeedProcessor.java Thu Feb 11 21:23:49 2010
@@ -25,6 +25,7 @@
 import com.sun.syndication.io.FeedException;
 import com.sun.syndication.io.SyndFeedInput;
 
+import org.apache.shindig.gadgets.http.HttpResponse;
 import org.json.JSONArray;
 import org.json.JSONException;
 import org.json.JSONObject;
@@ -113,9 +114,11 @@
       // This shouldn't ever happen.
       throw new RuntimeException(e);
     } catch (FeedException e) {
-      throw new GadgetException(GadgetException.Code.MALFORMED_XML_DOCUMENT, e);
+      throw new GadgetException(GadgetException.Code.MALFORMED_XML_DOCUMENT, e,
+          HttpResponse.SC_BAD_GATEWAY);
     } catch (IllegalArgumentException e) {
-      throw new GadgetException(GadgetException.Code.MALFORMED_XML_DOCUMENT, e);
+      throw new GadgetException(GadgetException.Code.MALFORMED_XML_DOCUMENT, e,
+          HttpResponse.SC_BAD_GATEWAY);
     }
   }
 }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/DefaultRequestPipeline.java Thu Feb 11 21:23:49 2010
@@ -107,12 +107,14 @@
     // Normalize the protocol part of the URI
     if (request.getUri().getScheme()== null) {
       throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
-          "Url " + request.getUri().toString() + " does not include scheme");
+          "Url " + request.getUri().toString() + " does not include scheme",
+          HttpResponse.SC_BAD_REQUEST);
     } else if (!"http".equals(request.getUri().getScheme()) &&
         !"https".equals(request.getUri().getScheme())) {
       throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
           "Invalid request url scheme in url: " + Utf8UrlCoder.encode(request.getUri().toString()) +
-            "; only \"http\" and \"https\" supported.");
+            "; only \"http\" and \"https\" supported.",
+            HttpResponse.SC_BAD_REQUEST);
     }
   }
 }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthArguments.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthArguments.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthArguments.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/oauth/OAuthArguments.java Thu Feb 11 21:23:49 2010
@@ -21,6 +21,7 @@
 import org.apache.commons.lang.StringUtils;
 import org.apache.shindig.gadgets.AuthType;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.spec.RequestAuthenticationInfo;
 
 import com.google.common.collect.Maps;
@@ -210,7 +211,7 @@
       return UseToken.NEVER;
     }
     throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
-        "Unknown use token value " + useTokenStr);
+        "Unknown use token value " + useTokenStr, HttpResponse.SC_BAD_REQUEST);
   }
 
   /**

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssLexerParser.java Thu Feb 11 21:23:49 2010
@@ -21,6 +21,7 @@
 import org.apache.shindig.common.cache.CacheProvider;
 import org.apache.shindig.common.util.HashUtil;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpResponse;
 
 import com.google.caja.lexer.CharProducer;
 import com.google.caja.lexer.CssLexer;
@@ -137,7 +138,8 @@
       }
       parsedCss.add(builder.toString());
     } catch (ParseException pe) {
-      throw new GadgetException(GadgetException.Code.CSS_PARSE_ERROR, pe);
+      throw new GadgetException(GadgetException.Code.CSS_PARSE_ERROR, pe,
+          HttpResponse.SC_BAD_REQUEST);
     }
     return parsedCss;
   }

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaCssParser.java Thu Feb 11 21:23:49 2010
@@ -21,6 +21,7 @@
 import org.apache.shindig.common.cache.CacheProvider;
 import org.apache.shindig.common.util.HashUtil;
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpResponse;
 
 import com.google.caja.lexer.CharProducer;
 import com.google.caja.lexer.CssLexer;
@@ -51,8 +52,6 @@
 /** A CSS DOM parser using Caja. */
 public class CajaCssParser {
 
-  private static final Logger log = Logger.getLogger(CajaCssParser.class.getName());
-
   /**
    * Dummy URI that is never read from. Needed to construct Caja parser
    */
@@ -89,7 +88,9 @@
           parsedCssCache.addElement(key, parsedCss);
         }
       } catch (ParseException pe) {
-        throw new GadgetException(GadgetException.Code.CSS_PARSE_ERROR, pe);
+        // Bad input; not server's fault.
+        throw new GadgetException(GadgetException.Code.CSS_PARSE_ERROR, pe,
+            HttpResponse.SC_BAD_REQUEST);
       }
     }
     if (shouldCache) {

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/parse/caja/CajaHtmlParser.java Thu Feb 11 21:23:49 2010
@@ -33,6 +33,7 @@
 import com.google.inject.Inject;
 
 import org.apache.shindig.gadgets.GadgetException;
+import org.apache.shindig.gadgets.http.HttpResponse;
 import org.apache.shindig.gadgets.parse.GadgetHtmlParser;
 import org.w3c.dom.DOMImplementation;
 import org.w3c.dom.Document;
@@ -95,12 +96,14 @@
         for (Message m : mq.getMessages()) {
           err.append(m.toString()).append("\n");
         }
-        throw new GadgetException(GadgetException.Code.HTML_PARSE_ERROR, err.toString());
+        throw new GadgetException(GadgetException.Code.HTML_PARSE_ERROR, err.toString(),
+            HttpResponse.SC_BAD_REQUEST);
       }
       return fragment;
     } catch (ParseException e) {
       throw new GadgetException(
-          GadgetException.Code.HTML_PARSE_ERROR, e.getCajaMessage().toString());
+          GadgetException.Code.HTML_PARSE_ERROR, e.getCajaMessage().toString(),
+          HttpResponse.SC_BAD_REQUEST);
     }
   }
 

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HtmlAccelServlet.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HtmlAccelServlet.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HtmlAccelServlet.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/HtmlAccelServlet.java Thu Feb 11 21:23:49 2010
@@ -168,7 +168,8 @@
   private HttpResponse fetch(HttpGadgetContext context) throws GadgetException {
 
     if (context.getUrl() == null) {
-      throw new GadgetException(Code.INVALID_PARAMETER, "Missing url paramater");
+      throw new GadgetException(Code.INVALID_PARAMETER, "Missing url paramater",
+          HttpResponse.SC_BAD_REQUEST);
     }
 
     HttpRequest request = new HttpRequest(context.getUrl())

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/MakeRequestHandler.java Thu Feb 11 21:23:49 2010
@@ -92,7 +92,8 @@
       try {
         results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
       } catch (RewritingException e) {
-        throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e);
+        throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e,
+            e.getHttpStatusCode());
       }
     }
 
@@ -129,7 +130,7 @@
         String[] parts = StringUtils.splitPreserveAllTokens(header, '=');
         if (parts.length != 2) {
           throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
-              "Malformed header param specified:" + header);
+              "Malformed header param specified:" + header, HttpResponse.SC_BAD_REQUEST);
         }
         String headerName = Utf8UrlCoder.decode(parts[0]);
         if (!HttpRequestHandler.BAD_HEADERS.contains(headerName.toUpperCase())) {
@@ -191,7 +192,10 @@
       req.setPostBody(getParameter(request, POST_DATA_PARAM, "")
           .getBytes(encoding.toUpperCase()));
     } catch (UnsupportedEncodingException e) {
-      throw new GadgetException(Code.HTML_PARSE_ERROR, e);
+      // We might consider enumerating at least a small list of encodings
+      // that we must always honor. For now, we return SC_BAD_REQUEST since
+      // the encoding parameter could theoretically be anything.
+      throw new GadgetException(Code.HTML_PARSE_ERROR, e, HttpResponse.SC_BAD_REQUEST);
     }    
   }
 
@@ -221,8 +225,7 @@
     return JsonSerializer.serialize(Collections.singletonMap(originalUrl, resp));
   }
 
-  protected RequestPipeline getRequestPipeline()
-  {
+  protected RequestPipeline getRequestPipeline() {
     return requestPipeline;
   }
 
@@ -233,6 +236,7 @@
   private SecurityToken extractAndValidateToken(HttpServletRequest request) throws GadgetException {
     SecurityToken token = new AuthInfo(request).getSecurityToken();
     if (token == null) {
+      // TODO: Determine appropriate external error code for this.
       throw new GadgetException(GadgetException.Code.INVALID_SECURITY_TOKEN);
     }
     return token;

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyBase.java Thu Feb 11 21:23:49 2010
@@ -70,14 +70,14 @@
   protected Uri validateUrl(String urlToValidate) throws GadgetException {
     if (urlToValidate == null) {
       throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
-          "url parameter is missing.");
+          "url parameter is missing.", HttpResponse.SC_BAD_REQUEST);
     }
     try {
       UriBuilder url = UriBuilder.parse(urlToValidate);
       if (!"http".equals(url.getScheme()) && !"https".equals(url.getScheme())) {
         throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
             "Invalid request url scheme in url: " + Utf8UrlCoder.encode(urlToValidate) +
-            "; only \"http\" and \"https\" supported.");
+            "; only \"http\" and \"https\" supported.", HttpResponse.SC_BAD_REQUEST);
       }
       if (url.getPath() == null || url.getPath().length() == 0) {
         url.setPath("/");
@@ -85,7 +85,7 @@
       return url.toUri();
     } catch (IllegalArgumentException e) {
       throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
-          "url parameter is not a valid url: " + urlToValidate);
+          "url parameter is not a valid url: " + urlToValidate, HttpResponse.SC_BAD_REQUEST);
     }
   }
 
@@ -127,7 +127,7 @@
         refreshInterval =  Integer.valueOf(request.getParameter(REFRESH_PARAM));
       } catch (NumberFormatException nfe) {
         throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
-            "refresh parameter is not a number");
+            "refresh parameter is not a number", HttpResponse.SC_BAD_REQUEST);
       }
     } else {
       refreshInterval = Math.max(60 * 60, (int)(results.getCacheTtl() / 1000L));
@@ -177,17 +177,11 @@
   protected void outputError(HttpServletResponse resp, GadgetException e)
       throws IOException {
     
-    int responseCode;
     Level level = Level.FINE;
-    
-    switch (e.getCode()) {
-      case INTERNAL_SERVER_ERROR:
-        responseCode = HttpServletResponse.SC_INTERNAL_SERVER_ERROR;
-        level = Level.WARNING;
-        break;
-      default:
-        responseCode = HttpServletResponse.SC_BAD_REQUEST;
-        break;
+    int responseCode = HttpResponse.SC_BAD_REQUEST;
+    if (e.getCode() == GadgetException.Code.INTERNAL_SERVER_ERROR) {
+      level = Level.WARNING;
+      responseCode = e.getHttpStatusCode();
     }
     
     logger.log(level, "Request failed", e);

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java Thu Feb 11 21:23:49 2010
@@ -139,13 +139,14 @@
       String msg = "Embed request for url " + getParameter(request, URL_PARAM, "") +
           " made to wrong domain " + host;
       logger.info(msg);
-      throw new GadgetException(GadgetException.Code.INVALID_PARAMETER, msg);
+      throw new GadgetException(GadgetException.Code.INVALID_PARAMETER, msg,
+          HttpResponse.SC_BAD_REQUEST);
     }
 
     HttpRequest rcr = buildHttpRequest(request, URL_PARAM);
     if (rcr == null) {
       throw new GadgetException(GadgetException.Code.INVALID_PARAMETER,
-          "No url paramater in request");      
+          "No url paramater in request", HttpResponse.SC_BAD_REQUEST);      
     }
     HttpResponse results = requestPipeline.execute(rcr);
     
@@ -161,7 +162,8 @@
       try {
         results = contentRewriterRegistry.rewriteHttpResponse(rcr, results);
       } catch (RewritingException e) {
-        throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e);
+        throw new GadgetException(GadgetException.Code.INTERNAL_SERVER_ERROR, e,
+            e.getHttpStatusCode());
       }
     }
 

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateLibraryFactory.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateLibraryFactory.java?rev=909151&r1=909150&r2=909151&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateLibraryFactory.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/templates/TemplateLibraryFactory.java Thu Feb 11 21:23:49 2010
@@ -88,7 +88,8 @@
 
       return new XmlTemplateLibrary(uri, element, content);
     } catch (XmlException e) {
-      throw new GadgetException(GadgetException.Code.MALFORMED_XML_DOCUMENT, e);
+      throw new GadgetException(GadgetException.Code.MALFORMED_XML_DOCUMENT, e,
+          HttpResponse.SC_BAD_REQUEST);
     }
   }