@Test public void testSpecialChars() throws IOException { String specialChars = new String(new char[] {(char) '香'}) + " 香蕉"; ResourceWebScriptPost extractor = new ResourceWebScriptPost(); extractor.setJsonHelper(jsonHelper); Map<String, String> templateVars = new HashMap<String, String>(); String mockMe = "{\"name\":\"" + specialChars + "\",\"created\":\"2012-03-23T15:56:18.552+0000\",\"age\":54,\"id\":\"1234A3\",\"farm\":\"LARGE\"}"; Content content = mock(Content.class); when(content.getReader()).thenReturn(new StringReader(mockMe)); WebScriptRequest request = mock(WebScriptRequest.class); when(request.getServiceMatch()).thenReturn(new Match(null, templateVars, null)); when(request.getContent()).thenReturn(content); Params params = extractor.extractParams(mockEntity(), request); assertNotNull(params); Object passed = params.getPassedIn(); assertTrue(List.class.isAssignableFrom(passed.getClass())); @SuppressWarnings("unchecked") List<Object> passedObjs = (List<Object>) passed; assertTrue(passedObjs.size() == 1); assertTrue("A Farmer was passed in.", Farmer.class.equals(passedObjs.get(0).getClass())); Farmer f = (Farmer) passedObjs.get(0); assertTrue(f.getName().equals("香 香蕉")); // Test passing in special characters as a param. ResourceWebScriptGet getExtractor = new ResourceWebScriptGet(); getExtractor.setJsonHelper(jsonHelper); Map<String, String> getTemplateVars = new HashMap<String, String>(); WebScriptRequest getRequest = mock(WebScriptRequest.class); when(getRequest.getServiceMatch()).thenReturn(new Match(null, getTemplateVars, null)); when(getRequest.getParameterNames()).thenReturn(new String[] {"aParam"}); when(getRequest.getParameterValues("aParam")).thenReturn(new String[] {specialChars}); Params pGet = getExtractor.extractParams(mockEntity(), getRequest); assertNotNull(pGet); String pVal = pGet.getParameter("aParam"); assertTrue(pVal.equals("香 香蕉")); }