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

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

We should probably also check how other JAX-RS runtimes behave for this test 
case.

> 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