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);
}
}