JAX-RS 2.0更改默认实现

dam*_*uar 22 rest jax-rs jersey resteasy

我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)

所以该newBuilder()方法正在搜索JerseyClientBuilder我是否理解它是正确的.如何告诉系统使用RESTEasy?

Car*_*ini 22

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

 Object delegate = FactoryFinder.find(JAXRS_DEFAULT_CLIENT_BUILDER_PROPERTY,
   JAXRS_DEFAULT_CLIENT_BUILDER); 
Run Code Online (Sandbox Code Playgroud)

哪里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
  • 最后进入System属性javax.ws.rs.client.ClientBuilder.

因此,要使用RESTEasy,您应该创建一个文件

META-INF/services/javax.ws.rs.client.ClientBuilder
Run Code Online (Sandbox Code Playgroud)

与文字:

org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder
Run Code Online (Sandbox Code Playgroud)

这是RESTEasy的类名 ClientBuilder

  • `或创建文件`$ java.home/lib中/ JAXRS;`System.setProperty(ClientBuilder.JAXRS_DEFAULT_CLIENT_BUILDER_PROPERTY, "org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder"):您可以通过设置系统属性达到相同的. properties` (6认同)
  • 请注意,与`java.util.ServiceLoader`不同,JAX-RS FactoryFinder不允许在**META-INF/services/javax.ws.rs.client.ClientBuilder`文件中允许#comments.发现了痛苦的方式. (2认同)