JAX-RS 2.0 изменяет стандартную реализацию

Я пытаюсь использовать 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?

Ответы

Ответ 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
  • наконец, в свойство System javax.ws.rs.client.ClientBuilder.

Итак, чтобы использовать RESTEasy, вы должны создать файл

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

с текстом:

org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder

который является именем класса RESTEasy ClientBuilder