On 06/06/2013 09:50, Francesco Chicchiriccò wrote:
> On 05/06/2013 20:48, Luciano Resende wrote:
>> On Tue, Jun 4, 2013 at 6:52 AM, Francesco Chicchiriccò
>> <ilgrosso@apache.org <mailto:ilgrosso@apache.org>> 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.
Here you go: [3].
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)
[3] https://github.com/ilgrosso/apacheHttpAsyncWink
--
Francesco Chicchiriccò
ASF Member, Apache Syncope PMC chair, Apache Cocoon PMC Member
http://people.apache.org/~ilgrosso/
|