You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wink.apache.org by bl...@apache.org on 2009/09/09 23:15:18 UTC
svn commit: r813121 - in /incubator/wink/trunk:
wink-common/src/main/java/org/apache/wink/common/internal/providers/header/
wink-server/src/main/java/org/apache/wink/server/internal/contexts/
wink-server/src/test/java/org/apache/wink/server/internal/
Author: bluk
Date: Wed Sep 9 21:15:16 2009
New Revision: 813121
URL: http://svn.apache.org/viewvc?rev=813121&view=rev
Log:
Send a 400 when Accept header has invalid types
See [WINK-172]
Modified:
incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/header/MediaTypeHeaderDelegate.java
incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/contexts/HttpHeadersImpl.java
incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/CommonAcceptHeaderTest.java
Modified: incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/header/MediaTypeHeaderDelegate.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/header/MediaTypeHeaderDelegate.java?rev=813121&r1=813120&r2=813121&view=diff
==============================================================================
--- incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/header/MediaTypeHeaderDelegate.java (original)
+++ incubator/wink/trunk/wink-common/src/main/java/org/apache/wink/common/internal/providers/header/MediaTypeHeaderDelegate.java Wed Sep 9 21:15:16 2009
@@ -62,6 +62,11 @@
String main = all[0];
String[] mainArray = SLASH.split(main);
type = mainArray[0];
+ if ("".equals(type)) {
+ String errMsg = String.format(Messages.getMessage("mediaTypeWrongFormat"), value);
+ logger.error(errMsg);
+ throw new IllegalArgumentException(errMsg);
+ }
if (mainArray.length == 1 && MediaType.MEDIA_TYPE_WILDCARD.equals(type)) {
subType = MediaType.MEDIA_TYPE_WILDCARD;
} else {
Modified: incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/contexts/HttpHeadersImpl.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/contexts/HttpHeadersImpl.java?rev=813121&r1=813120&r2=813121&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/contexts/HttpHeadersImpl.java (original)
+++ incubator/wink/trunk/wink-server/src/main/java/org/apache/wink/server/internal/contexts/HttpHeadersImpl.java Wed Sep 9 21:15:16 2009
@@ -30,6 +30,7 @@
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
+import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Cookie;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
@@ -126,8 +127,12 @@
acceptValue = acceptValueTemp.toString();
}
}
- Accept acceptHeader = Accept.valueOf(acceptValue);
- return acceptHeader;
+ try {
+ Accept acceptHeader = Accept.valueOf(acceptValue);
+ return acceptHeader;
+ } catch (IllegalArgumentException e) {
+ throw new WebApplicationException(e, 400);
+ }
}
public Map<String, Cookie> getCookies() {
Modified: incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/CommonAcceptHeaderTest.java
URL: http://svn.apache.org/viewvc/incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/CommonAcceptHeaderTest.java?rev=813121&r1=813120&r2=813121&view=diff
==============================================================================
--- incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/CommonAcceptHeaderTest.java (original)
+++ incubator/wink/trunk/wink-server/src/test/java/org/apache/wink/server/internal/CommonAcceptHeaderTest.java Wed Sep 9 21:15:16 2009
@@ -23,6 +23,8 @@
import javax.ws.rs.GET;
import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
@@ -54,6 +56,18 @@
// System.out.println(acceptMediaTypes);
return acceptMediaTypes.size() + "";
}
+
+ @GET
+ @Path("onlytext")
+ @Produces("text/plain")
+ public String getHelloWorldText(@Context HttpHeaders requestHeaders) {
+ List<MediaType> acceptMediaTypes = requestHeaders.getAcceptableMediaTypes();
+ if (acceptMediaTypes == null || acceptMediaTypes.isEmpty()) {
+ return "0";
+ }
+ System.out.println(acceptMediaTypes);
+ return acceptMediaTypes.size() + "";
+ }
}
public void testWildcardOnly() throws Exception {
@@ -81,16 +95,64 @@
try {
invoke(request);
fail();
- } catch (IllegalArgumentException e) {
-
+ } catch (WebApplicationException e) {
+ assertEquals(400, e.getResponse().getStatus());
}
request = MockRequestConstructor.constructMockRequest("GET", "/countaccepttypes", " ");
try {
invoke(request);
fail();
- } catch (IllegalArgumentException e) {
+ } catch (WebApplicationException e) {
+ assertEquals(400, e.getResponse().getStatus());
+ }
+ }
+
+ public void testIllegalStringAcceptHeader() throws Exception {
+ MockHttpServletRequest request =
+ MockRequestConstructor.constructMockRequest("GET", "/countaccepttypes", "text/");
+ try {
+ invoke(request);
+ fail();
+ } catch (WebApplicationException e) {
+ assertEquals(400, e.getResponse().getStatus());
+ }
+
+ request =
+ MockRequestConstructor.constructMockRequest("GET", "/countaccepttypes", "application/");
+ try {
+ invoke(request);
+ fail();
+ } catch (WebApplicationException e) {
+ assertEquals(400, e.getResponse().getStatus());
+ }
+ try {
+ request =
+ MockRequestConstructor.constructMockRequest("GET", "/countaccepttypes", "/xml");
+ invoke(request);
+ } catch (WebApplicationException e) {
+ assertEquals(400, e.getResponse().getStatus());
}
+
+ /*
+ * while the response type isn't there
+ */
+ request =
+ MockRequestConstructor
+ .constructMockRequest("GET",
+ "/onlytext",
+ " text / plain ");
+ MockHttpServletResponse response = invoke(request);
+ assertEquals(406, response.getStatus());
+ assertEquals("", response.getContentAsString());
+
+ /*
+ * be sure that capitalization is ignore
+ */
+ request = MockRequestConstructor.constructMockRequest("GET", "/onlytext", "TEXT/pLain");
+ response = invoke(request);
+ assertEquals(200, response.getStatus());
+ assertEquals("1", response.getContentAsString());
}
public void testHttpURLConnectionAcceptHeader() throws Exception {