Example usage for org.springframework.http MediaType parseMediaTypes

List of usage examples for org.springframework.http MediaType parseMediaTypes

Introduction

In this page you can find the example usage for org.springframework.http MediaType parseMediaTypes.

Prototype

public static List<MediaType> parseMediaTypes(@Nullable List<String> mediaTypes) 

Source Link

Document

Parse the given list of (potentially) comma-separated strings into a list of MediaType objects.

Usage

From source file:biz.c24.io.spring.config.FormatBeanDefinitionParser.java

public BeanDefinition parse(Element element, ParserContext parserContext) {

    List<MediaType> mediaTypes = MediaType.parseMediaTypes(element.getAttribute("content-type"));
    String format = element.getAttribute("type");

    BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(DataFormat.class);
    builder.addConstructorArgValue(format.toUpperCase());
    builder.addConstructorArgValue(mediaTypes);

    return BeanDefinitionUtils.getSourcedBeanDefinition(builder, parserContext.extractSource(element));
}

From source file:org.cloudfoundry.identity.uaa.error.JsonAwareAccessDeniedHandler.java

@Override
public void handle(HttpServletRequest request, HttpServletResponse response,
        AccessDeniedException authException) throws IOException, ServletException {
    String accept = request.getHeader("Accept");
    boolean json = false;
    if (StringUtils.hasText(accept)) {
        for (MediaType mediaType : MediaType.parseMediaTypes(accept)) {
            if (mediaType.includes(MediaType.APPLICATION_JSON)) {
                json = true;/* w w  w  .  j  a va 2s. c om*/
                break;
            }
        }
    }
    if (json) {
        response.setStatus(HttpServletResponse.SC_FORBIDDEN);
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        response.getWriter().append(String.format("{\"error\":\"%s\"}", authException.getMessage()));
    } else {
        response.sendError(HttpServletResponse.SC_FORBIDDEN, authException.getMessage());
    }
}

From source file:org.cloudfoundry.identity.uaa.error.JsonAwareAuthenticationEntryPoint.java

@Override
public void commence(HttpServletRequest request, HttpServletResponse response,
        AuthenticationException authException) throws IOException, ServletException {
    response.addHeader("WWW-Authenticate", String.format("%s realm=\"%s\"", typeName, realmName));
    String accept = request.getHeader("Accept");
    boolean json = false;
    if (StringUtils.hasText(accept)) {
        for (MediaType mediaType : MediaType.parseMediaTypes(accept)) {
            if (mediaType.includes(MediaType.APPLICATION_JSON)) {
                json = true;/*  ww w. j  a v a 2  s. c o  m*/
                break;
            }
        }
    }
    if (json) {
        response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
        response.setContentType(MediaType.APPLICATION_JSON_VALUE);
        response.getWriter().append(String.format("{\"error\":\"%s\"}", authException.getMessage()));
    } else {
        response.sendError(HttpServletResponse.SC_UNAUTHORIZED, authException.getMessage());
    }
}

From source file:org.cloudfoundry.identity.uaa.web.ForwardAwareInternalResourceViewResolver.java

private MediaType getMediaTypes(HttpServletRequest request) {
    String acceptHeader = request.getHeader(ACCEPT_HEADER);
    if (StringUtils.hasText(acceptHeader)) {
        try {//from  ww w .j a  va 2  s  .co m
            List<MediaType> acceptableMediaTypes = MediaType.parseMediaTypes(acceptHeader);
            return acceptableMediaTypes.isEmpty() ? null : acceptableMediaTypes.get(0);
        } catch (IllegalArgumentException ex) {
            if (logger.isDebugEnabled()) {
                logger.debug("Could not parse accept header [" + acceptHeader + "]: " + ex.getMessage());
            }
            return null;
        }
    }
    return null;
}

From source file:ar.com.zauber.commons.web.filter.webkit.WebKitContentTypeFilter.java

/**
 * @param request//from   ww  w . j a va  2 s. c o m
 * @return todos los tipos de media types que acepta este request.
 */
private List<MediaType> getMediaTypes(final HttpServletRequest request) {
    Validate.notNull(request);
    String acceptHeader = request.getHeader(ACCEPT_HEADER);
    List<MediaType> mediaTypes = null;
    if (StringUtils.isNotBlank(acceptHeader)) {
        mediaTypes = MediaType.parseMediaTypes(acceptHeader);
    }
    return mediaTypes;
}

From source file:morph.plugin.views.annotation.ServletAnnotationMappingUtils.java

/**
 * Check whether the given request matches the specified header conditions.
 * @param headers the header conditions, following
 *                {@link org.springframework.web.bind.annotation.RequestMapping#headers() RequestMapping.headers()}
 * @param request the current HTTP request to check
 *//*from   ww w.  ja  va2 s . co  m*/
public static boolean checkHeaders(String[] headers, HttpServletRequest request) {
    if (!ObjectUtils.isEmpty(headers)) {
        for (String header : headers) {
            int separator = header.indexOf('=');
            if (separator == -1) {
                if (header.startsWith("!")) {
                    if (request.getHeader(header.substring(1)) != null) {
                        return false;
                    }
                } else if (request.getHeader(header) == null) {
                    return false;
                }
            } else {
                boolean negated = separator > 0 && header.charAt(separator - 1) == '!';
                String key = !negated ? header.substring(0, separator) : header.substring(0, separator - 1);
                String value = header.substring(separator + 1);
                if (isMediaTypeHeader(key)) {
                    List<MediaType> requestMediaTypes = MediaType.parseMediaTypes(request.getHeader(key));
                    List<MediaType> valueMediaTypes = MediaType.parseMediaTypes(value);
                    boolean found = false;
                    for (Iterator<MediaType> valIter = valueMediaTypes.iterator(); valIter.hasNext()
                            && !found;) {
                        MediaType valueMediaType = valIter.next();
                        for (Iterator<MediaType> reqIter = requestMediaTypes.iterator(); reqIter.hasNext()
                                && !found;) {
                            MediaType requestMediaType = reqIter.next();
                            if (valueMediaType.includes(requestMediaType)) {
                                found = true;
                            }
                        }

                    }
                    if (!found) {
                        return negated;
                    }
                } else if (!value.equals(request.getHeader(key))) {
                    return negated;
                }
            }
        }
    }
    return true;
}

From source file:com.icl.integrator.util.patch.ServletAnnotationMappingUtils.java

/**
 * Check whether the given request matches the specified header conditions.
 * @param headers the header conditions, following
 * {@link org.springframework.web.bind.annotation.RequestMapping#headers() RequestMapping.headers()}
 * @param request the current HTTP request to check
 *///from w  w w  . j  a v a2  s. co  m
public static boolean checkHeaders(String[] headers, HttpServletRequest request) {
    if (!ObjectUtils.isEmpty(headers)) {
        for (String header : headers) {
            int separator = header.indexOf('=');
            if (separator == -1) {
                if (header.startsWith("!")) {
                    if (request.getHeader(header.substring(1)) != null) {
                        return false;
                    }
                } else if (request.getHeader(header) == null) {
                    return false;
                }
            } else {
                boolean negated = (separator > 0 && header.charAt(separator - 1) == '!');
                String key = !negated ? header.substring(0, separator) : header.substring(0, separator - 1);
                String value = header.substring(separator + 1);
                if (isMediaTypeHeader(key)) {
                    List<MediaType> requestMediaTypes = MediaType.parseMediaTypes(request.getHeader(key));
                    List<MediaType> valueMediaTypes = MediaType.parseMediaTypes(value);
                    boolean found = false;
                    for (Iterator<MediaType> valIter = valueMediaTypes.iterator(); valIter.hasNext()
                            && !found;) {
                        MediaType valueMediaType = valIter.next();
                        for (Iterator<MediaType> reqIter = requestMediaTypes.iterator(); reqIter.hasNext()
                                && !found;) {
                            MediaType requestMediaType = reqIter.next();
                            if (valueMediaType.includes(requestMediaType)) {
                                found = true;
                            }
                        }

                    }
                    if (negated) {
                        found = !found;
                    }
                    if (!found) {
                        return false;
                    }
                } else {
                    boolean match = value.equals(request.getHeader(key));
                    if (negated) {
                        match = !match;
                    }
                    if (!match) {
                        return false;
                    }
                }
            }
        }
    }
    return true;
}

From source file:org.mitre.openid.connect.web.UserInfoEndpoint.java

/**
 * Get information about the user as specified in the accessToken included in this request
 *//*  w w w.  j av  a 2 s  . co  m*/
@PreAuthorize("hasRole('ROLE_USER') and #oauth2.hasScope('" + SystemScopeService.OPENID_SCOPE + "')")
@RequestMapping(method = { RequestMethod.GET, RequestMethod.POST }, produces = {
        MediaType.APPLICATION_JSON_VALUE, UserInfoJWTView.JOSE_MEDIA_TYPE_VALUE })
public String getInfo(@RequestParam(value = "claims", required = false) String claimsRequestJsonString,
        @RequestHeader(value = HttpHeaders.ACCEPT, required = false) String acceptHeader,
        OAuth2Authentication auth, Model model) {

    if (auth == null) {
        logger.error("getInfo failed; no principal. Requester is not authorized.");
        model.addAttribute(HttpCodeView.CODE, HttpStatus.FORBIDDEN);
        return HttpCodeView.VIEWNAME;
    }

    String username = auth.getName();
    UserInfo userInfo = userInfoService.getByUsernameAndClientId(username,
            auth.getOAuth2Request().getClientId());

    if (userInfo == null) {
        logger.error("getInfo failed; user not found: " + username);
        model.addAttribute(HttpCodeView.CODE, HttpStatus.NOT_FOUND);
        return HttpCodeView.VIEWNAME;
    }

    model.addAttribute(UserInfoView.SCOPE, auth.getOAuth2Request().getScope());

    model.addAttribute(UserInfoView.AUTHORIZED_CLAIMS, auth.getOAuth2Request().getExtensions().get("claims"));

    if (!Strings.isNullOrEmpty(claimsRequestJsonString)) {
        model.addAttribute(UserInfoView.REQUESTED_CLAIMS, claimsRequestJsonString);
    }

    model.addAttribute(UserInfoView.USER_INFO, userInfo);

    // content negotiation

    // start off by seeing if the client has registered for a signed/encrypted JWT from here
    ClientDetailsEntity client = clientService.loadClientByClientId(auth.getOAuth2Request().getClientId());
    model.addAttribute(UserInfoJWTView.CLIENT, client);

    List<MediaType> mediaTypes = MediaType.parseMediaTypes(acceptHeader);
    MediaType.sortBySpecificityAndQuality(mediaTypes);

    if (client.getUserInfoSignedResponseAlg() != null || client.getUserInfoEncryptedResponseAlg() != null
            || client.getUserInfoEncryptedResponseEnc() != null) {
        // client has a preference, see if they ask for plain JSON specifically on this request
        for (MediaType m : mediaTypes) {
            if (!m.isWildcardType() && m.isCompatibleWith(UserInfoJWTView.JOSE_MEDIA_TYPE)) {
                return UserInfoJWTView.VIEWNAME;
            } else if (!m.isWildcardType() && m.isCompatibleWith(MediaType.APPLICATION_JSON)) {
                return UserInfoView.VIEWNAME;
            }
        }

        // otherwise return JWT
        return UserInfoJWTView.VIEWNAME;
    } else {
        // client has no preference, see if they asked for JWT specifically on this request
        for (MediaType m : mediaTypes) {
            if (!m.isWildcardType() && m.isCompatibleWith(MediaType.APPLICATION_JSON)) {
                return UserInfoView.VIEWNAME;
            } else if (!m.isWildcardType() && m.isCompatibleWith(UserInfoJWTView.JOSE_MEDIA_TYPE)) {
                return UserInfoJWTView.VIEWNAME;
            }
        }

        // otherwise return JSON
        return UserInfoView.VIEWNAME;
    }

}

From source file:org.cloudfoundry.identity.uaa.security.web.UaaRequestMatcher.java

private boolean matchesAcceptHeader(String requestValue, List<String> expectedValues) {
    // Accept header is not required to be checked!
    if (requestValue == null) {
        return true;
    }//from ww  w .j  a  va2  s. c om

    List<MediaType> requestValues = MediaType.parseMediaTypes(requestValue);
    for (String expectedValue : expectedValues) {
        if (MediaType.parseMediaType(expectedValue).includes(requestValues.get(0))) {
            return true;
        }
    }
    return false;
}

From source file:com.seajas.search.attender.wsdl.Profile.java

/**
 * {@inheritDoc}//from  w  ww.j  av  a 2 s  .  co m
 */
@Override
public List<ProfileError> createProfile(final String email, final String emailLanguage, final String timeZone,
        final String notificationType, final Integer day, final Integer hour, final Integer minute,
        final Integer interval, final Integer maximum, final String query, final String searchParameterFormat,
        final String searchParameterLanguage, final String searchParameterAuthor,
        final String searchParameterType, final String searchParameterGeo,
        final List<Integer> taxonomyIdentifiers) {
    List<ProfileError> errors = new ArrayList<ProfileError>();

    // Validate the given input

    if (StringUtils.isEmpty(query))
        errors.add(new ProfileError("query", "profiles.error.query.empty"));

    String unescapedQuery = StringEscapeUtils.unescapeXml(StringEscapeUtils.unescapeXml(query));

    // Validate the subscriber(s)

    String[] emails = email.trim().split(",");

    for (String subscriberEmail : emails)
        if (StringUtils.isEmpty(subscriberEmail.trim())
                || !EmailValidator.getInstance().isValid(subscriberEmail.trim()))
            errors.add(new ProfileError("email", "profiles.error.subscriber.emails.invalid"));

    if (StringUtils.isEmpty(emailLanguage))
        errors.add(new ProfileError("emailLanguage", "profiles.error.subscriber.email.languages.invalid"));
    else if (!attenderService.getAvailableSearchLanguages().contains(emailLanguage))
        errors.add(new ProfileError("emailLanguage", "profiles.error.subscriber.email.languages.invalid"));

    if (StringUtils.isEmpty(timeZone))
        errors.add(new ProfileError("timeZone", "profiles.error.subscriber.timezones.invalid"));
    else if (!Arrays.asList(TimeZone.getAvailableIDs()).contains(timeZone)
            && !timeZone.matches("^GMT[+\\-][0-9]{2}:[0-9]{2}$"))
        errors.add(new ProfileError("timeZone", "profiles.error.subscriber.timezones.invalid"));

    if (StringUtils.isEmpty(notificationType))
        errors.add(new ProfileError("notificationType", "profiles.error.subscriber.types.invalid"));
    else
        try {
            NotificationType.valueOf(notificationType);
        } catch (IllegalArgumentException e) {
            errors.add(new ProfileError("notificationType", "profiles.error.subscriber.types.invalid"));
        }

    if (day == null)
        errors.add(new ProfileError("day", "profiles.error.subscriber.days.invalid"));
    else if (day < 0 || day > 6)
        errors.add(new ProfileError("day", "profiles.error.subscriber.days.invalid"));

    if (hour == null)
        errors.add(new ProfileError("subscriberHours", "profiles.error.subscriber.hours.invalid"));
    else if (hour < 0 || hour > 23)
        errors.add(new ProfileError("subscriberHours", "profiles.error.subscriber.hours.invalid"));

    if (minute == null)
        errors.add(new ProfileError("minute", "profiles.error.subscriber.minutes.invalid"));
    else if (minute < 0 || minute > 59)
        errors.add(new ProfileError("minute", "profiles.error.subscriber.minutes.invalid"));

    // Validate the search parameters

    if (!StringUtils.isEmpty(searchParameterFormat))
        try {
            MediaType.parseMediaTypes(searchParameterFormat.replaceAll(" ", ","));
        } catch (IllegalArgumentException e) {
            errors.add(new ProfileError("searchParameterFormat",
                    "profiles.error.search.parameter.format.invalid"));
        }
    else if (!StringUtils.isEmpty(searchParameterLanguage)) {
        if (!attenderService.getAvailableSearchLanguages().contains(searchParameterLanguage))
            errors.add(new ProfileError("searchParameterLanguage",
                    "profiles.error.search.parameter.language.invalid"));
    }

    // Validate the taxonomy identifiers

    for (Integer taxonomyIdentifier : taxonomyIdentifiers)
        if (taxonomyIdentifier == null)
            errors.add(new ProfileError("taxonomyIdentifiers", "profiles.error.taxonomy.identifiers.empty"));

    // Add it up if there aren't any errors

    if (errors.size() == 0) {
        List<ProfileSubscriber> subscribers = new ArrayList<ProfileSubscriber>(emails.length);

        for (String subscriberEmail : emails)
            subscribers.add(new ProfileSubscriber(subscriberEmail.trim(), emailLanguage, false, null, timeZone,
                    NotificationType.valueOf(notificationType), day, hour, minute, interval, maximum, null));

        Map<String, String> searchParameters = new HashMap<String, String>();

        if (!StringUtils.isEmpty(searchParameterFormat))
            searchParameters.put("dcterms_format", searchParameterFormat);
        if (!StringUtils.isEmpty(searchParameterLanguage))
            searchParameters.put("dcterms_language", searchParameterLanguage);
        if (!StringUtils.isEmpty(searchParameterAuthor))
            searchParameters.put("dcterms_author", searchParameterAuthor);
        if (!StringUtils.isEmpty(searchParameterType))
            searchParameters.put("dcterms_type", searchParameterType);
        if (!StringUtils.isEmpty(searchParameterGeo))
            searchParameters.put("geo_total", searchParameterGeo);

        attenderService.addProfile(unescapedQuery, true, subscribers, searchParameters, taxonomyIdentifiers);
    }

    return errors;
}