Author: olamy
Date: Mon Feb 20 16:52:56 2012
New Revision: 1291366
URL: http://svn.apache.org/viewvc?rev=1291366&view=rev
Log:
[DIRECTMEMORY-61] start refactoring to be able to handle various Content-Type.
Modified:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java
Modified:
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java?rev=1291366&r1=1291365&r2=1291366&view=diff
==============================================================================
---
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
(original)
+++
incubator/directmemory/trunk/server/directmemory-server/src/main/java/org/apache/directmemory/server/services/CacheServlet.java
Mon Feb 20 16:52:56 2012
@@ -34,6 +34,7 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.MediaType;
import java.io.IOException;
/**
@@ -93,24 +94,34 @@ public class CacheServlet
String servletPath = req.getServletPath();
String key = retrieveKeyFromPath( path );
- try
+ String contentType = req.getContentType();
+
+ if ( StringUtils.startsWith( contentType, MediaType.APPLICATION_JSON )
)
{
- DirectMemoryCacheRequest cacheRequest = parser.buildRequest(
req.getInputStream() );
+ // application/json
- //exists ?
- if ( cacheService.retrieveByteArray( key ) == null )
+ try
{
- cacheService.putByteArray( key,
cacheRequest.getCacheContent(), cacheRequest.getExpiresIn() );
+ DirectMemoryCacheRequest cacheRequest = parser.buildRequest(
req.getInputStream() );
+
+ //exists ?
+ if ( cacheService.retrieveByteArray( key ) == null )
+ {
+ cacheService.putByteArray( key,
cacheRequest.getCacheContent(), cacheRequest.getExpiresIn() );
+ }
+ else
+ {
+ cacheService.updateByteArray( key,
cacheRequest.getCacheContent() );
+ }
}
- else
+ catch ( DirectMemoryCacheException e )
{
- cacheService.updateByteArray( key,
cacheRequest.getCacheContent() );
+ resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
e.getMessage() );
}
+ return;
}
- catch ( DirectMemoryCacheException e )
- {
- resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
e.getMessage() );
- }
+ resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "Content-Type '" + contentType + "' not supported" );
}
@Override
@@ -121,7 +132,7 @@ public class CacheServlet
String servletPath = req.getServletPath();
String key = retrieveKeyFromPath( path );
- // TODO if key == null -> BAD_REQUEST http response
+ // TODO if key == null -> BAD_REQUEST http response or SC_NO_CONTENT
(olamy: I prefer SC_NO_CONTENT )
cacheService.free( key );
}
@@ -148,18 +159,29 @@ public class CacheServlet
resp.sendError( HttpServletResponse.SC_NO_CONTENT, "No content for
key: " + key );
return;
}
- DirectMemoryCacheResponse response = new
DirectMemoryCacheResponse().setKey( key ).setCacheContent( bytes );
- try
- {
- // TODO directly write in output stream
- String json = writer.generateJsonResponse( response );
- resp.getWriter().write( json );
- }
- catch ( DirectMemoryCacheException e )
+ String acceptContentType = req.getHeader( "Accept" );
+
+ if ( StringUtils.contains( acceptContentType,
MediaType.APPLICATION_JSON ) )
{
- resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
e.getMessage() );
+ DirectMemoryCacheResponse response = new
DirectMemoryCacheResponse().setKey( key ).setCacheContent( bytes );
+
+ try
+ {
+ // TODO directly write in output stream
+ String json = writer.generateJsonResponse( response );
+ resp.getWriter().write( json );
+ resp.setContentType( MediaType.APPLICATION_JSON );
+ }
+ catch ( DirectMemoryCacheException e )
+ {
+ resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
e.getMessage() );
+ }
+ return;
}
+
+ resp.sendError( HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
+ "you must specify Accept with Content-Type you want in
the response" );
}
/**
Modified:
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java
URL:
http://svn.apache.org/viewvc/incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java?rev=1291366&r1=1291365&r2=1291366&view=diff
==============================================================================
---
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java
(original)
+++
incubator/directmemory/trunk/server/directmemory-server/src/test/java/org/apache/directmemory/server/services/CacheServletTest.java
Mon Feb 20 16:52:56 2012
@@ -34,6 +34,7 @@ import org.springframework.mock.web.Mock
import org.springframework.mock.web.MockServletContext;
import javax.servlet.http.HttpServletResponse;
+import javax.ws.rs.core.MediaType;
import java.io.ByteArrayInputStream;
import static org.junit.Assert.assertEquals;
@@ -70,6 +71,7 @@ public class CacheServletTest
{
MockHttpServletRequest request = new MockHttpServletRequest();
+ request.addHeader( "Accept", MediaType.APPLICATION_JSON );
MockHttpServletResponse response = new MockHttpServletResponse();
@@ -86,6 +88,7 @@ public class CacheServletTest
{
MockHttpServletRequest request = new MockHttpServletRequest();
+ request.addHeader( "Accept", MediaType.APPLICATION_JSON );
request.setServletPath( "cache" );
@@ -115,6 +118,8 @@ public class CacheServletTest
MockHttpServletRequest putRequest = new MockHttpServletRequest();
+ putRequest.setContentType( MediaType.APPLICATION_JSON );
+
putRequest.setServletPath( "cache" );
putRequest.setPathInfo( "/bordeaux" );
@@ -131,6 +136,8 @@ public class CacheServletTest
MockHttpServletRequest getRequest = new MockHttpServletRequest();
+ getRequest.addHeader( "Accept", MediaType.APPLICATION_JSON );
+
getRequest.setPathInfo( "/bordeaux" );
MockHttpServletResponse getResponse = new MockHttpServletResponse();
@@ -139,6 +146,8 @@ public class CacheServletTest
assertEquals( HttpServletResponse.SC_OK, getResponse.getStatus() );
+ assertEquals( MediaType.APPLICATION_JSON, getResponse.getContentType()
);
+
DirectMemoryCacheResponse response =
parser.buildResponse( new ByteArrayInputStream(
getResponse.getContentAsByteArray() ) );
@@ -166,6 +175,8 @@ public class CacheServletTest
MockHttpServletRequest putRequest = new MockHttpServletRequest();
+ putRequest.setContentType( MediaType.APPLICATION_JSON );
+
putRequest.setServletPath( "cache" );
putRequest.setPathInfo( "/bordeaux" );
@@ -184,6 +195,8 @@ public class CacheServletTest
MockHttpServletRequest getRequest = new MockHttpServletRequest();
+ getRequest.addHeader( "Accept", MediaType.APPLICATION_JSON );
+
getRequest.setPathInfo( "/bordeaux" );
MockHttpServletResponse getResponse = new MockHttpServletResponse();
@@ -212,6 +225,8 @@ public class CacheServletTest
MockHttpServletRequest putRequest = new MockHttpServletRequest();
+ putRequest.setContentType( MediaType.APPLICATION_JSON );
+
putRequest.setServletPath( "cache" );
putRequest.setPathInfo( "/bordeaux" );
@@ -228,6 +243,8 @@ public class CacheServletTest
MockHttpServletRequest getRequest = new MockHttpServletRequest();
+ getRequest.addHeader( "Accept", MediaType.APPLICATION_JSON );
+
getRequest.setPathInfo( "/bordeaux" );
MockHttpServletResponse getResponse = new MockHttpServletResponse();
@@ -236,6 +253,8 @@ public class CacheServletTest
assertEquals( HttpServletResponse.SC_OK, getResponse.getStatus() );
+ assertEquals( MediaType.APPLICATION_JSON, getResponse.getContentType()
);
+
DirectMemoryCacheResponse response =
parser.buildResponse( new ByteArrayInputStream(
getResponse.getContentAsByteArray() ) );
@@ -260,6 +279,8 @@ public class CacheServletTest
getRequest = new MockHttpServletRequest();
+ getRequest.addHeader( "Accept", MediaType.APPLICATION_JSON );
+
getRequest.setPathInfo( "/bordeaux" );
getResponse = new MockHttpServletResponse();