users@jax-rs-spec.java.net

[jax-rs-spec users] Re: [PLEASE REVIEW] JAX-RS Client Reactive API -- updated

From: Markus KARG <markus_at_headcrashing.eu>
Date: Fri, 20 Jan 2017 17:49:56 +0100

Pavel,

 

thank you for considering the critics and proposals discussed this week! It is great that you picked up the ideas.

 

As ugly as the API finally looks, I do not see an way to make it even better. :-( So for me, this new proposal is acceptable, given the fact that the majority in this EG apparently wants to support multiple RX implementations.

 

But there is only one thing I would really ask for: Can we rename "CompletionStageRxInvokerProvider" to e. g. "Java8" or something nice like that (so it could be similar to other providers named like "RxJava")? I mean, that name is certainly technically correct, but totally ugly to write and understand for beginners! :-)

 

Thanks

-Markus

 

 

From: Pavel Bucek [mailto:pavel.bucek_at_oracle.com]
Sent: Freitag, 20. Januar 2017 15:12
To: jsr370-experts_at_jax-rs-spec.java.net
Subject: [PLEASE REVIEW] JAX-RS Client Reactive API -- updated

 

Dear experts,

thanks for your feedback!

Last suggestion by Santiago (doing lookup by the RxInvoker subclass) is implementable and I believe it is the best one we do have.

Code example (extensibility support):

Client rxClient = client.register(CompletionStageRxInvokerProvider.class, RxInvokerProvider.class);
 
CompletionStage<List<String>> cs =
        rxClient.target("remote/forecast/{destination}")
                .resolveTemplate("destination", "mars")
                .request()
                .header("Rx-User", "Java8")
                .rx(CompletionStageRxInvoker.class)
                .get(new GenericType<List<String>>() {
                });
 
cs.thenAccept(System.out::println);

Corresponding pull request: https://github.com/jax-rs/api/pull/3
Please review the pull request and provide your comments and suggestions.

Thanks and have a nice weekend,
Pavel




On 19/01/2017 16:54, Santiago Pericasgeertsen wrote:

Hi Pavel,

 

 Just catching up with this issue. I guess the two levels of indirection has led us into a generic wall :)

 

 

Client rxClient = client.register(CompletionStageRxInvokerProvider.class);

CompletionStage<UserPojo> cs =
        rxClient.target( <http://foo.bar/> "http://foo.bar")
                .request()
                .rx(CompletionStage.class)
                .get(UserPojo.class);

 So what if we reduce indirection and write:

 

   .rx(CompletionStageRxInvoker.class)

 

 as before, still keeping the provider for it? Less ideal of course.

 

— Santiago