Yes, the server is not under my control. I want to develop a client because I like how CXF works and it is a dependency for other issues in my project. Obviously I would never develop a service with body in DELETE requests.
The, taking into account that I'm using CXF 2.7.x, is it possible to workaround my problem using CXF? Thank you Sergey! [image: i2cat] Julio C. Barrera Juez Office phone: +34 93 357 99 27 Distributed Applications and Networks Area (DANA) i2CAT Foundation, Barcelona, Spain http://dana.i2cat.net On 16 October 2013 16:23, Sergey Beryozkin <[email protected]> wrote: > Right, looks like the following has to be done with HTTPClient: > > https://code.google.com/p/**rest-client/source/browse/** > restclient-lib/src/main/java/**org/wiztools/restclient/http/** > EntityEnclosingDelete.java<https://code.google.com/p/rest-client/source/browse/restclient-lib/src/main/java/org/wiztools/restclient/http/EntityEnclosingDelete.java> > > This is the code based on the advice from HttpClient forums. > > I guess we should check if CXF Async Conduit can be updated respectively > > By the way, I'm assuming you have to do DELETE with a body because you > have some existing/legacy service expecting it this way ? Now and then > users ask about it, and I don't mind to get the Async HTTP conduit updated > a bit anyway, but if you have say a CXF server listening, then I'm sure > there could be an easier way :-) > > Cheers, Sergey > > > On 16/10/13 15:11, Julio Carlos Barrera Juez wrote: > >> Looking for logs, I've realized that the property is producing changes. I >> mean the Async HTTP client is being used. However my DELETE request has no >> body. My client interface is JAX-RS annotated, my Resource class is JaxB >> annotated: >> >> @Path("/server/path") >> @DELETE >> @Consumes(MediaType.**APPLICATION_JSON) >> public void deleteResource(Resource resource); >> >> I have a create method working with de same configuration and it works: >> >> @Path("/server/path") >> @POST >> @Consumes(MediaType.**APPLICATION_JSON) >> public void createResource(Resource resource); >> >> I'm using Jackson as JSON serializer, but I guess it has no relation with >> this problem. >> >> These log lines show that the DELETE request has content-lenght 0 and >> the Async HTTP client is being used >> >> [I/O dispatcher 2] DEBUG >> org.apache.cxf.transport.http.**asyncclient.**AsyncHTTPConduitFactory$2 - >> Connection leased: [id: 2][route: {}->http://my_server][total kept alive: >> 0; route allocated: 1 of 1000; total allocated: 0 of 5000] >> [I/O dispatcher 2] DEBUG >> org.apache.cxf.transport.http.**asyncclient.**AsyncHTTPConduitFactory$3 - >> [exchange: 3] Connection allocated: >> [id:2][route:{}->http:/my_**server][state:null] >> [I/O dispatcher 2] DEBUG org.apache.http.impl.nio.**reactor.IOSessionImpl >> - >> http-outgoing-2 192.168.254.86:35152<->server_**ip[ACTIVE][r:]: Set >> attribute >> http.nio.exchange-handler >> [I/O dispatcher 2] DEBUG org.apache.http.impl.nio.**reactor.IOSessionImpl >> - >> http-outgoing-2 192.168.254.86:35152<->server_**ip[ACTIVE][rw:]: Event >> set [w] >> [I/O dispatcher 2] DEBUG org.apache.http.impl.nio.**reactor.IOSessionImpl >> - >> http-outgoing-2 192.168.254.86:35152<->server_**ip[ACTIVE][rw:]: Set >> attribute http.nio.http-exchange-state >> [I/O dispatcher 2] DEBUG >> org.apache.cxf.transport.http.**asyncclient.**AsyncHTTPConduitFactory$3 - >> [exchange: 3] Attempt 1 to execute request >> [I/O dispatcher 2] DEBUG org.apache.http.impl.nio.**reactor.IOSessionImpl >> - >> http-outgoing-2 192.168.254.86:35152<->server_**ip[ACTIVE][rw:]: Set >> timeout >> 60000 >> [I/O dispatcher 2] DEBUG org.apache.http.client.**protocol.RequestAuthCache >> - >> Auth cache not set in the context >> [I/O dispatcher 2] DEBUG >> org.apache.http.client.**protocol.**RequestTargetAuthentication - Target >> auth >> state: UNCHALLENGED >> [I/O dispatcher 2] DEBUG >> org.apache.http.client.**protocol.**RequestProxyAuthentication - Proxy >> auth >> state: UNCHALLENGED >> [I/O dispatcher 2] DEBUG org.apache.http.headers - http-outgoing-2 >> * >> DELETE* /server/path HTTP/1.1 >> >> [I/O dispatcher 2] DEBUG org.apache.http.headers - http-outgoing-2 >> >> Accept: text/plain >> [I/O dispatcher 2] DEBUG org.apache.http.headers - http-outgoing-2 >> >> User-Agent: Apache CXF 2.7.4 >> [I/O dispatcher 2] DEBUG org.apache.http.headers - http-outgoing-2 >> >> *Content-Length: >> 0* >> >> [I/O dispatcher 2] DEBUG org.apache.http.headers - http-outgoing-2 >> >> Host: >> my_server >> [I/O dispatcher 2] DEBUG org.apache.http.headers - http-outgoing-2 >> >> Connection: Keep-Alive >> >> [image: i2cat] >> Julio C. Barrera Juez >> Office phone: +34 93 357 99 27 >> Distributed Applications and Networks Area (DANA) >> i2CAT Foundation, Barcelona, Spain >> http://dana.i2cat.net >> >> >> On 16 October 2013 15:17, Julio Carlos Barrera Juez < >> [email protected]> wrote: >> >> I don't know how to install CXF Async HTTP transport. I have the maven >>> artifact in my project dependencies, but nothing else. >>> >>> [image: i2cat] >>> Julio C. Barrera Juez >>> Office phone: +34 93 357 99 27 >>> Distributed Applications and Networks Area (DANA) >>> i2CAT Foundation, Barcelona, Spain >>> http://dana.i2cat.net >>> >>> >>> On 16 October 2013 13:14, Sergey Beryozkin <[email protected]> wrote: >>> >>> I guess you don't have CXF Async HTTP transport installed ? >>>> Other than that I've no idea, if it won;t work with the Async module >>>> then >>>> I guess it is possible to do >>>> Sergey >>>> >>>> On 16/10/13 11:49, Julio Carlos Barrera Juez wrote: >>>> >>>> I tried to use this information before, but I don't know how to solve >>>>> my >>>>> problem. >>>>> >>>>> I have something like this: >>>>> >>>>> ProxyClassLoader classLoader = new ProxyClassLoader(); >>>>> classLoader.addLoader(****IServiceInterface.class.**** >>>>> getClassLoader()); >>>>> classLoader.addLoader(****JAXRSClientFactoryBean.class.**** >>>>> >>>>> getClassLoader()); >>>>> >>>>> JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); >>>>> bean.setAddress(uri); >>>>> bean.setResourceClass(****IServiceInterface.class); >>>>> bean.setClassLoader(****classLoader); >>>>> >>>>> >>>>> client (IServiceInterface) bean.create(); >>>>> >>>>> Then I can use the client object as usual. But if fails sending DELETE >>>>> requests with body. >>>>> >>>>> I tried doing this: >>>>> >>>>> ProxyClassLoader classLoader = new ProxyClassLoader(); >>>>> classLoader.addLoader(****IServiceInterface.class.**** >>>>> getClassLoader()); >>>>> classLoader.addLoader(****JAXRSClientFactoryBean.class.**** >>>>> >>>>> getClassLoader()); >>>>> >>>>> JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean(); >>>>> bean.setAddress(uri); >>>>> bean.setResourceClass(****IServiceInterface.class); >>>>> bean.setClassLoader(****classLoader); >>>>> >>>>> >>>>> // allow body in DELETE requests >>>>> Client client = bean.create(); >>>>> WebClient.getConfig(client).****getRequestContext().put("use.**** >>>>> async.http.conduit", >>>>> true); >>>>> >>>>> (IServiceInterface) client.****whateverMethodThatSendsDelete(****); >>>>> >>>>> >>>>> But it didn't work. >>>>> >>>>> What am I missing? >>>>> >>>>> [image: i2cat] >>>>> Julio C. Barrera Juez >>>>> Office phone: +34 93 357 99 27 >>>>> Distributed Applications and Networks Area (DANA) >>>>> i2CAT Foundation, Barcelona, Spain >>>>> http://dana.i2cat.net >>>>> >>>>> >>>>> On 16 October 2013 12:00, Sergey Beryozkin <[email protected]> >>>>> wrote: >>>>> >>>>> Hi >>>>> >>>>>> >>>>>> On 16/10/13 09:18, Julio Carlos Barrera Juez wrote: >>>>>> >>>>>> Hi. >>>>>> >>>>>>> >>>>>>> I'm creating a REST client using JAXRSClientFactoryBean and >>>>>>> ProxyClassLoader based on a JAXRS annotated Java interface. >>>>>>> >>>>>>> I want to send a DELETE with body, which is not recommended by >>>>>>> RESTful >>>>>>> philosophy, but it is allowed by HTTP 1.1 RFC. >>>>>>> >>>>>>> The body is not sent by the client and I have read a lot of problems >>>>>>> to >>>>>>> allow it. >>>>>>> >>>>>>> Is it possible send a body in my DELETE requests with this >>>>>>> configuration? >>>>>>> >>>>>>> Please check this thread >>>>>>> >>>>>>> >>>>>> http://cxf.547215.n5.nabble.******com/JaxRS-Client-with-** >>>>>> Deletes-**** >>>>>> td5731444.html<http://cxf.**54**7215.n5.nabble.com/JaxRS-**<http://547215.n5.nabble.com/JaxRS-**> >>>>>> Client-with-Deletes-td5731444.****html<http://cxf.547215.n5.** >>>>>> nabble.com/JaxRS-Client-with-**Deletes-td5731444.html<http://cxf.547215.n5.nabble.com/JaxRS-Client-with-Deletes-td5731444.html> >>>>>> > >>>>>> >>>>>> >>>>>>> >>>>>> >>>>>> Cheers, Sergey >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> Thank you! >>>>>> >>>>>> >>>>>>> Regards, Julio >>>>>>> >>>>>>> [image: i2cat] >>>>>>> Julio C. Barrera Juez >>>>>>> Office phone: +34 93 357 99 27 >>>>>>> Distributed Applications and Networks Area (DANA) >>>>>>> i2CAT Foundation, Barcelona, Spain >>>>>>> http://dana.i2cat.net >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>> >>>> -- >>>> Sergey Beryozkin >>>> >>>> Talend Community Coders >>>> http://coders.talend.com/ >>>> >>>> Blog: http://sberyozkin.blogspot.com >>>> >>>> >>> >>> >> > > -- > Sergey Beryozkin > > Talend Community Coders > http://coders.talend.com/ > > Blog: http://sberyozkin.blogspot.com >
