[ 
https://issues.apache.org/jira/browse/CXF-6437?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14572857#comment-14572857
 ] 

Serhiy Yakovyn commented on CXF-6437:
-------------------------------------

The issue here is that I'm writing a Java wrapper for the existing REST API I 
have no control of. 
I haven't found a way to plug in and change the Accept header after it has been 
created by ClientProxyImpl. 

Handling it in the response to exception mapper is too late, the response is 
already in a form of XML.
Actually I do that, but it works only if the return type is not void.

> @Produces has no effect if the annotated method returns void when using 
> ClientProxy
> -----------------------------------------------------------------------------------
>
>                 Key: CXF-6437
>                 URL: https://issues.apache.org/jira/browse/CXF-6437
>             Project: CXF
>          Issue Type: Wish
>          Components: JAX-RS
>    Affects Versions: 2.7.16
>            Reporter: Serhiy Yakovyn
>
> @Produces has no effect on CXF if the annotated method returns void. The 
> "accept" is set to default "\*/\*".
> Though it looks right for successful calls of the method, it starts causing 
> issues when there are different type of responses in case of an error.
> For example:
> {code}
>  @PUT
>  @Path("{id}/info")
>  @Consumes(MediaType.APPLICATION_JSON)
>  @Produces(MediaType.APPLICATION_JSON)
>  void setInfo(@PathParam("id") String documentId, StorageObject newInfo);
> {code}
> No response is expected on success.
> However when the passed StorageObject contains some invalid data the server 
> responds with "HTTP/1.1 400 Bad Request" and the body contains detailed 
> information about which fields contain invalid values.
> That information can be send either as JSON or as XML data, but I cannot make 
> CXF to specify which format I want the error to be sent in.
> The issue is in
> org.apache.cxf.jaxrs.client.ClientProxyImpl.setRequestHeaders(MultivaluedMap<String,
>  String>, OperationResourceInfo, boolean, Class<?>, Class<?>)
> method, namely in lines 359-360 (cxf-rt-frontend-jaxrs-2.7.16.jar):
> {code}
>             } else if (responseClass == Void.class || responseClass == 
> Void.TYPE) {
>                 accepts = Collections.singletonList(MediaType.WILDCARD_TYPE);
> {code}
> which I would like to remove.
> As a workaround I'm using my own Void class not to satisfy the above part of 
> the if statement



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to