You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@cxf.apache.org by "Serhiy Yakovyn (JIRA)" <ji...@apache.org> on 2015/06/04 10:49:38 UTC
[jira] [Created] (CXF-6437) @Produces has no effect if the
annotated method returns void when using ClientProxy
Serhiy Yakovyn created CXF-6437:
-----------------------------------
Summary: @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:
@PUT
@Path("{id}/info")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
void setInfo(@PathParam("id") String documentId, StorageObject newInfo);
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):
} else if (responseClass == Void.class || responseClass == Void.TYPE) {
accepts = Collections.singletonList(MediaType.WILDCARD_TYPE);
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)