Question

(Seemingly) simple static method that invokes a known good web service.

Service returns HTTP 500 / Internal Server Error if a matching record is not found, but the recovery block of invokation is never executed.

Am I missing the obvious or doing something blatantly stupid?

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;
                }
              }
            );
}
Was it helpful?

Solution

recover helps one recover from uncaught exceptions. In this case an HTTP 500 response doesn't result in an uncaught Throwable

Presumably, 500 means that the following block will throw an error

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

However, you have this wrapped in a try catch block already.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top