[ 
https://issues.apache.org/jira/browse/WINK-286?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12873215#action_12873215
 ] 

Raymond Feng commented on WINK-286:
-----------------------------------

Well, I think the problem is not that Wink sets the content-type to 
""application/octet-stream". I agree it's the correct behavior per JAX-RS 1.1 
spec.

My understanding is as follows:

1. For a method that doesn't expect an entity body, the consumes filtering 
should be skipped. For example,

@GET
String get(); // No input arg

@GET
String getById(@QueryParam("id") String id); // The only input arg is from the 
query parameter

2. For a method that doesn't produce an entity body, the produces filtering 
should be skipped. For example,

@DELETE
void delete(String id);

> GET methods fail to serve requests without Content-Type if the 
> class/interface has @Consumes
> --------------------------------------------------------------------------------------------
>
>                 Key: WINK-286
>                 URL: https://issues.apache.org/jira/browse/WINK-286
>             Project: Wink
>          Issue Type: Bug
>          Components: Server
>    Affects Versions: 1.1
>            Reporter: Raymond Feng
>
> 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("{id}")
>    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) {
>             return;
>         }
>         // 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)) {
>                 
> 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);
>             }
>         }
>         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;
>     }

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to