Jboss RxJava的Jersey客户端与resteasy冲突

Jboss RxJava的Jersey客户端与resteasy冲突,jboss,jersey,resteasy,Jboss,Jersey,Resteasy,我在JBOSS上部署了一个web应用程序。它包含对jersey rx客户机rxjava包的依赖关系,其中一个包对resteasy JAXR具有瞬时依赖关系 我有以下代码 RxObservable.newClient() .target(fullURL) .request() .header("Authorization", "Bearer " + config.getApiKey()) .rx() .post(jav

我在JBOSS上部署了一个web应用程序。它包含对jersey rx客户机rxjava包的依赖关系,其中一个包对resteasy JAXR具有瞬时依赖关系

我有以下代码

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");
            }
        });
为什么构建方法返回
org.jboss.resteasy.client.jaxrs.internal.ClientInvocation
,而不是
JerseyInvocation

2017-03-20 12:18:43,678 ERROR [com.optawork.bot.CustomResource] (default task-2) org.jboss.resteasy.client.jaxrs.internal.ClientInvocation cannot be cast to org.glassfish.jersey.client.JerseyInvocation: java.lang.ClassCastException: org.jboss.resteasy.client.jaxrs.internal.ClientInvocation cannot be cast to org.glassfish.jersey.client.JerseyInvocation
        at org.glassfish.jersey.client.rx.rxjava.JerseyRxObservableInvoker$2.call(JerseyRxObservableInvoker.java:89)
        at org.glassfish.jersey.client.rx.rxjava.JerseyRxObservableInvoker$2.call(JerseyRxObservableInvoker.java:83)
        at rx.Observable.unsafeSubscribe(Observable.java:10142)
        at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:48)
        at rx.internal.operators.OnSubscribeMap.call(OnSubscribeMap.java:33)
        at rx.Observable.subscribe(Observable.java:10238)
        at rx.Observable.subscribe(Observable.java:10205)
        at rx.Observable.subscribe(Observable.java:10086)
        at ai.api.AIDataService.converse(AIDataService.java:601)
为什么构建方法返回
org.jboss.resteasy.client.jaxrs.internal.ClientInvocation
,而不是
JerseyInvocation

这就是JAX-RS客户机API的设计方式。当我们尝试调用
ClientBuilder.newBuilder
(这是在内部完成的)时,JAX-RSAPI会对JAX-RS客户端API的任何实现进行服务查找。如果没有,它会回到泽西岛。问题是,当服务查找完成时,RESTEasy的客户机位于类路径上

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

// actual JerseyClient which implements Client
Client client = new JerseyClientBuilder().build();
RxObservable.from(client)

JerseyClientBuilder
的API与JAX-RS
ClientBuilder
几乎相同,因此您可以以几乎相同的方式使用它。

我遇到了一个类似的问题,即使用JerseyClientBuilder.newClientBuilder()以某种方式返回RestEASY客户端。“新”的球衣设计师解决了这个问题。谢谢参考
// actual JerseyClient which implements Client
Client client = new JerseyClientBuilder().build();
RxObservable.from(client)