hugo-book-theme/exampleSite/content/docs/rx-jersey-client.md

60 lines
1.9 KiB
Markdown
Raw Normal View History

2018-09-30 01:31:24 +02:00
## RxJersey Proxy Client
Proxy client provides convenient way to call resources without constructing request. Also it allows to reuse resource interfaces between microservices.
In order to enable RxJava in proxy client register Jersey feature
```java
RxJerseyClientFeature rxJerseyClientFeature = new RxJerseyClientFeature()
.register(client); //should be non-blocking client implementation
resourceConfig.register(rxJerseyClientFeature);
```
Default client with Grizzly connector will be used if not provided
## Remote resource injection
You can inject proxy client with `@Remote` annotation, in addition you can inject `WebTarget` or `RxWebTarget`
```java
@Path("/example/")
public class GithubResource {
@Remote("https://api.github.com/")
private GithubApi githubApi;
@Remote("https://api.github.com/")
private WebTarget webTarget;
@GET
@Path("github")
public Single<GithubRepository> getRepository() {
return githubApi.getRepository("alex-shpak", "rx-jersey").toSingle();
}
}
```
## Manual proxy client creation
You can use `WebResourceFactory` from `net.winterly.rxjersey.client` package in order to create proxy client
#### RxJava
```java
WebResourceFactory.newResource(
ResourceInterface.class,
rxWebTarget,
new ObservableClientMethodInvoker()
);
```
#### RxJava 2
```java
WebResourceFactory.newResource(
ResourceInterface.class,
webTarget,
new FlowableClientMethodInvoker()
);
```
## Url resolving
Below is example of URL merging based on `@Remote` annotation value
| Annotation Value | Jersey Context Path | Result URL |
| ----------------------------- | --------------------------- | ---------------------------- |
| @Remote("http://example.com") | http://baseurl.com/resource | http://example.com/ |
| @Remote("/resource/") | http://baseurl.com/some | http://baseurl.com/resource/ |