2013-01-22 13 views
26

Ho appena scoperto che lo standard org.jboss.resteasy.client.ClientRequest è obsoleto, invalidando tutto ciò che ho potuto trovare su Google su come utilizzare il client RESTEasy. Lo Javadoc non fornisce indicazioni su cosa usare invece. Anche Google è silenzioso.Cosa usare invece di org.jboss.resteasy.client.ClientRequest?

Sono tornato a 2.3.5 per ora, ma sarei comunque interessato alla risposta, nonché a come si sarebbe dovuto trovare la risposta senza chiedere a qualcun altro che sapeva - esiste una risorsa con quelle informazioni dove potrei hai guardato?

risposta

13

La documentazione 3.0 beta here descrive questi deprecati in questo modo:

Resteasy manuale del client API, intercettori, StringConverters, StringParamterConverters, e le API HTTP asincrone sono stati tutti deprecato e verrà rimosso possibilmente in un secondo pubblicazione. C'è ora un equivalente JAX-RS 2.0 per ognuna di queste cose.

Ciò implicherebbe che il metodo preferito è quello di utilizzare il Client API JAX-RS descritto nel this post

+3

C'è anche qualche informazione utile [sepolto nel Javadocs per 'Invocation.Builder'] (http://docs.jboss.org/resteasy/docs/3.0.4.Final/javadocs/javax/ws/rs/ client/Invocation.Builder.html) che non si riferisce a una classe 'ClientFactory' inesistente, ma sarebbe bello se gli autori di RestEasy aggiungessero alcuni puntatori alle classi deprecate. –

5

Se assumiamo c'è un API JSON a http://example.org/pizza/{id}.json, (dove 'id' è un ID di pizza), che restituisce i risultati, come

{ 
    "name": "Hawaiian", 
    "toppings": ["tomato", "ham", "cheese", "pineapple"] 
} 

Basandosi sul Invocation.Builder Javadocs, siamo in grado di fare qualcosa di simile,

import javax.ws.rs.client.Client; 
import javax.ws.rs.client.ClientBuilder; 
import javax.ws.rs.client.Invocation; 
import org.glassfish.jersey.jackson.JacksonFeature; 

public class PizzaClient { 
    private Client client; 

    public PizzaClient() { 
     client = ClientBuilder.newClient(); 
     // enable POJO mapping using Jackson - see 
     // https://jersey.java.net/documentation/latest/user-guide.html#json.jackson 
     client.register(JacksonFeature.class); 
    } 

    /** POJO which maps to JSON results using Jackson */ 
    public static class Pizza { 
     private String name; 
     private String[] toppings; 

     public String getName() { return name; } 
     public String[] getToppings() { return toppings ; } 
    } 

    public Pizza getPizzaById(String id) { 
     String uri = String.format("http://example.org/pizza/%s.json", id) 
     Invocation.Builder bldr = client.target(uri).request("application/json"); 
     return bldr.get(Pizza.class); 
    } 

    public static void main(String[] args) { 
     PizzaClient pc = new PizzaClient(); 
     Pizza pizza = pc.getPizzaById("1"); 
     System.out.println(pizza.getName() + ":"); 
     for (String topping : pizza.getToppings()) { 
      System.out.println("\t" + topping); 
     } 
    } 
} 

(anche questo è supportato da this post sebbene utilizzi l'API obsoleta).

Si noti inoltre che potrebbe essere necessario registrare un gestore speciale se si desidera utilizzare Jackson per leggere POJO (o, credo, utilizzando JAXB) come documentato here

Aggiornamento È in realtà solo bisogno di quanto segue dipendenze Maven:

<dependency> 
     <groupId>org.glassfish.jersey.core</groupId> 
     <artifactId>jersey-client</artifactId> 
     <version>2.3.1</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>2.3.1</version> 
    </dependency> 

(nel qual caso non si sta usando RESTEasy a tutti - le javax.ws.rs jaxrs implementazione proviene da Jersey)

O si può attaccare con JBoss:

<dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-jackson2-provider</artifactId> 
     <version>3.0.4.Final</version> 
    </dependency> 
    <dependency> 
     <groupId>org.jboss.resteasy</groupId> 
     <artifactId>resteasy-client</artifactId> 
     <version>3.0.4.Final</version> 
    </dependency> 

In questo caso si può semplicemente rimuovere la riga JacksonFeature nel codice sopra riportato, e il codice utilizza la licenza più liberale Apache.

1

Il RESTEasy documentation dice che dovremmo chiudere la connessione del client; quello sarebbe client.close() nell'esempio. Ma ogni esempio che riesco a trovare non lo fa. La connessione del client si chiuderà automaticamente durante la garbage collection?