2013-01-22 19 views
26

Ich habe gerade festgestellt, dass org.jboss.resteasy.client.ClientRequest veraltet ist, was alles, was ich bei Google über die Verwendung des RESTEasy-Clients finden konnte, ungültig macht. Die Javadoc gibt keinen Hinweis, was stattdessen zu verwenden ist. Google ist ebenfalls still.Was anstelle von org.jboss.resteasy.client.ClientRequest verwenden?

Ich bin für jetzt auf 2.3.5 zurückgekehrt, wäre aber an der Antwort sowieso interessiert, genauso wie man die Antwort herausfinden sollte, ohne jemand anderen zu fragen, der wusste - gibt es eine Ressource mit dieser Information, wo ich könnte hat geschaut ?

Antwort

13

Die 3.0 beta Dokumentation here beschreibt diese Veraltete etwa so:

Resteasy Handbuch Client-API, Abfangjäger, StringConverters, StringParamterConverters und Async HTTP APIs haben alle als veraltet und wird möglicherweise in einem späteren entfernt werden Freisetzung. Es gibt jetzt ein JAX-RS 2.0 Äquivalent für jedes dieser Dinge.

Dies würde bedeuten, dass die bevorzugte Methode, um den JAX-RS-Client-API in this post

+3

Es gibt auch einige nützliche Informationen [in den Javadocs für 'Invocation.Builder' vergraben] (http://docs.jboss.org/resteasy/docs/3.0.4.Final/javadocs/javax/ws/rs/ client/Invocation.Builder.html), die sich nicht auf eine nicht existierende 'ClientFactory'-Klasse bezieht, aber es wäre großartig, wenn die RestEasy-Autoren einige Zeiger aus den veralteten Klassen hinzufügen würden. –

5

beschrieben zu verwenden sein wird, wenn wir es annehmen, bei http://example.org/pizza/{id}.json ein JSON-API ist, (wobei 'id' ist eine Pizza ID), die Ergebnisse wie

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

aufbauend auf dem Invocation.Builder Javadocs zurückgibt, können wir etwas tun,

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); 
     } 
    } 
} 

(dies wird auch von this post unterstützt, obwohl die veraltete API verwendet wird).

Beachten Sie auch, dass Sie einen speziellen Handler registrieren müssen, wenn Sie Jackson verwenden möchten POJOs zu lesen (oder, wie ich glaube, mit JAXB) wie dokumentiert here

aktualisieren Sie müssen eigentlich nur die folgende Maven Abhängigkeiten:

<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> 

(In diesem Fall wird man nicht überhaupt mit Resteasy - die javax.ws.rs JAXRS Implementierung kommt aus Jersey)

OR Sie mit JBoss-Stick kann:

<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 diesem Fall können Sie nur die JacksonFeature Linie im obigen Code entfernen, und der Code verwendet die liberaleren Lizenz Apache.

1

Die RESTEasy documentation sagt, dass wir die Client-Verbindung schließen sollten; das wäre client.close() in Ihrem Beispiel. Aber jedes Beispiel, das ich finden kann, tut das nicht. Wird die Clientverbindung während der Garbage Collection automatisch geschlossen?

Verwandte Themen