protected String getPostContent(HttpServletRequest request, Map<String,FormDataItem> formItems) throws ContentTypes.InvalidContentTypeException, IOException { String content = null; ContentTypes.checkContentTypes(ALLOWED_CONTENT_TYPES, request.getContentType()); if (formParser.isMultipartContent(request)) { for (FormDataItem item : formParser.parse(request)) { if (item.isFormField() && REQUEST_PARAM.equals(item.getFieldName()) && content == null) { // As per spec, in case of a multipart/form-data content, there will be one form field // with field name as "request". It will contain the json request. Any further form // field or file item will not be parsed out, but will be exposed via getFormItem // method of RequestItem. if (!Strings.isNullOrEmpty(item.getContentType())) { ContentTypes.checkContentTypes(ContentTypes.ALLOWED_JSON_CONTENT_TYPES, item.getContentType()); } content = item.getAsString(); } else { formItems.put(item.getFieldName(), item); } } } else { content = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding()); } return content; }
@Test public void testSingleRequest() throws Exception { MultipartFormBuilder builder = new MultipartFormBuilder(); builder.addFormField(REQUEST_FIELDNAME, REQUEST_DATA); setupRequest(builder.build(), builder.getContentType()); List<FormDataItem> formItems = Lists.newArrayList(multipartFormParser.parse(request)); assertEquals(1, formItems.size()); FormDataItem formItem = formItems.get(0); assertTrue(formItem.isFormField()); assertEquals(REQUEST_FIELDNAME, formItem.getFieldName()); assertEquals(REQUEST_DATA, new String(formItem.get())); }
/** * Test that requests must be both POST and have a multipart * content type. */ @Test public void testIsMultipartContent() { FakeHttpServletRequest request = new FakeHttpServletRequest(); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setMethod("POST"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setContentType("multipart/form-data"); assertTrue(multipartFormParser.isMultipartContent(request)); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); }
@Test public void testSingleRequest() throws Exception { MultipartFormBuilder builder = new MultipartFormBuilder(); builder.addFormField(REQUEST_FIELDNAME, REQUEST_DATA); setupRequest(builder.build(), builder.getContentType()); List<FormDataItem> formItems = Lists.newArrayList(multipartFormParser.parse(request)); assertEquals(1, formItems.size()); FormDataItem formItem = formItems.get(0); assertTrue(formItem.isFormField()); assertEquals(REQUEST_FIELDNAME, formItem.getFieldName()); assertEquals(REQUEST_DATA, new String(formItem.get())); }
/** * Test that requests must be both POST and have a multipart * content type. */ @Test public void testIsMultipartContent() { FakeHttpServletRequest request = new FakeHttpServletRequest(); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setMethod("POST"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setContentType("multipart/form-data"); assertTrue(multipartFormParser.isMultipartContent(request)); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); }
protected String getPostContent(HttpServletRequest request, Map<String,FormDataItem> formItems) throws ContentTypes.InvalidContentTypeException, IOException { String content = null; ContentTypes.checkContentTypes(ALLOWED_CONTENT_TYPES, request.getContentType()); if (formParser.isMultipartContent(request)) { for (FormDataItem item : formParser.parse(request)) { if (item.isFormField() && REQUEST_PARAM.equals(item.getFieldName()) && content == null) { // As per spec, in case of a multipart/form-data content, there will be one form field // with field name as "request". It will contain the json request. Any further form // field or file item will not be parsed out, but will be exposed via getFormItem // method of RequestItem. if (!StringUtils.isEmpty(item.getContentType())) { ContentTypes.checkContentTypes(ContentTypes.ALLOWED_JSON_CONTENT_TYPES, item.getContentType()); } content = item.getAsString(); } else { formItems.put(item.getFieldName(), item); } } } else { content = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding()); } return content; }
@Test public void testSingleRequest() throws Exception { MultipartFormBuilder builder = new MultipartFormBuilder(); builder.addFormField(REQUEST_FIELDNAME, REQUEST_DATA); setupRequest(builder.build(), builder.getContentType()); List<FormDataItem> formItems = Lists.newArrayList(multipartFormParser.parse(request)); assertEquals(1, formItems.size()); FormDataItem formItem = formItems.get(0); assertTrue(formItem.isFormField()); assertEquals(REQUEST_FIELDNAME, formItem.getFieldName()); assertEquals(REQUEST_DATA, new String(formItem.get())); }
/** * Test that requests must be both POST and have a multipart * content type. */ @Test public void testIsMultipartContent() { FakeHttpServletRequest request = new FakeHttpServletRequest(); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setMethod("POST"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setContentType("multipart/form-data"); assertTrue(multipartFormParser.isMultipartContent(request)); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); }
protected String getPostContent(HttpServletRequest request, Map<String,FormDataItem> formItems) throws ContentTypes.InvalidContentTypeException, IOException { String content = null; ContentTypes.checkContentTypes(ALLOWED_CONTENT_TYPES, request.getContentType()); if (formParser.isMultipartContent(request)) { for (FormDataItem item : formParser.parse(request)) { if (item.isFormField() && REQUEST_PARAM.equals(item.getFieldName()) && content == null) { // As per spec, in case of a multipart/form-data content, there will be one form field // with field name as "request". It will contain the json request. Any further form // field or file item will not be parsed out, but will be exposed via getFormItem // method of RequestItem. if (!Strings.isNullOrEmpty(item.getContentType())) { ContentTypes.checkContentTypes(ContentTypes.ALLOWED_JSON_CONTENT_TYPES, item.getContentType()); } content = item.getAsString(); } else { formItems.put(item.getFieldName(), item); } } } else { content = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding()); } return content; }
@Test public void testSingleRequest() throws Exception { MultipartFormBuilder builder = new MultipartFormBuilder(); builder.addFormField(REQUEST_FIELDNAME, REQUEST_DATA); setupRequest(builder.build(), builder.getContentType()); List<FormDataItem> formItems = Lists.newArrayList(multipartFormParser.parse(request)); assertEquals(1, formItems.size()); FormDataItem formItem = formItems.get(0); assertTrue(formItem.isFormField()); assertEquals(REQUEST_FIELDNAME, formItem.getFieldName()); assertEquals(REQUEST_DATA, new String(formItem.get())); }
/** * Test that requests must be both POST and have a multipart * content type. */ @Test public void testIsMultipartContent() { FakeHttpServletRequest request = new FakeHttpServletRequest(); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setMethod("POST"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setContentType("multipart/form-data"); assertTrue(multipartFormParser.isMultipartContent(request)); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); }
protected String getPostContent(HttpServletRequest request, Map<String,FormDataItem> formItems) throws ContentTypes.InvalidContentTypeException, IOException { String content = null; ContentTypes.checkContentTypes(ALLOWED_CONTENT_TYPES, request.getContentType()); if (formParser.isMultipartContent(request)) { for (FormDataItem item : formParser.parse(request)) { if (item.isFormField() && REQUEST_PARAM.equals(item.getFieldName()) && content == null) { // As per spec, in case of a multipart/form-data content, there will be one form field // with field name as "request". It will contain the json request. Any further form // field or file item will not be parsed out, but will be exposed via getFormItem // method of RequestItem. if (!Strings.isNullOrEmpty(item.getContentType())) { ContentTypes.checkContentTypes(ContentTypes.ALLOWED_JSON_CONTENT_TYPES, item.getContentType()); } content = item.getAsString(); } else { formItems.put(item.getFieldName(), item); } } } else { content = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding()); } return content; }
@Test public void testSingleRequest() throws Exception { MultipartFormBuilder builder = new MultipartFormBuilder(); builder.addFormField(REQUEST_FIELDNAME, REQUEST_DATA); setupRequest(builder.build(), builder.getContentType()); List<FormDataItem> formItems = Lists.newArrayList(multipartFormParser.parse(request)); assertEquals(1, formItems.size()); FormDataItem formItem = formItems.get(0); assertTrue(formItem.isFormField()); assertEquals(REQUEST_FIELDNAME, formItem.getFieldName()); assertEquals(REQUEST_DATA, new String(formItem.get())); }
/** * Test that requests must be both POST and have a multipart * content type. */ @Test public void testIsMultipartContent() { FakeHttpServletRequest request = new FakeHttpServletRequest(); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setMethod("POST"); assertFalse(multipartFormParser.isMultipartContent(request)); request.setContentType("multipart/form-data"); assertTrue(multipartFormParser.isMultipartContent(request)); request.setMethod("GET"); assertFalse(multipartFormParser.isMultipartContent(request)); }
protected String getPostContent(HttpServletRequest request, Map<String,FormDataItem> formItems) throws ContentTypes.InvalidContentTypeException, IOException { String content = null; ContentTypes.checkContentTypes(ALLOWED_CONTENT_TYPES, request.getContentType()); if (formParser.isMultipartContent(request)) { for (FormDataItem item : formParser.parse(request)) { if (item.isFormField() && REQUEST_PARAM.equals(item.getFieldName()) && content == null) { // As per spec, in case of a multipart/form-data content, there will be one form field // with field name as "request". It will contain the json request. Any further form // field or file item will not be parsed out, but will be exposed via getFormItem // method of RequestItem. if (!StringUtils.isEmpty(item.getContentType())) { ContentTypes.checkContentTypes(ContentTypes.ALLOWED_JSON_CONTENT_TYPES, item.getContentType()); } content = item.getAsString(); } else { formItems.put(item.getFieldName(), item); } } } else { content = IOUtils.toString(request.getInputStream(), request.getCharacterEncoding()); } return content; }
@Test public void testSingleFileItem() throws Exception { MultipartFormBuilder builder = new MultipartFormBuilder(); builder.addFileItem(ALBUM_IMAGE_FIELDNAME, ALBUM_IMAGE_FILENAME, ALBUM_IMAGE_DATA, ALBUM_IMAGE_TYPE); setupRequest(builder.build(), builder.getContentType()); List<FormDataItem> formItems = Lists.newArrayList(multipartFormParser.parse(request)); assertEquals(1, formItems.size()); FormDataItem formItem = formItems.get(0); assertFalse(formItem.isFormField()); assertEquals(ALBUM_IMAGE_FIELDNAME, formItem.getFieldName()); assertEquals(ALBUM_IMAGE_FILENAME, formItem.getName()); assertEquals(ALBUM_IMAGE_TYPE, formItem.getContentType()); assertEquals(ALBUM_IMAGE_DATA, new String(formItem.get())); }
@Before public void setUp() throws Exception { servlet = new JsonRpcServlet(); req = mockControl.createMock(HttpServletRequest.class); res = mockControl.createMock(HttpServletResponse.class); containerConfig = mockControl.createMock(ContainerConfig.class); multipartFormParser = mockControl.createMock(MultipartFormParser.class); EasyMock.expect(multipartFormParser.isMultipartContent(req)).andStubReturn(false); servlet.setMultipartFormParser(multipartFormParser); BeanJsonConverter converter = new BeanJsonConverter(Guice.createInjector()); HandlerRegistry registry = new DefaultHandlerRegistry(null, null, new HandlerExecutionListener.NoOpHandler()); registry.addHandlers(Collections.<Object>singleton(handler)); servlet.setHandlerRegistry(registry); servlet.setBeanConverters(converter, null, null); servlet.setContainerConfig(containerConfig); handler.setMock(new TestHandler() { @Override public Object get(RequestItem req) { return ImmutableMap.of("foo", "bar"); } }); }
formItems.add(mockFormDataItem("request", "application/octet-stream", request.getBytes(), true)); expect(multipartFormParser.isMultipartContent(req)).andReturn(true); expect(multipartFormParser.parse(req)).andReturn(formItems); expect(res.getWriter()).andReturn(writer); expectLastCall();
@Test public void testSingleFileItem() throws Exception { MultipartFormBuilder builder = new MultipartFormBuilder(); builder.addFileItem(ALBUM_IMAGE_FIELDNAME, ALBUM_IMAGE_FILENAME, ALBUM_IMAGE_DATA, ALBUM_IMAGE_TYPE); setupRequest(builder.build(), builder.getContentType()); List<FormDataItem> formItems = Lists.newArrayList(multipartFormParser.parse(request)); assertEquals(1, formItems.size()); FormDataItem formItem = formItems.get(0); assertFalse(formItem.isFormField()); assertEquals(ALBUM_IMAGE_FIELDNAME, formItem.getFieldName()); assertEquals(ALBUM_IMAGE_FILENAME, formItem.getName()); assertEquals(ALBUM_IMAGE_TYPE, formItem.getContentType()); assertEquals(ALBUM_IMAGE_DATA, new String(formItem.get())); }
@Before public void setUp() throws Exception { servlet = new JsonRpcServlet(); req = mockControl.createMock(HttpServletRequest.class); res = mockControl.createMock(HttpServletResponse.class); containerConfig = mockControl.createMock(ContainerConfig.class); multipartFormParser = mockControl.createMock(MultipartFormParser.class); EasyMock.expect(multipartFormParser.isMultipartContent(req)).andStubReturn(false); servlet.setMultipartFormParser(multipartFormParser); BeanJsonConverter converter = new BeanJsonConverter(Guice.createInjector()); HandlerRegistry registry = new DefaultHandlerRegistry(null, null, new HandlerExecutionListener.NoOpHandler()); registry.addHandlers(Collections.<Object>singleton(handler)); servlet.setHandlerRegistry(registry); servlet.setBeanConverters(converter, null, null); servlet.setContainerConfig(containerConfig); handler.setMock(new TestHandler() { @Override public Object get(RequestItem req) { return ImmutableMap.of("foo", "bar"); } }); }