【问题标题】:JAX-RS 2.0 change default implementationJAX-RS 2.0 更改默认实现
【发布时间】:2013-06-26 07:39:24
【问题描述】:

我正在尝试使用 RESTEasy 作为 JAX-RS 2.0 客户端实现。问题是我遇到了运行时异常:

06-28 13:29:06.410: E/AndroidRuntime(5745): Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.glassfish.jersey.client.JerseyClientBuilder
06-28 13:29:06.410: E/AndroidRuntime(5745):     at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:103)

所以newBuilder() 方法正在搜索JerseyClientBuilder,如果我理解正确的话。如何让系统改用 RESTEasy?

【问题讨论】:

  • Carlo 的回答似乎是合理的。你试过了吗?它解决了你的问题吗?如果是,请将其标记为已接受。

标签: rest jersey jax-rs resteasy


【解决方案1】:

嗯,JAX-RS 依赖于服务提供者约定。 在newBuilder 方法的第一行,您可以阅读:

 Object delegate = FactoryFinder.find(JAXRS_DEFAULT_CLIENT_BUILDER_PROPERTY,
   JAXRS_DEFAULT_CLIENT_BUILDER); 

JAXRS_DEFAULT_CLIENT_BUILDER_PROPERTY"javax.ws.rs.client.ClientBuilder"

反过来,FactoryFinder 看起来

  • 首先为类名改成META-INF/services/javax.ws.rs.client.ClientBuilder
  • 然后在属性javax.ws.rs.client.ClientBuilder 变成${java.home}/lib/jaxrs.properties
  • 终于进入系统属性javax.ws.rs.client.ClientBuilder

所以,要使用 RESTEasy,你应该创建一个文件

META-INF/services/javax.ws.rs.client.ClientBuilder

附上文字:

org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder

这是RESTEasy的类名ClientBuilder

【讨论】:

  • 您可以通过设置系统属性:System.setProperty(ClientBuilder.JAXRS_DEFAULT_CLIENT_BUILDER_PROPERTY, "org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder"); 或创建文件$java.home/lib/jaxrs.properties 来实现相同的目的
  • 请注意,与java.util.ServiceLoader 不同,JAX-RS FactoryFinder 确实不允许META-INF/services/javax.ws.rs.client.ClientBuilder 文件中允许#-cmets。发现了痛苦的方式。
猜你喜欢
  • 2015-01-25
  • 1970-01-01
  • 1970-01-01
  • 2011-06-27
  • 2014-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多