@Override protected JSONObject resolveArgument(WebScriptRequest request, WebScriptResponse response) { if (request.getContentType().startsWith(MimetypeMap.MIMETYPE_JSON)) { try { final String contentText = request.getContent().getContent(); if (contentText != null) { try { return new JSONObject(contentText); } catch (JSONException e) { throw new WebScriptException( Status.STATUS_BAD_REQUEST, "Failed to parse JSON body: " + contentText, e); } } } catch (IOException ex) { throw new WebScriptException(Status.STATUS_BAD_REQUEST, "Failed to read body content", ex); } } return null; }
@Test public void testPutExtractor() throws IOException { // Put together the stubs ResourceWebScriptPut extractor = new ResourceWebScriptPut(); extractor.setJsonHelper(jsonHelper); Map<String, String> templateVars = new HashMap<String, String>(); Content content = mock(Content.class); when(content.getReader()).thenReturn(new StringReader(JsonJacksonTests.FARMER_JSON)); WebScriptRequest request = mock(WebScriptRequest.class); when(request.getServiceMatch()).thenReturn(new Match(null, templateVars, null)); when(request.getContent()).thenReturn(content); when(request.getContentType()).thenReturn("application/pdf; charset=UTF-16BE"); Params params = null; try { params = extractor.extractParams(mockEntity(), request); fail("Should not get here. PUT is executed against the instance URL"); } catch (UnsupportedResourceOperationException uoe) { assertNotNull(uoe); // Must throw this exception } templateVars.put(ResourceLocator.ENTITY_ID, "1234"); try { params = extractor.extractParams(mockRelationship(), request); fail("Should not get here. PUT is executed against the instance URL"); } catch (UnsupportedResourceOperationException uoe) { assertNotNull(uoe); // Must throw this exception } templateVars.put(ResourceLocator.ENTITY_ID, "1234"); // Put single entity wrapped in array params = extractor.extractParams(mockEntity(), request); assertNotNull(params); Object passed = params.getPassedIn(); assertNotNull(passed); assertTrue("A Farmer was passed in.", Farmer.class.equals(passed.getClass())); assertNotNull(params.getFilter()); assertTrue( "Default filter is BeanPropertiesFilter.AllProperties", BeanPropertiesFilter.AllProperties.class.equals(params.getFilter().getClass())); when(content.getReader()) .thenReturn(new StringReader(JsonJacksonTests.FARMER_JSON)); // reset the reader params = extractor.extractParams(mockEntity(), request); assertNotNull(params); assertEquals("1234", params.getEntityId()); passed = params.getPassedIn(); assertNotNull(passed); when(content.getReader()) .thenReturn(new StringReader(JsonJacksonTests.FARMER_JSON)); // reset the reader templateVars.put(ResourceLocator.RELATIONSHIP_ID, "67890"); params = extractor.extractParams(mockRelationship(), request); assertNotNull(params); assertEquals("1234", params.getEntityId()); passed = params.getPassedIn(); assertNotNull(passed); assertTrue("A Farmer was passed in.", Farmer.class.equals(passed.getClass())); Farmer aFarmer = (Farmer) passed; assertEquals( "Relationship id should be automatically set on the object passed in.", aFarmer.getId(), "67890"); when(content.getReader()) .thenReturn(new StringReader(JsonJacksonTests.FARMER_JSON)); // reset the reader params = testExtractAddressedParams(templateVars, request, extractor); assertEquals("UTF-16BE", params.getContentInfo().getEncoding()); assertEquals(MimetypeMap.MIMETYPE_PDF, params.getContentInfo().getMimeType()); }