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

Mike Rheinheimer commented on WINK-286:
---------------------------------------

Even though the workaround is "ugly", there is still a workaround.  In the 
interest of keeping Wink as simple as possible, avoiding the risk of breaking 
past releases, etc, can we keep current behavior and simply document this 
situation and its workaround?  Would that be satisfactory?

> 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