public static CharacterEncoding fromString(final String name) { requireNonNull(name,"Character encoding name cannot be null"); try { if(WILDCARD.equals(name)) { return wildcard(); } else { return of(Charset.forName(name)); } } catch (final UnsupportedCharsetException ex) { throw new IllegalArgumentException("Unsupported character encoding '"+ex.getCharsetName()+"'",ex); } catch (final IllegalCharsetNameException ex) { throw new IllegalArgumentException("Invalid character encoding name '"+ex.getCharsetName()+"'",ex); } }
private static void checkParameter(final String parameter, String value) { checkHasLength(parameter, "Parameter name cannot be empty"); checkToken(parameter,"Invalid parameter name '%s'",parameter); checkHasLength(value, "Value for parameter '%s' cannot be empty",parameter); if(MediaTypes.PARAM_CHARSET.equalsIgnoreCase(parameter)) { final String unquotedValue = HttpUtils.unquote(value); try { Charset.forName(unquotedValue); } catch (final UnsupportedCharsetException ex) { throw new IllegalArgumentException("Unsupported charset '"+ex.getCharsetName()+"'",ex); } catch (final IllegalCharsetNameException ex) { throw new IllegalArgumentException("Invalid charset name '"+ex.getCharsetName()+"'",ex); } } else if(!HttpUtils.isQuotedString(value)) { checkToken(value); } else { checkQuotedString(HttpUtils.unquote(value)); } }
@Test public void cannotParseMediaTypesWithBadCharsetName() throws Exception { try { createParam("charset=<catepora>"); fail("Should fail for bad-name charsets"); } catch (final InvalidMediaTypeException e) { assertThat(e.getCause(),instanceOf(IllegalArgumentException.class)); assertThat(((IllegalCharsetNameException)e.getCause().getCause()).getCharsetName(),equalTo("<catepora>")); } }