Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Apr 25th, 2012  |  syntax: None  |  size: 3.74 KB  |  hits: 67  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. Unit testing using MockMultipartHttpServletRequest (throws NullPointerException in ItemInputStream.makeAvailable)
  2. java.lang.NullPointerException
  3.     at org.apache.commons.fileupload.MultipartStream$ItemInputStream.makeAvailable(MultipartStream.java:976)
  4.     at org.apache.commons.fileupload.MultipartStream$ItemInputStream.read(MultipartStream.java:886)
  5.     at java.io.InputStream.read(InputStream.java:82)
  6.     at org.apache.commons.fileupload.util.Streams.copy(Streams.java:96)
  7.     at org.apache.commons.fileupload.util.Streams.copy(Streams.java:66)
  8.     at org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:592)
  9.     at org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:618)
  10.     at org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:637)
  11.     at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.findNextItem(FileUploadBase.java:984)
  12.     at org.apache.commons.fileupload.FileUploadBase$FileItemIteratorImpl.<init>(FileUploadBase.java:965)
  13.     at org.apache.commons.fileupload.FileUploadBase.getItemIterator(FileUploadBase.java:331)
  14.     at org.apache.commons.fileupload.servlet.ServletFileUpload.getItemIterator(ServletFileUpload.java:148)
  15.     at com.ooyala.UploadRequest.initialize(UploadRequest.java:51)
  16.     at com.ooyala.UploadRequestTest.testCreateFromServletRequest(UploadRequestTest.java:57)
  17.        
  18. public class UploadRequest {
  19.   private Map<String, String> params;
  20.   private InputStream strIn;
  21.   private Logger Log = Logger.getLogger(UploadRequest.class.getName());
  22.  
  23.   public UploadRequest()
  24.   {
  25.     params = new HashMap<String, String>();
  26.   }
  27.  
  28.   public void initialize(HttpServletRequest sRequest,
  29.                          ServletFileUpload upload)
  30.     throws IOException, FileUploadException
  31.   {
  32.     Enumeration<String> paramNames = sRequest.getParameterNames();
  33.     while (paramNames.hasMoreElements()) {
  34.       String pName = paramNames.nextElement();
  35.       params.put(pName, sRequest.getParameter(pName));
  36.     }
  37.     params.put("request_uri", sRequest.getRequestURI());
  38.  
  39.     FileItemIterator iter = upload.getItemIterator(sRequest);
  40.     while (iter.hasNext()) {
  41.       FileItemStream item = iter.next();
  42.       try {
  43.         if (!item.isFormField()) {
  44.           // Skip form fields
  45.           params.put("original_file_name", item.getName());
  46.           strIn = item.openStream();
  47.         }
  48.       } catch (IOException ex) {
  49.         Log.severe("File uploading exception: " + ex.getMessage());
  50.         throw ex;
  51.       }
  52.     }
  53.   }
  54.        
  55. import org.springframework.mock.web.MockMultipartHttpServletRequest;
  56. import org.springframework.mock.web.MockMultipartFile;
  57. import org.apache.commons.fileupload.servlet.ServletFileUpload;
  58. // etc.... other imports
  59.  
  60. @RunWith(JMock.class)
  61. public class UploadRequestTest {
  62.   private UploadRequest upRequest;
  63.  
  64.   @Before
  65.     public void setUp()
  66.     {
  67.       context.setImposteriser(ClassImposteriser.INSTANCE);
  68.       upRequest = new UploadRequest();
  69.     }
  70.  
  71.   @Test
  72.     public void testCreateFromServletRequest()
  73.       throws IOException, FileUploadException
  74.     {
  75.       String text_contents = "hello world";
  76.  
  77.       MockMultipartHttpServletRequest sRequest =
  78.         new MockMultipartHttpServletRequest();
  79.       sRequest.setMethod("POST");
  80.       String boundary = generateBoundary();
  81.       String contentType = "multipart/form-data; boundary="+boundary;
  82.       sRequest.setContentType(contentType);
  83.       sRequest.setRequestURI("/foo");
  84.       sRequest.addParameter("test_param","test_value");
  85.       sRequest.addFile(
  86.         new MockMultipartFile("file1","test_upload.txt","text/plain",
  87.           text_contents.getBytes()));
  88.  
  89.       ServletFileUpload upload = new ServletFileUpload();
  90.       assertTrue(upload.isMultipartContent(sRequest));
  91.  
  92.       upRequest.initialize(sRequest, upload);
  93.     }
  94. }