2013-01-22 13 views
26

Właśnie stwierdziłem, że org.jboss.resteasy.client.ClientRequest jest przestarzałe, unieważniając wszystko, co mogłem znaleźć w Google, dotyczące korzystania z klienta RESTEasy. Numer Javadoc nie wskazuje, co należy użyć. Google także milczy.Co używać zamiast org.jboss.resteasy.client.ClientRequest?

Na razie cofnąłem się do 2.3.5, ale i tak byłbym zainteresowany odpowiedzią, a także, w jaki sposób należało znaleźć odpowiedź, nie pytając kogoś, kto wiedział - czy istnieje zasób z tymi informacjami, gdzie mógłbym wyglądasz?

Odpowiedz

13

Dokumentacja 3.0 beta here opisuje te deprecations tak:

Resteasy obsługi klienta API, przechwytujących, StringConverters, StringParamterConverters i API HTTP asynchroniczne wszystkie zostały przestarzałe i zostaną usunięte ewentualnie w późniejszym wydanie. Istnieje teraz odpowiednik JAX-RS 2.0 dla każdej z tych rzeczy.

Oznaczałoby to, że preferowaną metodą będzie użycie API Client JAX-RS opisaną w this post

+3

Istnieje również kilka przydatnych informacji [pochowanych w Javadocs dla 'Invocation.Builder'] (http://docs.jboss.org/resteasy/docs/3.0.4.Final/javadocs/javax/ws/rs/ client/Invocation.Builder.html), który nie odwołuje się do nieistniejącej klasy 'ClientFactory', ale byłoby wspaniale, gdyby autorzy RestEasy dodali kilka wskaźników z wycofanych klas. –

5

Jeśli założymy, że jest JSON API w http://example.org/pizza/{id}.json (gdzie „id” jest ID pizzy), która zwraca wyniki, takie jak

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

budynek na Invocation.Builder Javadocs, możemy zrobić coś takiego,

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

(jest to również wspierane przez this post, mimo że korzysta z wycofanego API).

Należy również zauważyć, że być może trzeba zarejestrować specjalnej obsługi, jeśli chcesz korzystać z Jackson do zapoznania POJOs (lub, jak sądzę, za pomocą JAXB) jako udokumentowaną here

Aktualizacja rzeczywiście tylko potrzebne są następujące Maven zależności:

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

(w takim przypadku nie jesteś w ogóle - z wykorzystaniem RestEasy javax.ws.rs JAXRS realizacja pochodzi z Jersey)

LUB można trzymać z 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> 

W takim przypadku można po prostu usunąć wiersz JacksonFeature w powyższym kodzie, a kod wykorzystuje bardziej liberalnej licencji Apache.

1

The RESTEasy documentation mówi, że powinniśmy zamknąć połączenie klienta; w twoim przykładzie będzie to client.close(). Ale każdy przykład, jaki mogę znaleźć, nie robi tego. Czy połączenie z klientem zostanie automatycznie zamknięte podczas usuwania śmieci?

Powiązane problemy