使用RxJava的Jersey客户端与resteasy冲突

时间:2017-03-20 06:12:56

标签: jboss jersey resteasy

我有一个部署到JBOSS的Web应用程序。它包含对jersey-rx-client-rxjava包的依赖,其中一个包具有对resteasy-jaxrs的短暂依赖。

我有以下代码。

let urlSearchParams = new URLSearchParams();
urlSearchParams.append('password', password);
urlSearchParams.append('email', email);
let loginInfo = urlSearchParams.toString();

在此行中,抛出以下异常。

RxObservable.newClient()
        .target(fullURL)
        .request()
        .header("Authorization", "Bearer " + config.getApiKey())
        .rx()
        .post(javax.ws.rs.client.Entity.entity(context, MediaType.APPLICATION_JSON_TYPE), AIResponse.class)
        .map(new Func1<AIResponse, String>() {
            @Override
            public String call(AIResponse res) {
                return res.getType();
            }
        })
        .subscribe(new Action1<String>() {
            @Override
            public void call(final String type) {
                Log.info(type);
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(final Throwable throwable) {
                //async.resume(throwable);
                Log.error(throwable.getMessage(), throwable);
            }
        }, new Action0() {
            @Override
            public void call() {
                //async.resume(throwable);
                 Log.info("Done");
            }
        });

为什么构建方法返回final JerseyInvocation invocation = (JerseyInvocation) getBuilder().build(name, entity); 而不是org.jboss.resteasy.client.jaxrs.internal.ClientInvocation

JerseyInvocation

1 个答案:

答案 0 :(得分:1)

  

为什么构建方法返回Mikrotik而不是org.jboss.resteasy.client.jaxrs.internal.ClientInvocation

它是如何设计JAX-RS客户端API的。当我们尝试调用JerseyInvocation(在内部完成)时,JAX-RS API会对JAX-RS客户端API的任何实现执行服务查找。如果没有,它会回到泽西岛。问题是,当服务查找完成后,可以在类路径中找到RESTEasy的客户端。

Jersey RX API有一个我们可以使用的ClientBuilder.newBuilder方法,而不是默认的from(Client)。这将允许我们传递明确的newClient而不是使用JAX-RS API JerseyClient

ClientBuilder.newBuilder/newClient

// actual JerseyClient which implements Client Client client = new JerseyClientBuilder().build(); RxObservable.from(client) 与JAX-RS JerseyClientBuilder具有几乎相同的API,因此您可以以相同的方式使用它。