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

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.**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

Reply via email to