Skip to content
This repository was archived by the owner on Jul 7, 2023. It is now read-only.

Commit e8180cb

Browse files
committed
WINK-379 - Return HttpStatus.NOT_ACCEPTABLE (406) if no methods support one of the acceptable response entity body media types
git-svn-id: https://svn.apache.org/repos/asf/wink/trunk@1471518 13f79535-47bb-0310-9956-ffa450edef68
1 parent 6469e98 commit e8180cb

File tree

4 files changed

+15
-10
lines changed

4 files changed

+15
-10
lines changed

wink-server/src/main/java/org/apache/wink/server/internal/handlers/FlushResultHandler.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@
4343
import javax.ws.rs.ext.RuntimeDelegate;
4444
import javax.ws.rs.ext.RuntimeDelegate.HeaderDelegate;
4545

46+
import org.apache.wink.common.http.HttpStatus;
4647
import org.apache.wink.common.internal.MultivaluedMapImpl;
4748
import org.apache.wink.common.internal.i18n.Messages;
4849
import org.apache.wink.common.internal.runtime.RuntimeContextTLS;
@@ -232,7 +233,11 @@ public void handleResponse(MessageContext context) throws Throwable {
232233
logger.error(Messages.getMessage("noWriterOrDataSourceProvider", entity.getClass() //$NON-NLS-1$
233234
.getName(), responseMediaType));
234235
}
235-
throw new WebApplicationException(500);
236+
// WINK-379 - From the spec :
237+
// If no methods support one of the acceptable response entity body media types
238+
// an implementation MUST generate a WebApplicationException with a not acceptable
239+
// response (HTTP 406 status) and no entity
240+
throw new WebApplicationException(HttpStatus.NOT_ACCEPTABLE.getCode());
236241
}
237242

238243
if (logger.isTraceEnabled()) {

wink-server/src/test/java/org/apache/wink/server/internal/activation/ActivationDataContentHandlerTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -182,13 +182,13 @@ public void testMissingHandlerExists() throws Exception {
182182
}
183183
}
184184

185-
public void test500ForMissingWriterAndHandler() throws Exception {
185+
public void test406ForMissingWriterAndHandler() throws Exception {
186186
System.out.println(TestResource.class.getName());
187187
MockHttpServletRequest mockRequest =
188188
MockRequestConstructor.constructMockRequest("GET",
189189
"/root/nowriterorhandler",
190190
"not/valid");
191191
MockHttpServletResponse response = invoke(mockRequest);
192-
assertEquals(500, response.getStatus());
192+
assertEquals(406, response.getStatus());
193193
}
194194
}

wink-server/src/test/java/org/apache/wink/server/serviceability/DebugNoMessageBodyWriter500Test.java renamed to wink-server/src/test/java/org/apache/wink/server/serviceability/DebugNoMessageBodyWriter406Test.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
import org.springframework.mock.web.MockHttpServletRequest;
3737
import org.springframework.mock.web.MockHttpServletResponse;
3838

39-
public class DebugNoMessageBodyWriter500Test extends MockServletInvocationTest {
39+
public class DebugNoMessageBodyWriter406Test extends MockServletInvocationTest {
4040

4141
@Override
4242
protected Class<?>[] getClasses() {
@@ -105,14 +105,14 @@ public void testLogNoWriterForJavaType() throws Exception {
105105
"noWriterForJavaType",
106106
MediaType.WILDCARD);
107107
MockHttpServletResponse response = invoke(request);
108-
assertEquals(500, response.getStatus());
108+
assertEquals(406, response.getStatus());
109109
assertEquals("", response.getContentAsString());
110110

111111
assertEquals(Level.SEVERE, records.get(21).getLevel());
112112
assertTrue(records
113113
.get(21)
114114
.getMessage()
115-
.indexOf("The system could not find a javax.ws.rs.ext.MessageBodyWriter or a DataSourceProvider class for the org.apache.wink.server.serviceability.DebugNoMessageBodyWriter500Test$MyObject type and") != -1 && records
115+
.indexOf("The system could not find a javax.ws.rs.ext.MessageBodyWriter or a DataSourceProvider class for the org.apache.wink.server.serviceability.DebugNoMessageBodyWriter406Test$MyObject type and") != -1 && records
116116
.get(21)
117117
.getMessage()
118118
.indexOf("mediaType. Ensure that a javax.ws.rs.ext.MessageBodyWriter exists in the JAX-RS application for the type and media type specified.") != -1);

wink-server/src/test/java/org/apache/wink/server/serviceability/InfoNoMessageBodyWriter500Test.java renamed to wink-server/src/test/java/org/apache/wink/server/serviceability/InfoNoMessageBodyWriter406Test.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@
3535
import org.springframework.mock.web.MockHttpServletRequest;
3636
import org.springframework.mock.web.MockHttpServletResponse;
3737

38-
public class InfoNoMessageBodyWriter500Test extends MockServletInvocationTest {
38+
public class InfoNoMessageBodyWriter406Test extends MockServletInvocationTest {
3939

4040
@Override
4141
protected Class<?>[] getClasses() {
@@ -92,14 +92,14 @@ public void testLogNoWriterForJavaType() throws Exception {
9292
"noWriterForJavaType",
9393
MediaType.WILDCARD);
9494
MockHttpServletResponse response = invoke(request);
95-
assertEquals(500, response.getStatus());
95+
assertEquals(406, response.getStatus());
9696
assertEquals("", response.getContentAsString());
9797

9898
assertEquals(Level.SEVERE, records.get(5).getLevel());
9999
assertTrue(records
100100
.get(5)
101101
.getMessage()
102-
.indexOf("The system could not find a javax.ws.rs.ext.MessageBodyWriter or a DataSourceProvider class for the org.apache.wink.server.serviceability.InfoNoMessageBodyWriter500Test$MyObject type and") != -1 && records
102+
.indexOf("The system could not find a javax.ws.rs.ext.MessageBodyWriter or a DataSourceProvider class for the org.apache.wink.server.serviceability.InfoNoMessageBodyWriter406Test$MyObject type and") != -1 && records
103103
.get(5)
104104
.getMessage()
105105
.indexOf("Ensure that a javax.ws.rs.ext.MessageBodyWriter exists in the JAX-RS application for the type and media type specified.") != -1);
@@ -115,7 +115,7 @@ public void testLogNoWriterForMediaType() throws Exception {
115115
"noWriterForMediaType",
116116
MediaType.WILDCARD);
117117
MockHttpServletResponse response = invoke(request);
118-
assertEquals(500, response.getStatus());
118+
assertEquals(406, response.getStatus());
119119
assertEquals("", response.getContentAsString());
120120

121121
assertEquals(Level.SEVERE, records.get(5).getLevel());

0 commit comments

Comments
 (0)