in java/src/main/java/org/apache/brooklyn/rest/client/BrooklynApi.java [375:405]
private static <T> void failSomeErrors(Response response, Class<?> type, boolean onlyIfItLooksLikeApiError) {
if (response.getStatus()<400) {
// not an error
return;
}
if (onlyIfItLooksLikeApiError && type.isAssignableFrom(ApiError.class) && !Map.class.isAssignableFrom(type)) {
// if user wanted a map or an ApiError, don't fail (for legacy compatibility)
return;
}
Object obj = new Gson().fromJson(response.getEntity().toString(), Object.class);
if (onlyIfItLooksLikeApiError && !(obj instanceof Map)) {
// only handle maps
return;
}
@SuppressWarnings("rawtypes")
Map m = (Map)obj;
Object error = m.get("error");
if (onlyIfItLooksLikeApiError && (error==null || new Integer(0).equals(error) || "".equals(error))) {
// error should be non-zero for "ApiError"
return;
}
Object message = m.get("message");
if (message==null) message = m.get("detail");
throw new IllegalArgumentException("Server error "+response.getStatus()+" cannot be converted to "+type.getName()+
(message!=null ? ": "+message : ""));
}