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