private static void failSomeErrors()

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