J'utilise la retrofit 2.0.0-beta1 avec SimpleXml. Je veux récupérer une ressource simple (XML) à partir d'un service REST. Marshalling / Unmarshalling l'objet Simple avec SimpleXML fonctionne très bien.
Lors de l'utilisation de ce code (format converti avant le code 2.0.0):
final Retrofit rest = new Retrofit.Builder()
.addConverterFactory(SimpleXmlConverterFactory.create())
.baseUrl(endpoint)
.build();
SimpleService service = rest.create(SimpleService.class);
LOG.info(service.getSimple("572642"));
Un service:
public interface SimpleService {
@GET("/simple/{id}")
Simple getSimple(@Path("id") String id);
}
J'obtiens cette exception:
Exception in thread "main" java.lang.IllegalArgumentException: Unable to create call adapter for class example.Simple
for method SimpleService.getSimple
at retrofit.Utils.methodError(Utils.java:201)
at retrofit.MethodHandler.createCallAdapter(MethodHandler.java:51)
at retrofit.MethodHandler.create(MethodHandler.java:30)
at retrofit.Retrofit.loadMethodHandler(Retrofit.java:138)
at retrofit.Retrofit$1.invoke(Retrofit.java:127)
at com.sun.proxy.$Proxy0.getSimple(Unknown Source)
Qu'est-ce que je rate? Je sais que envelopper le type de retour par un Call
fonctionne. Mais je souhaite que le service renvoie les objets métier sous forme de type (et fonctionne en mode synchro).
MISE À JOUR
Après avoir ajouté les dépendances supplémentaires et .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
comme suggéré par différentes réponses, j'obtiens toujours cette erreur:
Caused by: java.lang.IllegalArgumentException: Could not locate call adapter for class simple.Simple. Tried:
* retrofit.RxJavaCallAdapterFactory
* retrofit.DefaultCallAdapter$1