On 05/06/2013 20:48, Luciano Resende wrote:
On Tue, Jun 4, 2013 at 6:52 AM, Francesco Chicchiriccò
<[email protected] <mailto:[email protected]>> wrote:
On 04/06/2013 10:36, Francesco Chicchiriccň wrote:
Hi all,
I am currently evaluating Wink for a new project.
I have been playing around with some samples and it seems
linear to me.
I am not completely convinced, however, of async usage; this
is how I have managed to get it working:
AsyncHttpClient asyncHttpClient = new AsyncHttpClient();
RestClient client = new RestClient(new
AsyncHttpClientConfiguration(asyncHttpClient));
Resource resource =
client.resource("http://services.odata.org/v3/(S(sn4zeecdefwvblk2xxlk425x))/OData/OData.svc/Products
<http://services.odata.org/v3/%28S%28sn4zeecdefwvblk2xxlk425x%29%29/OData/OData.svc/Products>");
AtomFeed feed =
resource.contentType("application/atom+xml").accept("application/atom+xml").get(AtomFeed.class);
asyncHttpClient.close();
for (AtomEntry entry : feed.getEntries()) {
System.out.println(entry.getTitle().getValue());
}
Is this the correct usage? Isn't there any way to get
something like Future<AtomFeed> instead?
Moreover, I was also looking for a way to get an InputStream
out of a response, to delay processing: is this possible?
I guess I've found (this seems to work):
RestClient client = new RestClient(new
ApacheHttpClientConfig(new DefaultHttpClient()));
Resource resource =
client.resource("http://localhost:8080/Northwind/Northwind.svc/Categories(1)
<http://localhost:8080/Northwind/Northwind.svc/Categories%281%29>");
ClientResponse response =
resource.accept(MediaType.APPLICATION_ATOM_XML).get();
InputStream is = response.getEntity(InputStream.class);
System.out.println("********* " + response.getStatusCode());
StringWriter writer = new StringWriter();
IOUtils.copy(is, writer);
System.out.println(writer.toString());
I have also been able to create an entry (e.g. POST) only
providing InputStream: definitely nice.
I'll keep investigating for the Future<T> stuff...
It would be great if you could provide some extra documentation on our
wiki or any enhanced examples.
Hi Luciano,
what kind of documentation are you thinking about? Could you also
provide some coordinate under which I should create a new page / update
an existing page? My ASF confluence userid is 'ilgrosso', BTW.
About the Future<T> investigation, I've developed a quick example using
Commons HttpAsyncClient 4.0-beta4 [1]: it looks more like a hack, but it
works more or less this way:
RestClient client = new RestClient(new
ApacheHttpAsyncClientConfig());
Resource resource =
client.resource("http://services.odata.org/v3/(S(sn4zeecdefwvblk2xxlk425x))/OData/OData.svc/Products");
FutureClientResponse response = (FutureClientResponse)
resource.accept(MediaType.APPLICATION_ATOM_XML).get();
System.out.println("XXXXXXXXXXX " + response.isDone());
AtomFeed feed = response.get().getEntity(AtomFeed.class);
e.g. FutureClientResponse implements both Future<ClientResponse> and
ClientResponse
I am not fully satisfied of this result (explicit cast to
FutureClientResponse, for example...) but it proves at least that it
could be done.
A possible cleaner extension is to add a new Resource#get() (similar to
what CXF does [2]), but I am not familiar at all with Wink's internals...
As soon as I found enough spare time, I'll push my sample to github.
Keep you posted.
Regards.
[1] http://hc.apache.org/httpcomponents-asyncclient-dev/
[2]
http://cxf.apache.org/javadoc/latest/org/apache/cxf/jaxrs/client/WebClient.html#get(javax.ws.rs.client.InvocationCallback)
--
Francesco Chicchiriccò
ASF Member, Apache Syncope PMC chair, Apache Cocoon PMC Member
http://people.apache.org/~ilgrosso/