- Unit testing using MockMultipartHttpServletRequest (throws NullPointerException in ItemInputStream.makeAvailable)
- java.lang.NullPointerException
- at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976)
- at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886)
- at java.io.InputStream.read(InputStream.java:82)
- at org.apache.commons.fileupload.util.Streams.copy(Streams.java:96)
- at org.apache.commons.fileupload.util.Streams.copy(Streams.java:66)
- at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:592)
- at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:618)
- at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:637)
- at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:984)
- at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)
- at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
- at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:148)
- at com.ooyala.UploadRequest.initialize(UploadRequest.java:51)
- at com.ooyala.UploadRequestTest.testCreateFromServletRequest(UploadRequestTest.java:57)
- public class UploadRequest {
- private Map<String, String> params;
- private InputStream strIn;
- private Logger Log = Logger.getLogger(UploadRequest.class.getName());
- public UploadRequest()
- {
- params = new HashMap<String, String>();
- }
- public void initialize(HttpServletRequest sRequest,
- ServletFileUpload upload)
- throws IOException, FileUploadException
- {
- Enumeration<String> paramNames = sRequest.getParameterNames();
- while (paramNames.hasMoreElements()) {
- String pName = paramNames.nextElement();
- params.put(pName, sRequest.getParameter(pName));
- }
- params.put("request_uri", sRequest.getRequestURI());
- FileItemIterator iter = upload.getItemIterator(sRequest);
- while (iter.hasNext()) {
- FileItemStream item = iter.next();
- try {
- if (!item.isFormField()) {
- // Skip form fields
- params.put("original_file_name", item.getName());
- strIn = item.openStream();
- }
- } catch (IOException ex) {
- Log.severe("File uploading exception: " + ex.getMessage());
- throw ex;
- }
- }
- }
- import org.springframework.mock.web.MockMultipartHttpServletRequest;
- import org.springframework.mock.web.MockMultipartFile;
- import org.apache.commons.fileupload.servlet.ServletFileUpload;
- // etc.... other imports
- @RunWith(JMock.class)
- public class UploadRequestTest {
- private UploadRequest upRequest;
- @Before
- public void setUp()
- {
- context.setImposteriser(ClassImposteriser.INSTANCE);
- upRequest = new UploadRequest();
- }
- @Test
- public void testCreateFromServletRequest()
- throws IOException, FileUploadException
- {
- String text_contents = "hello world";
- MockMultipartHttpServletRequest sRequest =
- new MockMultipartHttpServletRequest();
- sRequest.setMethod("POST");
- String boundary = generateBoundary();
- String contentType = "multipart/form-data; boundary="+boundary;
- sRequest.setContentType(contentType);
- sRequest.setRequestURI("/foo");
- sRequest.addParameter("test_param","test_value");
- sRequest.addFile(
- new MockMultipartFile("file1","test_upload.txt","text/plain",
- text_contents.getBytes()));
- ServletFileUpload upload = new ServletFileUpload();
- assertTrue(upload.isMultipartContent(sRequest));
- upRequest.initialize(sRequest, upload);
- }
- }