cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Serhiy Yakovyn (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (CXF-6437) @Produces has no effect if the annotated method returns void when using ClientProxy
Date Thu, 04 Jun 2015 09:15:40 GMT

     [ https://issues.apache.org/jira/browse/CXF-6437?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

Serhiy Yakovyn updated CXF-6437:
--------------------------------
    Description: 
@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


  was:
@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



> @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)

Mime
View raw message