You are viewing a plain text version of this content. The canonical link for it is here.
Posted to awf-commits@incubator.apache.org by jm...@apache.org on 2011/08/05 18:24:48 UTC
svn commit: r1154336 [1/2] - in /incubator/deft/sandbox: ./
src/main/java/org/apache/deft/annotation/
src/main/java/org/apache/deft/example/client/
src/main/java/org/apache/deft/example/handler/
src/main/java/org/apache/deft/example/keyvalue/ src/main/...
Author: jmeehan
Date: Fri Aug 5 18:24:46 2011
New Revision: 1154336
URL: http://svn.apache.org/viewvc?rev=1154336&view=rev
Log:
DEFT-142: Proposed code for dynamic invocation of handlers (clone)
Added:
incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Asynchronous.java
- copied, changed from r1153986, incubator/deft/sandbox/src/main/java/org/apache/deft/web/Asynchronous.java
incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Authenticated.java
- copied, changed from r1153986, incubator/deft/sandbox/src/main/java/org/apache/deft/web/Authenticated.java
incubator/deft/sandbox/src/main/java/org/apache/deft/example/handler/ClonedHandlerExample.java (with props)
incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandlerFactory.java (with props)
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/ContentType.java
- copied, changed from r1153986, incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/ContentType.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpStatus.java (with props)
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpVerb.java
- copied, changed from r1153986, incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpVerb.java
incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerFactoryTest.java (with props)
incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpExceptionTest.java (with props)
incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpRequestDispatcherTest.java (with props)
incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/
incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/ContentTypeTest.java
- copied, changed from r1153986, incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/ContentTypeTest.java
incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/HttpStatusTest.java (with props)
incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/HttpVerbTest.java (with props)
Removed:
incubator/deft/sandbox/src/main/java/org/apache/deft/web/Asynchronous.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/Authenticated.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpVerb.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/ContentType.java
incubator/deft/sandbox/src/test/java/org/apache/deft/web/HttpVerbTest.java
incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/ContentTypeTest.java
Modified:
incubator/deft/sandbox/pom.xml
incubator/deft/sandbox/src/main/java/org/apache/deft/example/client/AsynchronousHttpClientPostExample.java
incubator/deft/sandbox/src/main/java/org/apache/deft/example/keyvalue/KeyValueStoreHandler.java
incubator/deft/sandbox/src/main/java/org/apache/deft/util/HttpUtil.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/Application.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpServer.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/BadRequestRequestHandler.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/ForbiddenRequestHandler.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/NotFoundRequestHandler.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandler.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/StaticContentHandler.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpException.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequest.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestDispatcher.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestImpl.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponse.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponseImpl.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/AsynchronousHttpClient.java
incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/Request.java
incubator/deft/sandbox/src/test/java/org/apache/deft/configuration/AnnotationsScannerTest.java
incubator/deft/sandbox/src/test/java/org/apache/deft/web/ApplicationTest.java
incubator/deft/sandbox/src/test/java/org/apache/deft/web/DeftSystemTest.java
incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerTest.java
incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/AsynchronousHttpClientTest.java
incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/RequestTest.java
Modified: incubator/deft/sandbox/pom.xml
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/pom.xml?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/pom.xml (original)
+++ incubator/deft/sandbox/pom.xml Fri Aug 5 18:24:46 2011
@@ -42,6 +42,13 @@
</dependency>
<dependency>
+ <groupId>org.mockito</groupId>
+ <artifactId>mockito-core</artifactId>
+ <version>1.8.5</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>0.9.28</version>
Copied: incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Asynchronous.java (from r1153986, incubator/deft/sandbox/src/main/java/org/apache/deft/web/Asynchronous.java)
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Asynchronous.java?p2=incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Asynchronous.java&p1=incubator/deft/sandbox/src/main/java/org/apache/deft/web/Asynchronous.java&r1=1153986&r2=1154336&rev=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/Asynchronous.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Asynchronous.java Fri Aug 5 18:24:46 2011
@@ -17,7 +17,7 @@
* under the License.
*
*/
-package org.apache.deft.web;
+package org.apache.deft.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -30,9 +30,7 @@ import org.apache.deft.web.handler.Reque
* Annotation used by implementation of {@link RequestHandler} to denote a
* method as asynchronous (i.e don't close the Http connection until the client
* invokes the finish method)
- *
*/
-
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Asynchronous {
Copied: incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Authenticated.java (from r1153986, incubator/deft/sandbox/src/main/java/org/apache/deft/web/Authenticated.java)
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Authenticated.java?p2=incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Authenticated.java&p1=incubator/deft/sandbox/src/main/java/org/apache/deft/web/Authenticated.java&r1=1153986&r2=1154336&rev=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/Authenticated.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/annotation/Authenticated.java Fri Aug 5 18:24:46 2011
@@ -17,7 +17,7 @@
* under the License.
*
*/
-package org.apache.deft.web;
+package org.apache.deft.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
@@ -31,9 +31,7 @@ import org.apache.deft.web.handler.Reque
* method requires that the request (current user) is authenticated (i.e your
* overridden method {@link RequestHandler#getCurrentUser} returns a non null
* value)
- *
*/
-
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Authenticated {
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/example/client/AsynchronousHttpClientPostExample.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/example/client/AsynchronousHttpClientPostExample.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/example/client/AsynchronousHttpClientPostExample.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/example/client/AsynchronousHttpClientPostExample.java Fri Aug 5 18:24:46 2011
@@ -23,11 +23,11 @@ import org.apache.deft.io.IOLoop;
import org.apache.deft.io.timeout.Timeout;
import org.apache.deft.web.AsyncCallback;
import org.apache.deft.web.AsyncResult;
-import org.apache.deft.web.HttpVerb;
-import org.apache.deft.web.http.ContentType;
import org.apache.deft.web.http.client.AsynchronousHttpClient;
import org.apache.deft.web.http.client.Request;
import org.apache.deft.web.http.client.Response;
+import org.apache.deft.web.http.protocol.ContentType;
+import org.apache.deft.web.http.protocol.HttpVerb;
/**
* Example class to demonstrate usage of <code>AsynchronousHttpClient</code>.
@@ -54,18 +54,21 @@ public class AsynchronousHttpClientPostE
* <li>Start the instance.
* </ol>
*
- * @param args
- * the arguments to pass; unused.
+ * @param args the arguments to pass; unused.
*/
public static void main(final String[] args) {
final AsyncResult<Response> callback = new AsyncResult<Response>() {
@Override
- public void onSuccess(final Response response) { System.out.println("RESPONSE: " + response); }
+ public void onSuccess(final Response response) {
+ System.out.println("RESPONSE: " + response);
+ }
@Override
- public void onFailure(final Throwable caught) { System.out.println("EXCEPTION: " + caught); }
+ public void onFailure(final Throwable caught) {
+ System.out.println("EXCEPTION: " + caught);
+ }
};
Request request = new Request("http://incubator.apache.org/deft/", HttpVerb.POST);
Added: incubator/deft/sandbox/src/main/java/org/apache/deft/example/handler/ClonedHandlerExample.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/example/handler/ClonedHandlerExample.java?rev=1154336&view=auto
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/example/handler/ClonedHandlerExample.java (added)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/example/handler/ClonedHandlerExample.java Fri Aug 5 18:24:46 2011
@@ -0,0 +1,60 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.deft.example.handler;
+
+import java.util.Date;
+
+import org.apache.deft.annotation.Path;
+import org.apache.deft.example.DeftServerExample;
+import org.apache.deft.web.handler.RequestHandler;
+import org.apache.deft.web.http.HttpRequest;
+import org.apache.deft.web.http.HttpResponse;
+
+/**
+ * All <code>RequestHandler</code> implementations are cloned. Where there are
+ * mutable fields, the {@link #clone()} method might be explicitly overridden.
+ * <p>
+ * In the example below, note that the <code>String</code> representation of
+ * each handler differs when written to the <code>HttpResponse</code>.
+ * </p>
+ *
+ * @see Path
+ * @see DeftServerExample
+ */
+@Path("/clone")
+public class ClonedHandlerExample extends RequestHandler {
+
+ private Date mutableDate = new Date();
+
+ @Override
+ public void get(HttpRequest request, HttpResponse response) {
+
+ response.write("Cloned: " + toString());
+ }
+
+ @Override
+ public Object clone() throws CloneNotSupportedException {
+
+ ClonedHandlerExample handler = (ClonedHandlerExample) super.clone();
+ handler.mutableDate = new Date(mutableDate.getTime());
+
+ return handler;
+ }
+}
Propchange: incubator/deft/sandbox/src/main/java/org/apache/deft/example/handler/ClonedHandlerExample.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/example/keyvalue/KeyValueStoreHandler.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/example/keyvalue/KeyValueStoreHandler.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/example/keyvalue/KeyValueStoreHandler.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/example/keyvalue/KeyValueStoreHandler.java Fri Aug 5 18:24:46 2011
@@ -19,9 +19,9 @@
*/
package org.apache.deft.example.keyvalue;
+import org.apache.deft.annotation.Asynchronous;
import org.apache.deft.annotation.Path;
import org.apache.deft.web.AsyncResult;
-import org.apache.deft.web.Asynchronous;
import org.apache.deft.web.handler.RequestHandler;
import org.apache.deft.web.http.HttpRequest;
import org.apache.deft.web.http.HttpResponse;
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/util/HttpUtil.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/util/HttpUtil.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/util/HttpUtil.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/util/HttpUtil.java Fri Aug 5 18:24:46 2011
@@ -25,142 +25,15 @@ import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import org.apache.deft.web.http.HttpRequest;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
public class HttpUtil {
- private static final Logger logger = LoggerFactory.getLogger(HttpUtil.class);
-
/*
* MessageDigest are not thread-safe and are expensive to create. Do it
* lazily for each thread that need access to one.
*/
private static final ThreadLocal<MessageDigest> md = new ThreadLocal<MessageDigest>();
- private static final String _200_OK = "HTTP/1.1 200 OK\r\n";
- private static final String _201_CREATED = "HTTP/1.1 201 Created\r\n";
- private static final String _202_ACCEPTED = "HTTP/1.1 202 Accepted\r\n";
- private static final String _203_NON_AUTHORITATIVE_INFO = "HTTP/1.1 203 Non-Authoritative Information\r\n";
- private static final String _204_NO_CONTENT = "HTTP/1.1 204 No Content\r\n";
- private static final String _205_RESET_CONTENT = "HTTP/1.1 205 Reset Content\r\n";
- private static final String _206_PARTIAL_CONTENT = "HTTP/1.1 206 Partial Content\r\n";
- private static final String _300_MULTIPLE_CHOICES = "HTTP/1.1 300 Multiple Choices\r\n";
- private static final String _301_MOVED_PERMANENTLY = "HTTP/1.1 301 Moved Permanently\r\n";
- private static final String _302_NOT_FOUND = "HTTP/1.1 302 Found\r\n";
- private static final String _303_SEE_OTHER = "HTTP/1.1 303 See Other\r\n";
- private static final String _304_NOT_MODIFIED = "HTTP/1.1 304 Not Modified\r\n";
- private static final String _305_USE_PROXY = "HTTP/1.1 305 Use Proxy\r\n";
- private static final String _307_TEMPORARY_REDIRECT = "HTTP/1.1 307 Temporary Redirect\r\n";
- private static final String _400_BAD_REQUEST = "HTTP/1.1 400 Bad Request\r\n";
- private static final String _401_UNAUTHORIZED = "HTTP/1.1 401 Unauthorized\r\n";
- private static final String _403_FORBIDDEN = "HTTP/1.1 403 Forbidden\r\n";
- private static final String _404_NOT_FOUND = "HTTP/1.1 404 Not Found\r\n";
- private static final String _405_METHOD_NOT_ALLOWED = "HTTP/1.1 405 Method Not Allowed\r\n";
- private static final String _406_NOT_ACCEPTABLE = "HTTP/1.1 406 Not Acceptable\r\n";
- private static final String _407_PROXY_AUTH_REQUIRED = "HTTP/1.1 407 Proxy Authentication Required\r\n";
- private static final String _408_REQUEST_TIMEOUT = "HTTP/1.1 408 Request Timeout\r\n";
- private static final String _409_CONFLICT = "HTTP/1.1 409 Conflict\r\n";
- private static final String _410_GONE = "HTTP/1.1 410 Gone\r\n";
- private static final String _411_LENGTH_REQUIRED = "HTTP/1.1 411 Length Required\r\n";
- private static final String _412_PRECONDITION_FAILED = "HTTP/1.1 412 Precondition Failed\r\n";
- private static final String _413_REQUEST_ENTITY_LARGE = "HTTP/1.1 413 Request Entity Too Large\r\n";
- private static final String _414_REQUEST_URI_TOO_LONG = "HTTP/1.1 414 Request-URI Too Long\r\n";
- private static final String _415_UNSUPPORTED_MEDIA_TYPE = "HTTP/1.1 415 Unsupported Media Type\r\n";
- private static final String _416_REQUEST_RANGE_NOT_SAT = "HTTP/1.1 416 Requested Range Not Satisfiable\r\n";
- private static final String _417_EXPECTATION_FAILED = "HTTP/1.1 417 Expectation Failed\r\n";
- private static final String _500_INTERNAL_SERVER_ERROR = "HTTP/1.1 500 Internal Server Error\r\n";
- private static final String _501_NOT_IMPLEMENTED = "HTTP/1.1 501 Not Implemented\r\n";
- private static final String _502_BAD_GATEWAY = "HTTP/1.1 502 Bad Gateway\r\n";
- private static final String _503_SERVICE_UNAVAILABLE = "HTTP/1.1 503 Service Unavailable\r\n";
- private static final String _504_GATEWAY_TIMEOUT = "HTTP/1.1 504 Gateway Timeout\r\n";
- private static final String _505_VERSION_NOT_SUPPORTED = "HTTP/1.1 505 HTTP Version Not Supported\r\n";
-
- // e.g. HTTP/1.0 200 OK or HTTP/1.0 404 Not Found (HTTP version + response
- // status code + reason phrase)
- public static String createInitialLine(int statusCode) {
-
- switch (statusCode) {
- case 200:
- return _200_OK;
- case 201:
- return _201_CREATED;
- case 202:
- return _202_ACCEPTED;
- case 203:
- return _203_NON_AUTHORITATIVE_INFO;
- case 204:
- return _204_NO_CONTENT;
- case 205:
- return _205_RESET_CONTENT;
- case 206:
- return _206_PARTIAL_CONTENT;
- case 300:
- return _300_MULTIPLE_CHOICES;
- case 301:
- return _301_MOVED_PERMANENTLY;
- case 302:
- return _302_NOT_FOUND;
- case 303:
- return _303_SEE_OTHER;
- case 304:
- return _304_NOT_MODIFIED;
- case 305:
- return _305_USE_PROXY;
- case 307:
- return _307_TEMPORARY_REDIRECT;
- case 400:
- return _400_BAD_REQUEST;
- case 401:
- return _401_UNAUTHORIZED;
- case 403:
- return _403_FORBIDDEN;
- case 404:
- return _404_NOT_FOUND;
- case 405:
- return _405_METHOD_NOT_ALLOWED;
- case 406:
- return _406_NOT_ACCEPTABLE;
- case 407:
- return _407_PROXY_AUTH_REQUIRED;
- case 408:
- return _408_REQUEST_TIMEOUT;
- case 409:
- return _409_CONFLICT;
- case 410:
- return _410_GONE;
- case 411:
- return _411_LENGTH_REQUIRED;
- case 412:
- return _412_PRECONDITION_FAILED;
- case 413:
- return _413_REQUEST_ENTITY_LARGE;
- case 414:
- return _414_REQUEST_URI_TOO_LONG;
- case 415:
- return _415_UNSUPPORTED_MEDIA_TYPE;
- case 416:
- return _416_REQUEST_RANGE_NOT_SAT;
- case 417:
- return _417_EXPECTATION_FAILED;
- case 500:
- return _500_INTERNAL_SERVER_ERROR;
- case 501:
- return _501_NOT_IMPLEMENTED;
- case 502:
- return _502_BAD_GATEWAY;
- case 503:
- return _503_SERVICE_UNAVAILABLE;
- case 504:
- return _504_GATEWAY_TIMEOUT;
- case 505:
- return _505_VERSION_NOT_SUPPORTED;
- default:
- logger.error("Uknonwn Http status code: " + statusCode);
- throw new IllegalArgumentException("Unknow Http status code: " + statusCode);
- }
- }
-
public static boolean verifyRequest(HttpRequest request) {
String version = request.getVersion();
boolean requestOk = true;
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/Application.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/Application.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/Application.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/Application.java Fri Aug 5 18:24:46 2011
@@ -27,6 +27,7 @@ import org.apache.deft.web.handler.BadRe
import org.apache.deft.web.handler.ForbiddenRequestHandler;
import org.apache.deft.web.handler.NotFoundRequestHandler;
import org.apache.deft.web.handler.RequestHandler;
+import org.apache.deft.web.handler.RequestHandlerFactory;
import org.apache.deft.web.handler.StaticContentHandler;
import org.apache.deft.web.http.HttpRequest;
@@ -88,22 +89,27 @@ public class Application {
* returned.
*/
private RequestHandler getHandler(String path) {
+
RequestHandler rh = absoluteHandlers.get(path);
if (rh == null) {
- // path could contain capturing groups which we could have a handler
- // associated with.
rh = getCapturingHandler(path);
if (rh == null) {
- // path could be prefixed with the 'static content directory'
rh = getStaticContentHandler(path);
+ if (rh != null) {
+ return rh;
+ }
+ } else {
+ return RequestHandlerFactory.cloneHandler(rh);
}
+ } else {
+ return RequestHandlerFactory.cloneHandler(rh);
}
- // TODO RS store in a final field for improved performance?
- return rh != null ? rh : NotFoundRequestHandler.getInstance();
+ return NotFoundRequestHandler.getInstance();
}
public RequestHandler getHandler(HttpRequest request) {
+
if (!HttpUtil.verifyRequest(request)) {
return BadRequestRequestHandler.getInstance();
}
@@ -111,10 +117,10 @@ public class Application {
// request/user is authenticated
// (i.e RequestHandler.getCurrentUser() != null).
RequestHandler rh = getHandler(request.getRequestedPath());
- ;
if (rh.isMethodAuthenticated(request.getMethod()) && rh.getCurrentUser(request) == null) {
return ForbiddenRequestHandler.getInstance();
}
+
return rh;
}
@@ -154,7 +160,7 @@ public class Application {
}
}
- public void setStaticContentDir(String scd) {
+ void setStaticContentDir(String scd) {
staticContentDir = scd;
}
}
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpServer.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpServer.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpServer.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpServer.java Fri Aug 5 18:24:46 2011
@@ -57,6 +57,7 @@ public class HttpServer {
}
application = createApplication(configuration.getHandlerPackage());
+ application.setStaticContentDir(configuration.getStaticDirectory());
}
protected Application createApplication(String packageName) {
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/BadRequestRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/BadRequestRequestHandler.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/BadRequestRequestHandler.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/BadRequestRequestHandler.java Fri Aug 5 18:24:46 2011
@@ -21,6 +21,7 @@ package org.apache.deft.web.handler;
import org.apache.deft.web.http.HttpRequest;
import org.apache.deft.web.http.HttpResponse;
+import org.apache.deft.web.http.protocol.HttpStatus;
public class BadRequestRequestHandler extends RequestHandler {
@@ -35,7 +36,7 @@ public class BadRequestRequestHandler ex
@Override
public void get(HttpRequest request, HttpResponse response) {
- response.setStatusCode(400);
+ response.setStatus(HttpStatus.CLIENT_ERROR_BAD_REQUEST);
response.setHeader("Connection", "close");
response.write("HTTP 1.1 requests must include the Host: header");
}
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/ForbiddenRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/ForbiddenRequestHandler.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/ForbiddenRequestHandler.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/ForbiddenRequestHandler.java Fri Aug 5 18:24:46 2011
@@ -21,6 +21,7 @@ package org.apache.deft.web.handler;
import org.apache.deft.web.http.HttpRequest;
import org.apache.deft.web.http.HttpResponse;
+import org.apache.deft.web.http.protocol.HttpStatus;
public class ForbiddenRequestHandler extends RequestHandler {
@@ -35,7 +36,7 @@ public class ForbiddenRequestHandler ext
@Override
public void get(HttpRequest request, HttpResponse response) {
- response.setStatusCode(403);
+ response.setStatus(HttpStatus.CLIENT_ERROR_FORBIDDEN);
response.setHeader("Connection", "close");
response.write("Authentication failed");
}
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/NotFoundRequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/NotFoundRequestHandler.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/NotFoundRequestHandler.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/NotFoundRequestHandler.java Fri Aug 5 18:24:46 2011
@@ -21,6 +21,7 @@ package org.apache.deft.web.handler;
import org.apache.deft.web.http.HttpRequest;
import org.apache.deft.web.http.HttpResponse;
+import org.apache.deft.web.http.protocol.HttpStatus;
public class NotFoundRequestHandler extends RequestHandler {
@@ -35,7 +36,7 @@ public class NotFoundRequestHandler exte
@Override
public void get(HttpRequest request, HttpResponse response) {
- response.setStatusCode(404);
+ response.setStatus(HttpStatus.CLIENT_ERROR_NOT_FOUND);
response.setHeader("Connection", "close");
response.write("Requested URL: " + request.getRequestedPath() + " was not found");
}
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandler.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandler.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandler.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandler.java Fri Aug 5 18:24:46 2011
@@ -22,27 +22,30 @@ package org.apache.deft.web.handler;
import java.lang.annotation.Annotation;
import java.util.Map;
-import org.apache.deft.web.Asynchronous;
-import org.apache.deft.web.Authenticated;
-import org.apache.deft.web.HttpVerb;
+import org.apache.deft.annotation.Asynchronous;
+import org.apache.deft.annotation.Authenticated;
import org.apache.deft.web.http.HttpRequest;
import org.apache.deft.web.http.HttpResponse;
+import org.apache.deft.web.http.protocol.HttpStatus;
+import org.apache.deft.web.http.protocol.HttpVerb;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Maps;
-public abstract class RequestHandler {
+public abstract class RequestHandler implements Cloneable {
private final ImmutableMap<HttpVerb, Boolean> asynchVerbs;
private final ImmutableMap<HttpVerb, Boolean> authVerbs;
public RequestHandler() {
+
Map<HttpVerb, Boolean> asyncV = Maps.newHashMap();
Map<HttpVerb, Boolean> authV = Maps.newHashMap();
for (HttpVerb verb : HttpVerb.values()) {
- authV.put(verb, isMethodAnnotated(verb, Authenticated.class));
asyncV.put(verb, isMethodAnnotated(verb, Asynchronous.class));
+ authV.put(verb, isMethodAnnotated(verb, Authenticated.class));
}
+
asynchVerbs = ImmutableMap.copyOf(asyncV);
authVerbs = ImmutableMap.copyOf(authV);
}
@@ -66,31 +69,37 @@ public abstract class RequestHandler {
// Default implementation of HttpMethods return a 501 page
public void get(HttpRequest request, HttpResponse response) {
- response.setStatusCode(501);
+ response.setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
response.write("");
}
public void post(HttpRequest request, HttpResponse response) {
- response.setStatusCode(501);
+ response.setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
response.write("");
}
public void put(HttpRequest request, HttpResponse response) {
- response.setStatusCode(501);
+ response.setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
response.write("");
}
public void delete(HttpRequest request, HttpResponse response) {
- response.setStatusCode(501);
+ response.setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
response.write("");
}
public void head(HttpRequest request, HttpResponse response) {
- response.setStatusCode(501);
+ response.setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
response.write("");
}
public String getCurrentUser(HttpRequest request) {
return null;
}
+
+ /** @{inheritDoc */
+ @Override
+ public Object clone() throws CloneNotSupportedException {
+ return super.clone();
+ }
}
Added: incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandlerFactory.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandlerFactory.java?rev=1154336&view=auto
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandlerFactory.java (added)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandlerFactory.java Fri Aug 5 18:24:46 2011
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.deft.web.handler;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * Factory for the creation and retrieval of <code>RequestHandler</code> types.
+ */
+public class RequestHandlerFactory {
+
+ /**
+ * The <code>Logger</code>.
+ */
+ private final static Logger logger = LoggerFactory.getLogger(RequestHandlerFactory.class);
+
+ /**
+ * Clone the given instance of <code>RequestHandler</code>.
+ *
+ * @param handler the <code>RequestHandler</code> to clone.
+ * @return a new instance, or <code>null</code> on any problem.
+ */
+ @SuppressWarnings("unchecked")
+ public static <T extends RequestHandler> T cloneHandler(T handler) {
+
+ if (handler != null) {
+ try {
+ return (T) handler.clone();
+ } catch (CloneNotSupportedException e) {
+ logger.error("Could not clone RequestHandler", e);
+ }
+ }
+
+ return null;
+ }
+}
Propchange: incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/RequestHandlerFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/StaticContentHandler.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/StaticContentHandler.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/StaticContentHandler.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/handler/StaticContentHandler.java Fri Aug 5 18:24:46 2011
@@ -27,6 +27,7 @@ import org.apache.deft.util.DateUtil;
import org.apache.deft.web.http.HttpException;
import org.apache.deft.web.http.HttpRequest;
import org.apache.deft.web.http.HttpResponse;
+import org.apache.deft.web.http.protocol.HttpStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,9 +74,9 @@ public class StaticContentHandler extend
final String path = request.getRequestedPath();
final File file = new File(path.substring(1)); // remove the leading '/'
if (!file.exists()) {
- throw new HttpException(404);
+ throw new HttpException(HttpStatus.CLIENT_ERROR_NOT_FOUND);
} else if (!file.isFile()) {
- throw new HttpException(403, path + "is not a file");
+ throw new HttpException(HttpStatus.CLIENT_ERROR_FORBIDDEN, path + "is not a file");
}
final long lastModified = file.lastModified();
@@ -90,7 +91,7 @@ public class StaticContentHandler extend
if (ifModifiedSince != null) {
final long ims = DateUtil.parseToMilliseconds(ifModifiedSince);
if (lastModified <= ims) {
- response.setStatusCode(304); // Not Modified
+ response.setStatus(HttpStatus.REDIRECTION_NOT_MODIFIED);
logger.debug("not modified");
return;
}
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpException.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpException.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpException.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpException.java Fri Aug 5 18:24:46 2011
@@ -19,23 +19,47 @@
*/
package org.apache.deft.web.http;
+import org.apache.deft.web.http.protocol.HttpStatus;
+
+/**
+ * Representation of an exception thrown by the server through the HTTP
+ * protocol.
+ */
public class HttpException extends RuntimeException {
+ /** Serial Version UID */
private static final long serialVersionUID = 8066634515515557043L;
- private final int statusCode;
+ /** The HTTP status for this exception. */
+ private final HttpStatus status;
- public HttpException(int statusCode) {
- this(statusCode, "");
+ /**
+ * Create an instance of this type, with the given <code>HttpStatus</code>
+ * and an empty message.
+ *
+ * @param status the <code>HttpStatus</code> to apply.
+ */
+ public HttpException(HttpStatus status) {
+ this(status, "");
}
- public HttpException(int statusCode, String message) {
+ /**
+ * Create an instance of this type, with the given <code>HttpStatus</code>
+ * and message.
+ *
+ * @param status the <code>HttpStatus</code> to apply.
+ */
+ public HttpException(HttpStatus status, String message) {
super(message);
- this.statusCode = statusCode;
+ this.status = status;
}
- public int getStatusCode() {
- return statusCode;
+ /**
+ * Retrieve the <code>HttpStatus</code> represented by this exception.
+ *
+ * @return the represented <code>HttpStatus</code>.
+ */
+ public HttpStatus getStatus() {
+ return status;
}
-
}
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequest.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequest.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequest.java Fri Aug 5 18:24:46 2011
@@ -23,7 +23,7 @@ import java.net.InetAddress;
import java.util.Collection;
import java.util.Map;
-import org.apache.deft.web.HttpVerb;
+import org.apache.deft.web.http.protocol.HttpVerb;
/**
* An HTTP request received from a client
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestDispatcher.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestDispatcher.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestDispatcher.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestDispatcher.java Fri Aug 5 18:24:46 2011
@@ -19,11 +19,16 @@
*/
package org.apache.deft.web.http;
-import org.apache.deft.web.HttpVerb;
import org.apache.deft.web.handler.RequestHandler;
+import org.apache.deft.web.http.protocol.HttpVerb;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+/**
+ * The <code>RequestDispatcher</code> is responsible for invoking the
+ * appropriate <code>RequestHandler</code> method for the current
+ * <code>HttpRequest</code>.
+ */
public class HttpRequestDispatcher {
private static final Logger logger = LoggerFactory.getLogger(HttpRequestDispatcher.class);
@@ -56,7 +61,7 @@ public class HttpRequestDispatcher {
// TODO send "not supported page (501) back to client"
}
} catch (HttpException he) {
- response.setStatusCode(he.getStatusCode());
+ response.setStatus(he.getStatus());
response.write(he.getMessage());
if (rh.isMethodAsynchronous(request.getMethod())) {
response.finish();
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestImpl.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestImpl.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestImpl.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpRequestImpl.java Fri Aug 5 18:24:46 2011
@@ -29,7 +29,7 @@ import java.util.regex.Pattern;
import org.apache.deft.io.IOLoop;
import org.apache.deft.util.ArrayUtil;
-import org.apache.deft.web.HttpVerb;
+import org.apache.deft.web.http.protocol.HttpVerb;
import com.google.common.base.Charsets;
import com.google.common.base.Strings;
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponse.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponse.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponse.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponse.java Fri Aug 5 18:24:46 2011
@@ -21,6 +21,8 @@ package org.apache.deft.web.http;
import java.io.File;
+import org.apache.deft.web.http.protocol.HttpStatus;
+
/**
* An HTTP response build and sent to a client in response to a
* {@link HttpRequest}
@@ -28,12 +30,11 @@ import java.io.File;
public interface HttpResponse {
/**
- * Set this HTTP Response status (or alos called return code). 200 for OK,
- * 404 for not found, etc..
+ * Set the HTTP Response status (return) code, such as 200 for success.
*
- * @param sc the status code
+ * @param status the <code>HttpStatus</code> to apply.
*/
- void setStatusCode(int sc);
+ void setStatus(HttpStatus status);
/**
* Set an HTTP header value. If the header doesn't exist, it will be added.
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponseImpl.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponseImpl.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponseImpl.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/HttpResponseImpl.java Fri Aug 5 18:24:46 2011
@@ -39,6 +39,7 @@ import org.apache.deft.util.Closeables;
import org.apache.deft.util.CookieUtil;
import org.apache.deft.util.DateUtil;
import org.apache.deft.util.HttpUtil;
+import org.apache.deft.web.http.protocol.HttpStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,7 +55,7 @@ public class HttpResponseImpl implements
private final HttpProtocol protocol;
private final SelectionKey key;
- private int statusCode = 200; // default response status code
+ private HttpStatus status = HttpStatus.SUCCESS_ACCEPTED;
private final Map<String, String> headers = new HashMap<String, String>();
private final Map<String, String> cookies = Maps.newHashMap();
@@ -70,8 +71,8 @@ public class HttpResponseImpl implements
}
@Override
- public void setStatusCode(int sc) {
- statusCode = sc;
+ public void setStatus(HttpStatus status) {
+ this.status = status;
}
@Override
@@ -246,7 +247,7 @@ public class HttpResponseImpl implements
}
private String createInitalLineAndHeaders() {
- StringBuilder sb = new StringBuilder(HttpUtil.createInitialLine(statusCode));
+ StringBuilder sb = new StringBuilder(status.line());
for (Map.Entry<String, String> header : headers.entrySet()) {
sb.append(header.getKey());
sb.append(": ");
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/AsynchronousHttpClient.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/AsynchronousHttpClient.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/AsynchronousHttpClient.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/AsynchronousHttpClient.java Fri Aug 5 18:24:46 2011
@@ -30,7 +30,7 @@ import org.apache.deft.util.NopAsyncResu
import org.apache.deft.util.UrlUtil;
import org.apache.deft.web.AsyncCallback;
import org.apache.deft.web.AsyncResult;
-import org.apache.deft.web.HttpVerb;
+import org.apache.deft.web.http.protocol.HttpVerb;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Modified: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/Request.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/Request.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/Request.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/client/Request.java Fri Aug 5 18:24:46 2011
@@ -22,8 +22,8 @@ package org.apache.deft.web.http.client;
import java.net.MalformedURLException;
import java.net.URL;
-import org.apache.deft.web.HttpVerb;
-import org.apache.deft.web.http.ContentType;
+import org.apache.deft.web.http.protocol.ContentType;
+import org.apache.deft.web.http.protocol.HttpVerb;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
Copied: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/ContentType.java (from r1153986, incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/ContentType.java)
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/ContentType.java?p2=incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/ContentType.java&p1=incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/ContentType.java&r1=1153986&r2=1154336&rev=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/ContentType.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/ContentType.java Fri Aug 5 18:24:46 2011
@@ -17,7 +17,7 @@
* under the License.
*
*/
-package org.apache.deft.web.http;
+package org.apache.deft.web.http.protocol;
/**
* A collection of known content types, for convenience.
Added: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpStatus.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpStatus.java?rev=1154336&view=auto
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpStatus.java (added)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpStatus.java Fri Aug 5 18:24:46 2011
@@ -0,0 +1,215 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.deft.web.http.protocol;
+
+/**
+ * An <code>Enumeration</code> of all known HTTP status codes.
+ */
+public enum HttpStatus {
+
+ /**
+ * 200 - OK
+ */
+ SUCCESS_OK(200, "HTTP/1.1 200 OK"),
+ /**
+ * 201 - Created
+ */
+ SUCCESS_CREATED(201, "HTTP/1.1 201 Created"),
+ /**
+ * 202 - Accepted
+ */
+ SUCCESS_ACCEPTED(202, "HTTP/1.1 202 Accepted"),
+ /**
+ * 203 - Non-Authoritative Information
+ */
+ SUCCESS_NON_AUTHORATIVE_INFORMATION(203, "HTTP/1.1 203 Non-Authoritative Information"),
+ /**
+ * 204 - No Content
+ */
+ SUCCESS_NO_CONTENT(204, "HTTP/1.1 204 No Content"),
+ /**
+ * 205 - Reset Content
+ */
+ SUCCESS_RESET_CONTENT(205, "HTTP/1.1 205 Reset Content"),
+ /**
+ * 206 - Created
+ */
+ SUCCESS_PARTIAL_CONTENT(206, "HTTP/1.1 206 Partial Content"),
+
+ /**
+ * 300 - Multiple Choices
+ */
+ REDIRECTION_MULTIPLE_CHOICES(300, "HTTP/1.1 300 Multiple Choices"),
+ /**
+ * 301 - Moved Permanently
+ */
+ REDIRECTION_MOVED_PERMANENTLY(301, "HTTP/1.1 301 Moved Permanently"),
+ /**
+ * 302 - Found / Moved Temporarily
+ */
+ REDIRECTION_FOUND(302, "HTTP/1.1 302 Found"),
+ /**
+ * 303 - See Others
+ */
+ REDIRECTION_SEE_OTHER(303, "HTTP/1.1 303 See Other"),
+ /**
+ * 304 - Not Modified
+ */
+ REDIRECTION_NOT_MODIFIED(304, "HTTP/1.1 304 Not Modified"),
+ /**
+ * 305 - Use Proxy
+ */
+ REDIRECTION_USE_PROXY(305, "HTTP/1.1 305 Use Proxy"),
+ /**
+ * 307 - Temporary Redirect
+ */
+ REDIRECTION_TEMPORARILY_REDIRECT(307, "HTTP/1.1 307 Temporary Redirect"),
+
+ /**
+ * 400 - Bad Request
+ */
+ CLIENT_ERROR_BAD_REQUEST(400, "HTTP/1.1 400 Bad Request"),
+ /**
+ * 401 - Unauthorized
+ */
+ CLIENT_ERROR_UNAUTHORIZED(401, "HTTP/1.1 401 Unauthorized"),
+ /**
+ * 403 - Forbidden
+ */
+ CLIENT_ERROR_FORBIDDEN(403, "HTTP/1.1 403 Forbidden"),
+ /**
+ * 404 - Not Found
+ */
+ CLIENT_ERROR_NOT_FOUND(404, "HTTP/1.1 404 Not Found"),
+ /**
+ * 405 - Method Not Allowed
+ */
+ CLIENT_ERROR_METHOD_NOT_ALLOWED(405, "HTTP/1.1 405 Method Not Allowed"),
+ /**
+ * 406 - Not Acceptable
+ */
+ CLIENT_ERROR_NOT_ACCEPTABLE(406, "HTTP/1.1 406 Not Acceptable"),
+ /**
+ * 407 - Proxy Authentication Required
+ */
+ CLIENT_ERROR_PROXY_AUTHENTICATION_REQUIRED(407, "HTTP/1.1 407 Proxy Authentication Required"),
+ /**
+ * 408 - Request Timeout
+ */
+ CLIENT_ERROR_REQUEST_TIMEOUT(408, "HTTP/1.1 408 Request Timeout"),
+ /**
+ * 409 - Conflict
+ */
+ CLIENT_ERROR_CONFLICT(409, "HTTP/1.1 409 Conflict"),
+ /**
+ * 410 - Gone
+ */
+ CLIENT_ERROR_GONE(410, "HTTP/1.1 410 Gone"),
+ /**
+ * 411 - Length Required
+ */
+ CLIENT_ERROR_LENGTH_REQUIRED(411, "HTTP/1.1 411 Length Required"),
+ /**
+ * 412 - Precondition Failed
+ */
+ CLIENT_ERROR_PRECONDITION_FAILED(412, "HTTP/1.1 412 Precondition Failed"),
+ /**
+ * 413 - Request Entity Too Large
+ */
+ CLIENT_ERROR_REQUEST_ENTITY_TOO_LARGE(413, "HTTP/1.1 413 Request Entity Too Large"),
+ /**
+ * 414 - Bad Request
+ */
+ CLIENT_ERROR_REQUEST_URI_TOO_LONG(414, "HTTP/1.1 414 Request-URI Too Long"),
+ /**
+ * 415 - Unsupported Media Type
+ */
+ CLIENT_ERROR_UNSUPPORTED_MEDIA_TYPE(415, "HTTP/1.1 415 Unsupported Media Type"),
+ /**
+ * 416 - Requested Range Not Satisfiable
+ */
+ CLIENT_ERROR_REQUESTED_RANGE_NOT_SATISFIABLE(416, "HTTP/1.1 416 Requested Range Not Satisfiable"),
+ /**
+ * 417 - Expectation Failed
+ */
+ CLIENT_ERROR_EXPECTATION_FAILED(417, "HTTP/1.1 417 Expectation Failed"),
+
+ /**
+ * 500 - Internal Server Error
+ */
+ SERVER_ERROR_INTERNAL_SERVER_ERROR(500, "HTTP/1.1 500 Internal Server Error"),
+ /**
+ * 501 - Not Implemented
+ */
+ SERVER_ERROR_NOT_IMPLEMENTED(501, "HTTP/1.1 501 Not Implemented"),
+ /**
+ * 502 - Bad Gateway
+ */
+ SERVER_ERROR_BAD_GATEWAY(502, "HTTP/1.1 502 Bad Gateway"),
+ /**
+ * 503 - Service Unavailable
+ */
+ SERVER_ERROR_SERVICE_UNAVAILABLE(503, "HTTP/1.1 503 Service Unavailable"),
+ /**
+ * 504 - Gateway Timeout
+ */
+ SERVER_ERROR_GATEWAY_TIMEOUT(504, "HTTP/1.1 504 Gateway Timeout"),
+ /**
+ * 505 - HTTP Version Not Supported
+ */
+ SERVER_ERROR_HTTP_VERSION_NOT_SUPPORTED(505, "HTTP/1.1 505 HTTP Version Not Supported");
+
+ /** The code associated with this status, for example "404" for "Not Found". */
+ private int code;
+
+ /**
+ * The line associated with this status, "HTTP/1.1 501 Not Implemented".
+ */
+ private String line;
+
+ /**
+ * Create an instance of this type.
+ *
+ * @param code the status code.
+ * @param phrase the associated phrase.
+ */
+ private HttpStatus(int code, String phrase) {
+ this.code = code;
+ line = phrase;
+ }
+
+ /**
+ * Retrieve the status code for this instance.
+ *
+ * @return the status code.
+ */
+ public int code() {
+ return code;
+ }
+
+ /**
+ * Retrieve the status line for this instance.
+ *
+ * @return the status line.
+ */
+ public String line() {
+ return line + "\r\n";
+ }
+}
Propchange: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpStatus.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpVerb.java (from r1153986, incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpVerb.java)
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpVerb.java?p2=incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpVerb.java&p1=incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpVerb.java&r1=1153986&r2=1154336&rev=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/main/java/org/apache/deft/web/HttpVerb.java (original)
+++ incubator/deft/sandbox/src/main/java/org/apache/deft/web/http/protocol/HttpVerb.java Fri Aug 5 18:24:46 2011
@@ -17,14 +17,56 @@
* under the License.
*
*/
-package org.apache.deft.web;
+package org.apache.deft.web.http.protocol;
/**
- * <code>Enumeration</code> of all available HTTP verbs, as defined by <a
+ * An <code>Enumeration</code> of all available HTTP verbs, as defined by <a
* href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html">Hypertext
* Transfer Protocol -- HTTP/1.1 (RFC 2616)</a>.
*/
public enum HttpVerb {
- GET, HEAD, POST, PUT, DELETE, OPTIONS, TRACE, CONNECT;
+ /**
+ * "The OPTIONS method represents a request for information about the
+ * communication options available on the request/response chain identified
+ * by the Request-URI." (RFC 2616, 9.2)
+ */
+ OPTIONS,
+ /**
+ * "The GET method means retrieve whatever information (in the form of
+ * an entity) is identified by the Request-URI." (RFC 2616, 9.3)
+ */
+ GET,
+ /**
+ * "The HEAD method is identical to GET except that the server MUST NOT
+ * return a message-body in the response." (RFC 2616, 9.4)
+ */
+ HEAD,
+ /**
+ * "The POST method is used to request that the origin server accept
+ * the entity enclosed in the request as a new subordinate of the resource
+ * identified by the Request-URI in the Request-Line." (RFC 2616, 9.5)
+ */
+ POST,
+ /**
+ * "The PUT method requests that the enclosed entity be stored under
+ * the supplied Request-URI." (RFC 2616, 9.6)
+ */
+ PUT,
+ /**
+ * "The DELETE method requests that the origin server delete the
+ * resource identified by the Request-URI." (RFC 2616, 9.7)
+ */
+ DELETE,
+ /**
+ * "The TRACE method is used to invoke a remote, application-layer
+ * loop- back of the request message." (RFC 2616, 9.8)
+ */
+ TRACE,
+ /**
+ * "This specification reserves the method name CONNECT for use with a
+ * proxy that can dynamically switch to being a tunnel " (RFC 2616,
+ * 9.9)
+ */
+ CONNECT;
}
Modified: incubator/deft/sandbox/src/test/java/org/apache/deft/configuration/AnnotationsScannerTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/configuration/AnnotationsScannerTest.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/configuration/AnnotationsScannerTest.java (original)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/configuration/AnnotationsScannerTest.java Fri Aug 5 18:24:46 2011
@@ -37,7 +37,7 @@ public class AnnotationsScannerTest {
AnnotationsScanner scanner = new AnnotationsScanner();
Map<String, RequestHandler> handlers = scanner.findHandlers("org.apache.deft.example.handler");
- assertEquals(3, handlers.size());
+ assertEquals(4, handlers.size());
}
@Test
Modified: incubator/deft/sandbox/src/test/java/org/apache/deft/web/ApplicationTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/ApplicationTest.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/ApplicationTest.java (original)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/ApplicationTest.java Fri Aug 5 18:24:46 2011
@@ -20,6 +20,7 @@
package org.apache.deft.web;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import java.util.HashMap;
@@ -110,16 +111,20 @@ public class ApplicationTest {
assertEquals(NotFoundRequestHandler.getInstance(), app.getHandler(request));
request = new HttpRequestImpl("GET / HTTP/1.1", headers);
- assertEquals(handler1, app.getHandler(request));
+ assertFalse(handler1.equals(app.getHandler(request)));
+ assertEquals(handler1.getClass(), app.getHandler(request).getClass());
request = new HttpRequestImpl("GET /persons/1911 HTTP/1.1", headers);
- assertEquals(handler2, app.getHandler(request));
+ assertFalse(handler2.equals(app.getHandler(request)));
+ assertEquals(handler2.getClass(), app.getHandler(request).getClass());
request = new HttpRequestImpl("GET /persons/phone_numbers HTTP/1.1", headers);
- assertEquals(handler3, app.getHandler(request));
+ assertFalse(handler3.equals(app.getHandler(request)));
+ assertEquals(handler3.getClass(), app.getHandler(request).getClass());
request = new HttpRequestImpl("GET /pets/123 HTTP/1.1", headers);
- assertEquals(handler4, app.getHandler(request));
+ assertFalse(handler4.equals(app.getHandler(request)));
+ assertEquals(handler4.getClass(), app.getHandler(request).getClass());
// Verify that BadRequestRequestHandler is returned if request does not
// include Host header
Modified: incubator/deft/sandbox/src/test/java/org/apache/deft/web/DeftSystemTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/DeftSystemTest.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/DeftSystemTest.java (original)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/DeftSystemTest.java Fri Aug 5 18:24:46 2011
@@ -43,6 +43,8 @@ import java.util.concurrent.ExecutorServ
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
+import org.apache.deft.annotation.Asynchronous;
+import org.apache.deft.annotation.Authenticated;
import org.apache.deft.configuration.Configuration;
import org.apache.deft.example.keyvalue.KeyValueStore;
import org.apache.deft.example.keyvalue.KeyValueStoreClient;
@@ -52,6 +54,7 @@ import org.apache.deft.web.handler.Reque
import org.apache.deft.web.http.HttpException;
import org.apache.deft.web.http.HttpRequest;
import org.apache.deft.web.http.client.AsynchronousHttpClient;
+import org.apache.deft.web.http.protocol.HttpStatus;
import org.apache.http.Header;
import org.apache.http.HttpResponse;
import org.apache.http.ProtocolVersion;
@@ -179,7 +182,7 @@ public class DeftSystemTest {
private static class ThrowingHttpExceptionRequestHandler extends RequestHandler {
@Override
public void get(org.apache.deft.web.http.HttpRequest request, org.apache.deft.web.http.HttpResponse response) {
- throw new HttpException(500, "exception message");
+ throw new HttpException(HttpStatus.SERVER_ERROR_INTERNAL_SERVER_ERROR, "exception message");
}
}
@@ -187,21 +190,21 @@ public class DeftSystemTest {
@Asynchronous
@Override
public void get(org.apache.deft.web.http.HttpRequest request, org.apache.deft.web.http.HttpResponse response) {
- throw new HttpException(500, "exception message");
+ throw new HttpException(HttpStatus.SERVER_ERROR_INTERNAL_SERVER_ERROR, "exception message");
}
}
public static class NoBodyRequestHandler extends RequestHandler {
@Override
public void get(HttpRequest request, org.apache.deft.web.http.HttpResponse response) {
- response.setStatusCode(200);
+ response.setStatus(HttpStatus.SUCCESS_ACCEPTED);
}
}
public static class MovedPermanentlyRequestHandler extends RequestHandler {
@Override
public void get(HttpRequest request, org.apache.deft.web.http.HttpResponse response) {
- response.setStatusCode(301);
+ response.setStatus(HttpStatus.REDIRECTION_MOVED_PERMANENTLY);
response.setHeader("Location", "/");
}
}
Added: incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerFactoryTest.java?rev=1154336&view=auto
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerFactoryTest.java (added)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerFactoryTest.java Fri Aug 5 18:24:46 2011
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.deft.web.handler;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import org.junit.Test;
+
+/**
+ * Test cases for {@link RequestHandlerFactory}.
+ */
+public class RequestHandlerFactoryTest {
+
+ private class TestRequestHandler extends RequestHandler {
+ // Do nothing.
+ }
+
+ @Test
+ public void testCloneHandler() {
+
+ TestRequestHandler handler = new TestRequestHandler();
+
+ RequestHandler created = RequestHandlerFactory.cloneHandler(handler);
+ assertEquals(handler.getClass(), created.getClass());
+ }
+
+ @Test
+ public void testCloneHandlerHandlesNull() {
+
+ RequestHandler created = RequestHandlerFactory.cloneHandler(null);
+ assertNull(created);
+ }
+}
Propchange: incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerFactoryTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerTest.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerTest.java (original)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/handler/RequestHandlerTest.java Fri Aug 5 18:24:46 2011
@@ -20,14 +20,18 @@
package org.apache.deft.web.handler;
import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
-import org.apache.deft.web.Asynchronous;
-import org.apache.deft.web.Authenticated;
-import org.apache.deft.web.HttpVerb;
-import org.apache.deft.web.handler.RequestHandler;
+import org.apache.deft.annotation.Asynchronous;
+import org.apache.deft.annotation.Authenticated;
import org.apache.deft.web.http.HttpRequest;
import org.apache.deft.web.http.HttpResponse;
+import org.apache.deft.web.http.protocol.HttpStatus;
+import org.apache.deft.web.http.protocol.HttpVerb;
import org.junit.Test;
public class RequestHandlerTest {
@@ -55,8 +59,13 @@ public class RequestHandlerTest {
}
+ private class TestRequestHandler extends RequestHandler {
+ // Do nothing.
+ }
+
@Test
public void testAsynchronousAnnotations() {
+
RequestHandler rh1 = new RequestHandler1();
RequestHandler rh2 = new RequestHandler2();
@@ -79,4 +88,66 @@ public class RequestHandlerTest {
assertFalse(rh2.isMethodAuthenticated(HttpVerb.PUT));
assertTrue(rh2.isMethodAuthenticated(HttpVerb.POST));
}
+
+ @Test
+ public void testGet() {
+
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ new TestRequestHandler().get(request, response);
+ verify(response, times(1)).setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
+ verify(response, times(1)).write("");
+ }
+
+ @Test
+ public void testPost() {
+
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ new TestRequestHandler().post(request, response);
+ verify(response, times(1)).setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
+ verify(response, times(1)).write("");
+ }
+
+ @Test
+ public void testPut() {
+
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ new TestRequestHandler().put(request, response);
+ verify(response, times(1)).setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
+ verify(response, times(1)).write("");
+ }
+
+ @Test
+ public void testDelete() {
+
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ new TestRequestHandler().delete(request, response);
+ verify(response, times(1)).setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
+ verify(response, times(1)).write("");
+ }
+
+ @Test
+ public void testHead() {
+
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ new TestRequestHandler().head(request, response);
+ verify(response, times(1)).setStatus(HttpStatus.SERVER_ERROR_NOT_IMPLEMENTED);
+ verify(response, times(1)).write("");
+ }
+
+ @Test
+ public void testGetCurrentUser() {
+
+ HttpRequest request = mock(HttpRequest.class);
+ assertNull(new TestRequestHandler().getCurrentUser(request));
+ }
}
Added: incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpExceptionTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpExceptionTest.java?rev=1154336&view=auto
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpExceptionTest.java (added)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpExceptionTest.java Fri Aug 5 18:24:46 2011
@@ -0,0 +1,50 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.deft.web.http;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
+import org.apache.deft.web.http.protocol.HttpStatus;
+import org.junit.Test;
+
+/**
+ * Test cases for {@link HttpException}.
+ */
+public class HttpExceptionTest {
+
+ @Test
+ public void testHttpException() {
+
+ HttpException exception = new HttpException(HttpStatus.SERVER_ERROR_INTERNAL_SERVER_ERROR);
+
+ assertEquals(HttpStatus.SERVER_ERROR_INTERNAL_SERVER_ERROR, exception.getStatus());
+ assertTrue(exception.getMessage().isEmpty());
+ }
+
+ @Test
+ public void testHttpExceptionWithMessage() {
+
+ HttpException exception = new HttpException(HttpStatus.CLIENT_ERROR_NOT_FOUND, "testMessage");
+
+ assertEquals(HttpStatus.CLIENT_ERROR_NOT_FOUND, exception.getStatus());
+ assertEquals("testMessage", exception.getMessage());
+ }
+}
Propchange: incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpExceptionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpRequestDispatcherTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpRequestDispatcherTest.java?rev=1154336&view=auto
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpRequestDispatcherTest.java (added)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpRequestDispatcherTest.java Fri Aug 5 18:24:46 2011
@@ -0,0 +1,192 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.deft.web.http;
+
+import static org.mockito.Matchers.anyString;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import org.apache.deft.annotation.Asynchronous;
+import org.apache.deft.web.handler.RequestHandler;
+import org.apache.deft.web.http.protocol.HttpStatus;
+import org.apache.deft.web.http.protocol.HttpVerb;
+import org.junit.Test;
+
+/**
+ * Test cases for {@link HttpRequestDispatcher}.
+ */
+public class HttpRequestDispatcherTest {
+
+ private class TestRequestHandler extends RequestHandler {
+
+ @Override
+ public void get(HttpRequest request, HttpResponse response) {
+ response.write("get");
+ }
+
+ @Override
+ public void post(HttpRequest request, HttpResponse response) {
+ response.write("post");
+ }
+
+ @Override
+ public void head(HttpRequest request, HttpResponse response) {
+ response.write("head");
+ }
+
+ @Override
+ public void put(HttpRequest request, HttpResponse response) {
+ response.write("put");
+ }
+
+ @Override
+ public void delete(HttpRequest request, HttpResponse response) {
+ response.write("delete");
+ }
+ }
+
+ @Test
+ public void testDispatchForGet() {
+
+ RequestHandler handler = new TestRequestHandler();
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ when(request.getMethod()).thenReturn(HttpVerb.GET);
+
+ HttpRequestDispatcher.dispatch(handler, request, response);
+ verify(response, times(1)).write("get");
+ }
+
+ @Test
+ public void testDispatchForPost() {
+
+ RequestHandler handler = new TestRequestHandler();
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ when(request.getMethod()).thenReturn(HttpVerb.POST);
+
+ HttpRequestDispatcher.dispatch(handler, request, response);
+ verify(response, times(1)).write("post");
+ }
+
+ @Test
+ public void testDispatchForHead() {
+
+ RequestHandler handler = new TestRequestHandler();
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ when(request.getMethod()).thenReturn(HttpVerb.HEAD);
+
+ HttpRequestDispatcher.dispatch(handler, request, response);
+ verify(response, times(1)).write("head");
+ }
+
+ @Test
+ public void testDispatchForPut() {
+
+ RequestHandler handler = new TestRequestHandler();
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ when(request.getMethod()).thenReturn(HttpVerb.PUT);
+
+ HttpRequestDispatcher.dispatch(handler, request, response);
+ verify(response, times(1)).write("put");
+ }
+
+ @Test
+ public void testDispatchForDelete() {
+
+ RequestHandler handler = new TestRequestHandler();
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ when(request.getMethod()).thenReturn(HttpVerb.DELETE);
+
+ HttpRequestDispatcher.dispatch(handler, request, response);
+ verify(response, times(1)).write("delete");
+ }
+
+ @Test
+ public void testDispatchForOptions() {
+
+ RequestHandler handler = new TestRequestHandler();
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ when(request.getMethod()).thenReturn(HttpVerb.OPTIONS);
+
+ HttpRequestDispatcher.dispatch(handler, request, response);
+ verify(response, times(0)).write(anyString());
+ }
+
+ @Test
+ public void testDispatchForTrace() {
+
+ RequestHandler handler = new TestRequestHandler();
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ when(request.getMethod()).thenReturn(HttpVerb.TRACE);
+
+ HttpRequestDispatcher.dispatch(handler, request, response);
+ verify(response, times(0)).write(anyString());
+ }
+
+ @Test
+ public void testDispatchForConnect() {
+
+ RequestHandler handler = new TestRequestHandler();
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ when(request.getMethod()).thenReturn(HttpVerb.CONNECT);
+
+ HttpRequestDispatcher.dispatch(handler, request, response);
+ verify(response, times(0)).write(anyString());
+ }
+
+ @Test
+ public void testDispatchForHttpException() {
+
+ RequestHandler handler = new TestRequestHandler() {
+ @Override
+ @Asynchronous
+ public void get(HttpRequest request, HttpResponse response) {
+ throw new HttpException(HttpStatus.CLIENT_ERROR_BAD_REQUEST, "testMessage");
+ }
+ };
+
+ HttpRequest request = mock(HttpRequest.class);
+ HttpResponse response = mock(HttpResponse.class);
+
+ when(request.getMethod()).thenReturn(HttpVerb.GET);
+
+ HttpRequestDispatcher.dispatch(handler, request, response);
+ verify(response, times(1)).setStatus(HttpStatus.CLIENT_ERROR_BAD_REQUEST);
+ verify(response, times(1)).write("testMessage");
+ verify(response, times(1)).finish();
+ }
+}
Propchange: incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/HttpRequestDispatcherTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/AsynchronousHttpClientTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/AsynchronousHttpClientTest.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/AsynchronousHttpClientTest.java (original)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/AsynchronousHttpClientTest.java Fri Aug 5 18:24:46 2011
@@ -19,15 +19,13 @@
*/
package org.apache.deft.web.http.client;
-import static org.junit.Assert.*;
import static org.apache.deft.web.http.client.AsynchronousHttpClient.HTTP_VERSION;
import static org.apache.deft.web.http.client.AsynchronousHttpClient.NEWLINE;
import static org.apache.deft.web.http.client.AsynchronousHttpClient.USER_AGENT_HEADER;
+import static org.junit.Assert.assertEquals;
import org.apache.deft.web.AsyncResult;
-import org.apache.deft.web.HttpVerb;
-import org.apache.deft.web.http.client.AsynchronousHttpClient;
-import org.apache.deft.web.http.client.Response;
+import org.apache.deft.web.http.protocol.HttpVerb;
import org.junit.Test;
/**
@@ -50,7 +48,7 @@ public class AsynchronousHttpClientTest
String expected = HttpVerb.GET + " /path/ " + HTTP_VERSION;
expected += "Host: testurl.com" + NEWLINE + USER_AGENT_HEADER;
expected += NEWLINE;
-
+
String actual = client.makeRequestLineAndHeaders();
assertEquals(expected, actual);
@@ -75,33 +73,33 @@ public class AsynchronousHttpClientTest
expected += NEWLINE + NEWLINE;
expected += "name=value";
expected += NEWLINE;
-
+
String actual = client.makeRequestLineAndHeaders();
assertEquals(expected, actual);
}
-
+
@Test
public void testMakeRequestLineAndHeadersWithZeroLengthBody() {
-
+
AsynchronousHttpClient client = new AsynchronousHttpClient() {
@Override
protected void doFetch(AsyncResult<Response> callback, long requestStarted) {
// Do nothing.
}
};
-
+
client.post("http://testurl.com/path/", "", null);
-
+
String expected = HttpVerb.POST + " /path/ " + HTTP_VERSION;
expected += "Host: testurl.com" + NEWLINE + USER_AGENT_HEADER;
expected += "Content-Type: application/x-www-form-urlencoded" + NEWLINE;
expected += "Content-Length: 0";
expected += NEWLINE + NEWLINE;
expected += NEWLINE;
-
+
String actual = client.makeRequestLineAndHeaders();
-
+
assertEquals(expected, actual);
}
}
Modified: incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/RequestTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/RequestTest.java?rev=1154336&r1=1154335&r2=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/RequestTest.java (original)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/client/RequestTest.java Fri Aug 5 18:24:46 2011
@@ -24,9 +24,8 @@ import static org.junit.Assert.assertTru
import java.util.Arrays;
-import org.apache.deft.web.HttpVerb;
-import org.apache.deft.web.http.ContentType;
-import org.apache.deft.web.http.client.Request;
+import org.apache.deft.web.http.protocol.ContentType;
+import org.apache.deft.web.http.protocol.HttpVerb;
import org.junit.Test;
import com.google.common.base.Charsets;
Copied: incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/ContentTypeTest.java (from r1153986, incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/ContentTypeTest.java)
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/ContentTypeTest.java?p2=incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/ContentTypeTest.java&p1=incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/ContentTypeTest.java&r1=1153986&r2=1154336&rev=1154336&view=diff
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/ContentTypeTest.java (original)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/ContentTypeTest.java Fri Aug 5 18:24:46 2011
@@ -17,11 +17,10 @@
* under the License.
*
*/
-package org.apache.deft.web.http;
+package org.apache.deft.web.http.protocol;
import static org.junit.Assert.assertTrue;
-import org.apache.deft.web.http.ContentType;
import org.junit.Test;
/**
Added: incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/HttpStatusTest.java
URL: http://svn.apache.org/viewvc/incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/HttpStatusTest.java?rev=1154336&view=auto
==============================================================================
--- incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/HttpStatusTest.java (added)
+++ incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/HttpStatusTest.java Fri Aug 5 18:24:46 2011
@@ -0,0 +1,66 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+package org.apache.deft.web.http.protocol;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Test cases for {@link HttpStatus}.
+ */
+public class HttpStatusTest {
+
+ private static int STATUS_CODE_COUNT = 37;
+
+ @Test
+ public void testCount() {
+ assertEquals(STATUS_CODE_COUNT, HttpStatus.values().length);
+ }
+
+ @Test
+ public void testCode() {
+
+ for (final HttpStatus status : HttpStatus.values()) {
+ if (status.name().startsWith("SUCCESS")) {
+ assertTrue("Incorrect: " + status.name(), status.code() >= 200 && status.code() < 300);
+ } else if (status.name().startsWith("REDIRECTION")) {
+ assertTrue("Incorrect: " + status.name(), status.code() >= 300 && status.code() < 400);
+ } else if (status.name().startsWith("CLIENT_ERROR")) {
+ assertTrue("Incorrect: " + status.name(), status.code() >= 400 && status.code() < 500);
+ } else if (status.name().startsWith("SERVER_ERROR")) {
+ assertTrue("Incorrect: " + status.name(), status.code() >= 500 && status.code() < 600);
+ } else {
+ assertTrue("Unknown: " + status.name(), false);
+ }
+ }
+ }
+
+ @Test
+ public void testLine() {
+
+ for (final HttpStatus status : HttpStatus.values()) {
+ assertNotNull(status.line());
+ assertTrue("Incorrect: " + status.name(), status.line().startsWith("HTTP/1.1 " + status.code()));
+ }
+ }
+}
Propchange: incubator/deft/sandbox/src/test/java/org/apache/deft/web/http/protocol/HttpStatusTest.java
------------------------------------------------------------------------------
svn:eol-style = native