protected void validateProperties() {
        if (pre_signed_put_url != null && pre_signed_delete_url != null) {
            PreSignedUrlParser parsedPut = new PreSignedUrlParser(pre_signed_put_url);
            PreSignedUrlParser parsedDelete = new PreSignedUrlParser(pre_signed_delete_url);
            if (!parsedPut.getBucket().equals(parsedDelete.getBucket()) ||
                    !parsedPut.getPrefix().equals(parsedDelete.getPrefix())) {
                throw new IllegalArgumentException("pre_signed_put_url and pre_signed_delete_url must have the same path");
            }
        } else if (pre_signed_put_url != null || pre_signed_delete_url != null) {
            throw new IllegalArgumentException("pre_signed_put_url and pre_signed_delete_url must both be set or both unset");
        }
        //if (prefix != null && location != null) {
        //    throw new IllegalArgumentException("set either prefix or location, but not both");
        //}
        if (prefix != null && (access_key == null || secret_access_key == null)) {
            throw new IllegalArgumentException("access_key and secret_access_key must be set when setting prefix");
        }
    }