2016-04-29 41 views
8

Ho scritto una classe semplice per testare il metodo dell'entità di lettura risposta (se funziona come previsto). Ma non ha funzionato bene.IllegalStateException all'interno del metodo con parametro di risposta

Quando lancio la mia classe vengo seguente errore al response.readEntity():

Exception in thread "main" java.lang.IllegalStateException: Method not supported on an outbound message. 
    at org.glassfish.jersey.message.internal.OutboundJaxrsResponse.readEntity(OutboundJaxrsResponse.java:150) 

Ed ecco il codice che ho scritto

public static void main(String[] args) { 
     List<Entity> representations = new ArrayList<>(); 
     representations.add(new Entity("foo", "baz", false)); 
     representations.add(new Entity("foo1", "baz1", true)); 
     representations.add(new Entity("foo2", "baz2", false)); 
     Response build = Response.ok(representations).build(); 
     printEntitesFromResponse(build); 
    } 

public static void printEntitesFromResponse(Response response) { 
     response 
       .readEntity(new GenericType<List<Entity>>() {}) 
       .stream() 
       .forEach(entity -> System.out.println(entity)); 
    } 

Che cosa sto facendo di sbagliato?

risposta

12

Ci sono due tipi di Response es, entrata e in uscita, anche se ancora utilizzano la stessa interfaccia. In uscita è quando si invia una risposta dal server

Response response = Response.ok(entity).build(); 

L'ingresso è quando si riceve la risposta dal lato client.

Response response = webTarget.request().get(); 

Il metodo readEntity non è attivato per la risposta in uscita lato server, perché non ne ha bisogno. Viene utilizzato solo quando è necessario _de_serializzare la risposta dal flusso di risposta. Ma non ce n'è quando è in uscita.

Se si desidera che l'entità sulla risposta in uscita, utilizzare solo Response#getEntity()

0

Ecco come il metodo è implementato in glassfish

@Override 
149  public <T> T readEntity(GenericType<T> entityType) throws ProcessingException { 
150   throw new IllegalStateException(LocalizationMessages.NOT_SUPPORTED_ON_OUTBOUND_MESSAGE()); 
151  }