Description
When the JAX-RS resource (the method with @GET) is accessed from a web browser, the Content-Type is not set and it's default to application/octet-stream. Wink fails to match to the method as it inherits @Consumes (say, application/json) from the class/interface and it is not compatible with application/octet-stream. For example:
@Produces(MediaType.APPLICATION_JSON)
@Consumes(MediaType.APPLICATION_JSON)
public interface Catalog {
@GET
List<Item> get();
@GET
@Path("
")
Item get(@PathParam("id") String id);
}
The GET method doesn't have the request entity. Why do we need to compare the media type for the request? I assume we should only check the methods that take the HTTP body.
I had to work around this issue for Tuscany to add / or application/octet-stream to the GET method's consumes set. It's ugly .
private synchronized void fixMediaTypes(DeploymentConfiguration config) {
if (fixed)
// FIXME: A hacky workaround for https://issues.apache.org/jira/browse/TUSCANY-3572
ResourceRecord record = config.getResourceRegistry().getRecord(resourceClass);
for (MethodMetadata methodMetadata : record.getMetadata().getResourceMethods()) {
String method = methodMetadata.getHttpMethod();
if (HttpMethod.GET.equals(method) || HttpMethod.HEAD.equals(method) || HttpMethod.DELETE.equals(method))
if (HttpMethod.HEAD.equals(method) || HttpMethod.DELETE.equals(method)) { methodMetadata.addProduces(MediaType.APPLICATION_OCTET_STREAM_TYPE); methodMetadata.addConsumes(MediaType.WILDCARD_TYPE); }
}
for (MethodMetadata methodMetadata : record.getMetadata().getSubResourceMethods()) {
String method = methodMetadata.getHttpMethod();
if (HttpMethod.GET.equals(method) || HttpMethod.HEAD.equals(method) || HttpMethod.DELETE.equals(method)) { methodMetadata.addConsumes(MediaType.APPLICATION_OCTET_STREAM_TYPE); methodMetadata.addConsumes(MediaType.WILDCARD_TYPE); }
if (HttpMethod.HEAD.equals(method) || HttpMethod.DELETE.equals(method))
{ methodMetadata.addProduces(MediaType.APPLICATION_OCTET_STREAM_TYPE); methodMetadata.addConsumes(MediaType.WILDCARD_TYPE); } }
fixed = true;
}
Attachments
Issue Links
- blocks
-
TUSCANY-3572 REST binding fails with simple GET invocation from browser
- Closed