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