You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@abdera.apache.org by jm...@apache.org on 2007/09/01 18:48:28 UTC
svn commit: r571820 - in
/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server:
./ impl/ servlet/
Author: jmsnell
Date: Sat Sep 1 09:48:27 2007
New Revision: 571820
URL: http://svn.apache.org/viewvc?rev=571820&view=rev
Log:
Applying Dan Diephouse's HttpResponse patch. Thanks!
Added:
incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/HttpResponse.java
incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/HttpResponseServletAdapter.java
Modified:
incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/RequestHandler.java
incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractRequestHandler.java
incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/DefaultServiceContext.java
incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java
Added: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/HttpResponse.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/HttpResponse.java?rev=571820&view=auto
==============================================================================
--- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/HttpResponse.java (added)
+++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/HttpResponse.java Sat Sep 1 09:48:27 2007
@@ -0,0 +1,18 @@
+package org.apache.abdera.protocol.server;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+public interface HttpResponse {
+
+ void setStatus(int status);
+
+ void setHeader(String name, String value);
+
+ void setContentType(String contentType);
+
+ void setDateHeader(String key, long time);
+
+ OutputStream getOutputStream() throws IOException;
+
+}
Modified: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/RequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/RequestHandler.java?rev=571820&r1=571819&r2=571820&view=diff
==============================================================================
--- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/RequestHandler.java (original)
+++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/RequestHandler.java Sat Sep 1 09:48:27 2007
@@ -19,7 +19,6 @@
import java.io.IOException;
-import javax.servlet.http.HttpServletResponse;
public interface RequestHandler {
@@ -27,6 +26,6 @@
void process(
ServiceContext context,
RequestContext request,
- HttpServletResponse response) throws IOException;
+ HttpResponse output) throws IOException;
}
Modified: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractRequestHandler.java?rev=571820&r1=571819&r2=571820&view=diff
==============================================================================
--- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractRequestHandler.java (original)
+++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/AbstractRequestHandler.java Sat Sep 1 09:48:27 2007
@@ -19,6 +19,8 @@
import java.io.IOException;
import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -28,6 +30,7 @@
import javax.servlet.http.HttpServletResponse;
import org.apache.abdera.protocol.ItemManager;
+import org.apache.abdera.protocol.server.HttpResponse;
import org.apache.abdera.protocol.server.Provider;
import org.apache.abdera.protocol.server.RequestContext;
import org.apache.abdera.protocol.server.RequestHandler;
@@ -46,7 +49,7 @@
public void process(
ServiceContext context,
RequestContext request,
- HttpServletResponse response)
+ HttpResponse response)
throws IOException {
log.debug(Messages.get("PROCESSING.REQUEST"));
@@ -55,15 +58,15 @@
log.debug(Messages.format("USING.PROVIDER",provider));
try {
if (preconditions(provider, request, response)) {
- output(request, response,provider.request(request));
+ response(request, response,provider.request(request));
}
} catch (Throwable e) {
log.error(Messages.get("OUTPUT.ERROR"), e);
try {
- output(request,response,new EmptyResponseContext(500));
+ response(request,response,new EmptyResponseContext(500));
} catch (Exception ex) {
log.error(Messages.get("OUTPUT.ERROR"), ex);
- response.sendError(500);
+ internalServerError(request, response);
}
} finally {
log.debug(Messages.format("RELEASING.PROVIDER", provider));
@@ -74,22 +77,23 @@
protected boolean preconditions(
Provider provider,
RequestContext request,
- HttpServletResponse response)
+ HttpResponse response)
throws IOException {
// Check The Provider
if (provider == null) {
- noprovider(response);
+ noprovider(request, response);
return false;
}
// Check The Target
Target target = request.getTarget();
if (target == null) {
- notfound(response);
+ notfound(request, response);
return false;
}
// Check The Method
if (!checkMethod(provider,request)) {
notallowed(
+ request,
response,
request.getMethod(),
provider.getAllowedMethods(target.getType()));
@@ -98,9 +102,9 @@
return true;
}
- protected void output(
+ protected void response(
RequestContext request,
- HttpServletResponse response,
+ HttpResponse response,
ResponseContext context)
throws IOException, ServletException {
if (context != null) {
@@ -133,9 +137,28 @@
out.close();
}
} else {
- response.sendError(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
+ internalServerError(request, response);
}
}
+
+ private void internalServerError(RequestContext request, HttpResponse response)
+ throws UnsupportedEncodingException, IOException {
+ sendError(request, response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "There was an error fulfilling your request.");
+ }
+
+ private void sendError(RequestContext request,
+ HttpResponse response, int code,
+ String message) throws UnsupportedEncodingException,
+ IOException {
+ response.setStatus(code);
+ OutputStream out = response.getOutputStream();
+ OutputStreamWriter writer = new OutputStreamWriter(out, request.getAcceptCharset());
+ // TODO: should we wrap this in some nice HTML?
+ writer.write(message);
+ writer.close();
+ out.close();
+ }
protected boolean checkMethod(
Provider provider,
@@ -148,20 +171,22 @@
return (java.util.Arrays.binarySearch(methods, method) >= 0);
}
- protected void noprovider(HttpServletResponse response) throws IOException {
- response.sendError(500, Messages.get("NO.PROVIDER"));
+ protected void noprovider(RequestContext request, HttpResponse response) throws IOException {
+ sendError(request, response, 500, Messages.get("NO.PROVIDER"));
}
- protected void notfound(HttpServletResponse response) throws IOException {
- response.sendError(404, Messages.get("NOT.FOUND"));
+ protected void notfound(RequestContext request, HttpResponse response) throws IOException {
+ sendError(request, response, 404,
+ Messages.get("NOT.FOUND"));
}
protected void notallowed(
- HttpServletResponse response,
+ RequestContext request,
+ HttpResponse response,
String method,
String[] methods)
throws IOException {
- response.sendError(405, Messages.format("METHOD.NOT.ALLOWED", method));
+ sendError(request, response, 405, Messages.format("METHOD.NOT.ALLOWED", method));
response.setHeader("Allow", combine(methods));;
}
Modified: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/DefaultServiceContext.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/DefaultServiceContext.java?rev=571820&r1=571819&r2=571820&view=diff
==============================================================================
--- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/DefaultServiceContext.java (original)
+++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/impl/DefaultServiceContext.java Sat Sep 1 09:48:27 2007
@@ -50,13 +50,6 @@
return obj;
}
- private Object instance(String id, String _default, Object... args) {
- String instance = getProperty(id);
- Object obj = ServiceUtil.newInstance( id, (instance!=null)?instance:_default, abdera, args);
- logger.debug(Messages.format("RETURNING.INSTANCE", obj, id));
- return obj;
- }
-
@SuppressWarnings("unchecked")
public synchronized ItemManager<Provider> getProviderManager() {
if (providerManager == null) {
Modified: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java?rev=571820&r1=571819&r2=571820&view=diff
==============================================================================
--- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java (original)
+++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/AbderaServlet.java Sat Sep 1 09:48:27 2007
@@ -96,7 +96,7 @@
RequestHandler handler = manager.get(reqcontext);
log.debug("Handler - " + handler);
try {
- handler.process(context, reqcontext, response);
+ handler.process(context, reqcontext, new HttpResponseServletAdapter(response));
} catch (Throwable t) {
error("Error servicing request", t, response);
return;
Added: incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/HttpResponseServletAdapter.java
URL: http://svn.apache.org/viewvc/incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/HttpResponseServletAdapter.java?rev=571820&view=auto
==============================================================================
--- incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/HttpResponseServletAdapter.java (added)
+++ incubator/abdera/java/trunk/server/src/main/java/org/apache/abdera/protocol/server/servlet/HttpResponseServletAdapter.java Sat Sep 1 09:48:27 2007
@@ -0,0 +1,38 @@
+package org.apache.abdera.protocol.server.servlet;
+
+import java.io.IOException;
+import java.io.OutputStream;
+
+import javax.servlet.http.HttpServletResponse;
+
+import org.apache.abdera.protocol.server.HttpResponse;
+
+public class HttpResponseServletAdapter implements HttpResponse {
+
+ private HttpServletResponse response;
+
+ public HttpResponseServletAdapter(HttpServletResponse response) {
+ this.response = response;
+ }
+
+ public OutputStream getOutputStream() throws IOException {
+ return response.getOutputStream();
+ }
+
+ public void setContentType(String contentType) {
+ response.setContentType(contentType);
+ }
+
+ public void setDateHeader(String key, long time) {
+ response.setDateHeader(key, time);
+ }
+
+ public void setHeader(String name, String value) {
+ response.setHeader(name, value);
+ }
+
+ public void setStatus(int status) {
+ response.setStatus(status);
+ }
+
+}