Pregunta

Método estático (aparentemente) simple que invoca un buen servicio web conocido.

El servicio devuelve HTTP 500/Error interno del servidor si no se encuentra un registro coincidente, pero el bloque de recuperación de invocación nunca se ejecuta.

¿Me estoy perdiendo lo obvio o estoy haciendo algo descaradamente estúpido?

public static Promise<Property> ByPhone(String phone) {
  return WS.url("http://localhost:9000/data/property/" + phone)
           .get ()
           .map (
              new Function<WS.Response, Property>() {
                public Property apply (WS.Response response) {
                  System.out.println("got here: " + response.getStatusText());
                  Property property = null;
                  try {
                    property = _mapper.readValue(response.getBody(), Property.class);
                  } catch (Throwable t) {
                    t.printStackTrace();
                  }
                  return property;
                }
              }
            ).recover (
              new Function<Throwable, Property>() {
                public Property apply (Throwable t) {
                  System.out.println("never get here");
                  t.printStackTrace();
                  return null;
                }
              }
            );
}
¿Fue útil?

Solución

recover ayuda a uno a recuperarse de excepciones no detectadas.En este caso, una respuesta HTTP 500 no da como resultado un mensaje no detectado. Throwable

Presumiblemente, 500 significa que el siguiente bloque arrojará un error

property = _mapper.readValue(response.getBody(), Property.class);

Sin embargo, ya tienes esto envuelto en un bloque try catch.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top