@Override @CheckForNull public InputStream paramAsInputStream(String key) { return readInputStreamParam(key); }
@Override @CheckForNull public String param(String key) { WebService.Param definition = action.param(key); String rawValue = readParam(key, definition); String rawValueOrDefault = defaultString(rawValue, definition.defaultValue()); String value = rawValueOrDefault == null ? null : CharMatcher.WHITESPACE.trimFrom(rawValueOrDefault); validateRequiredValue(key, definition, rawValue); if (value == null) { return null; } validatePossibleValues(key, value, definition); validateMaximumLength(key, definition, rawValueOrDefault); validateMinimumLength(key, definition, rawValueOrDefault); validateMaximumValue(key, definition, value); return value; }
@CheckForNull @Override public <E extends Enum<E>> List<E> paramAsEnums(String key, Class<E> enumClass) { List<String> values = paramAsStrings(key); if (values == null) { return null; } return values.stream() .map(value -> Enum.valueOf(enumClass, value)) .collect(Collectors.toList()); }
@Override public List<String> multiParam(String key) { WebService.Param definition = action.param(key); List<String> values = readMultiParamOrDefaultValue(key, definition); return validateValues(values, definition); }
@CheckForNull @Override public List<String> paramAsStrings(String key) { WebService.Param definition = action.param(key); String value = defaultString(readParam(key, definition), definition.defaultValue()); if (value == null) { return null; } List<String> values = COMMA_SPLITTER.splitToList(value); return validateValues(values, definition); }
public void execute(Request request, Response response) { try { ActionExtractor actionExtractor = new ActionExtractor(request.getPath()); WebService.Action action = getAction(actionExtractor); checkFound(action, "Unknown url : %s", request.getPath()); if (request instanceof ValidatingRequest) { ((ValidatingRequest) request).setAction(action); ((ValidatingRequest) request).setLocalConnector(this); } checkActionExtension(actionExtractor.getExtension()); verifyRequest(action, request); action.handler().handle(request, response); } catch (IllegalArgumentException e) { sendErrors(request, response, e, 400, singletonList(e.getMessage())); } catch (BadRequestException e) { sendErrors(request, response, e, 400, e.errors()); } catch (ServerException e) { sendErrors(request, response, e, e.httpCode(), singletonList(e.getMessage())); } catch (Exception e) { sendErrors(request, response, e, 500, singletonList("An error has occurred. Please contact your administrator")); } }
@CheckForNull private String readParam(String key, @Nullable WebService.Param definition) { checkArgument(definition != null, "BUG - parameter '%s' is undefined for action '%s'", key, action.key()); String deprecatedKey = definition.deprecatedKey(); return deprecatedKey != null ? defaultString(readParam(deprecatedKey), readParam(key)) : readParam(key); }
@Override @CheckForNull public Part paramAsPart(String key) { return readPart(key); }
private static void validateMaximumValue(String key, WebService.Param definition, String value) { Integer maximumValue = definition.maximumValue(); if (maximumValue == null) { return; } int valueAsInt = validateAsNumeric(key, value); checkArgument(valueAsInt <= maximumValue, "'%s' value (%s) must be less than %s", key, valueAsInt, maximumValue); }
private List<String> readMultiParamOrDefaultValue(String key, @Nullable WebService.Param definition) { checkArgument(definition != null, "BUG - parameter '%s' is undefined for action '%s'", key, action.key()); List<String> keyValues = readMultiParam(key); if (!keyValues.isEmpty()) { return keyValues; } String deprecatedKey = definition.deprecatedKey(); List<String> deprecatedKeyValues = deprecatedKey == null ? emptyList() : readMultiParam(deprecatedKey); if (!deprecatedKeyValues.isEmpty()) { return deprecatedKeyValues; } String defaultValue = definition.defaultValue(); return defaultValue == null ? emptyList() : singletonList(defaultValue); }
@CheckForNull @Override public List<String> paramAsStrings(String key) { WebService.Param definition = action.param(key); String value = defaultString(readParam(key, definition), definition.defaultValue()); if (value == null) { return null; } List<String> values = COMMA_SPLITTER.splitToList(value); return validateValues(values, definition); }
@Override public List<String> multiParam(String key) { WebService.Param definition = action.param(key); List<String> values = readMultiParamOrDefaultValue(key, definition); return validateValues(values, definition); }
public void execute(Request request, Response response) { try { ActionExtractor actionExtractor = new ActionExtractor(request.getPath()); WebService.Action action = getAction(actionExtractor); checkFound(action, "Unknown url : %s", request.getPath()); if (request instanceof ValidatingRequest) { ((ValidatingRequest) request).setAction(action); ((ValidatingRequest) request).setLocalConnector(this); } checkActionExtension(actionExtractor.getExtension()); verifyRequest(action, request); action.handler().handle(request, response); } catch (IllegalArgumentException e) { sendErrors(request, response, e, 400, singletonList(e.getMessage())); } catch (BadRequestException e) { sendErrors(request, response, e, 400, e.errors()); } catch (ServerException e) { sendErrors(request, response, e, e.httpCode(), singletonList(e.getMessage())); } catch (Exception e) { sendErrors(request, response, e, 500, singletonList("An error has occurred. Please contact your administrator")); } }
@CheckForNull private String readParam(String key, @Nullable WebService.Param definition) { checkArgument(definition != null, "BUG - parameter '%s' is undefined for action '%s'", key, action.key()); String deprecatedKey = definition.deprecatedKey(); return deprecatedKey != null ? defaultString(readParam(deprecatedKey), readParam(key)) : readParam(key); }
@Override @CheckForNull public Part paramAsPart(String key) { return readPart(key); }
private static void validateMaximumValue(String key, WebService.Param definition, String value) { Integer maximumValue = definition.maximumValue(); if (maximumValue == null) { return; } int valueAsInt = validateAsNumeric(key, value); checkArgument(valueAsInt <= maximumValue, "'%s' value (%s) must be less than %s", key, valueAsInt, maximumValue); }
private List<String> readMultiParamOrDefaultValue(String key, @Nullable WebService.Param definition) { checkArgument(definition != null, "BUG - parameter '%s' is undefined for action '%s'", key, action.key()); List<String> keyValues = readMultiParam(key); if (!keyValues.isEmpty()) { return keyValues; } String deprecatedKey = definition.deprecatedKey(); List<String> deprecatedKeyValues = deprecatedKey == null ? emptyList() : readMultiParam(deprecatedKey); if (!deprecatedKeyValues.isEmpty()) { return deprecatedKeyValues; } String defaultValue = definition.defaultValue(); return defaultValue == null ? emptyList() : singletonList(defaultValue); }
@Override @CheckForNull public String param(String key) { WebService.Param definition = action.param(key); String rawValue = readParam(key, definition); String rawValueOrDefault = defaultString(rawValue, definition.defaultValue()); String value = rawValueOrDefault == null ? null : CharMatcher.WHITESPACE.trimFrom(rawValueOrDefault); validateRequiredValue(key, definition, rawValue); if (value == null) { return null; } validatePossibleValues(key, value, definition); validateMaximumLength(key, definition, rawValueOrDefault); validateMinimumLength(key, definition, rawValueOrDefault); validateMaximumValue(key, definition, value); return value; }
@CheckForNull private String readParamOrDefaultValue(String key, @Nullable WebService.Param definition) { if (definition == null) { String message = String.format("BUG - parameter '%s' is undefined for action '%s'", key, action.key()); Loggers.get(getClass()).error(message); throw new IllegalArgumentException(message); } String deprecatedKey = definition.deprecatedKey(); String value = deprecatedKey != null ? StringUtils.defaultString(readParam(deprecatedKey), readParam(key)) : readParam(key); value = StringUtils.defaultString(value, definition.defaultValue()); if (value == null) { return null; } return value; }
@Override @CheckForNull public InputStream paramAsInputStream(String key) { return readInputStreamParam(key); }