users@glassfish.java.net

servlet 3.0_at_glassfish v3 - fileUpload completely broken?

From: Dominik Dorn <dominik.dorn_at_gmail.com>
Date: Wed, 14 Apr 2010 06:55:09 +0200

Hi!

I'm trying to do a file upload in servlet 3 in glassfish v3.
However, it seams the fileupload is really broken.

I've attached a screenshot of me debugging the problem.
As one can see in the screenshot, the part object holds a reference to
/home/domdorn/skriptum/upload/upload_42ae4017_127f2c57e98__7ffb_00000004.tmp
while the really created file gets named IMG_5899_6046327792819005534.JPG

Thus, trying to execute the .write(newPath) on the Part object results
in the following exception

[#|2010-04-12T18:35:17.304+0200|WARNING|glassfishv3.0|javax.enterprise.system.container.web.com.sun.enterprise.web|_ThreadID=24;_ThreadName=http-thread-pool-8080-(1);|StandardWrapperValve[uploadDocumentServlet]:
PWC1406: Servlet.service() for servlet uploadDocumentServlet threw
exception
java.io.FileNotFoundException:
/home/domdorn/skriptum/upload/upload_42ae4017_127f2c57e98__7ffb_00000004.tmp
(No such file or directory)
        at java.io.FileInputStream.open(Native Method)
        at java.io.FileInputStream.<init>(FileInputStream.java:137)
        at org.apache.catalina.fileupload.PartItem.write(PartItem.java:436)
        at org.apache.catalina.fileupload.PartItem.write(PartItem.java:470)
        at com.dominikdorn.sk.servlets.UploadDocumentServlet.doPost(UploadDocumentServlet.java:71)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
        at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:343)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:116)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at com.dominikdorn.dc.filters.UserAgentCompatibleFilter.doFilter(UserAgentCompatibleFilter.java:30)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at net.balusc.http.multipart.MultipartFilter.doFilter(MultipartFilter.java:78)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at com.dominikdorn.sk.service.UserRoleFilter.doFilter(UserRoleFilter.java:46)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at com.ocpsoft.pretty.PrettyFilter.doFilter(PrettyFilter.java:116)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at com.dominikdorn.dc.filters.UserAgentCompatibleFilter.doFilter(UserAgentCompatibleFilter.java:30)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:256)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:215)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:277)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
        at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
        at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
        at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
        at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:332)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:233)
        at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
        at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
        at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
        at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
        at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
        at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
        at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
        at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
        at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
        at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
        at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
        at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
        at java.lang.Thread.run(Thread.java:636)
|#]



This is the servlet I'm using
package com.dominikdorn.sk.servlets;

import com.dominikdorn.sk.dao.MemberDao;
import com.dominikdorn.sk.domain.FileEntity;
import com.dominikdorn.sk.domain.FileType;
import com.dominikdorn.sk.service.FileService;
import com.dominikdorn.sk.service.FileTypeService;

import javax.activation.MimeTypeParseException;
import javax.activation.MimetypesFileTypeMap;
import javax.annotation.ManagedBean;
import javax.inject.Inject;
import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * Dominik Dorn
 * 0626165
 * dominik.dorn_at_tuwien.ac.at
 */
@WebServlet(name = "uploadDocumentServlet", urlPatterns = {"/uploadDocument"})
@MultipartConfig(
          location = "/home/domdorn/skriptum/upload/"
        , maxFileSize = 20971520l // 20MB
// , fileSizeThreshold = 1024 // 10kb
)
@ManagedBean
public class UploadDocumentServlet extends HttpServlet {

    @Inject
    MemberDao memberDao;

    @Inject
    FileService fileService;

    @Inject
    FileTypeService fileTypeService;



    @Override
    protected void doPost(HttpServletRequest httpServletRequest,
HttpServletResponse httpServletResponse) throws ServletException,
IOException {

        Part part = httpServletRequest.getPart("file");

        System.out.println("part.getName() = " + part.getName());
        System.out.println("part.getContentType() = " + part.getContentType());
        System.out.println("part.toString() = " + part.toString());
        System.out.println("part.getHeaderNames().toString() = " +
part.getHeaderNames().toString());
        System.out.println("part.getSize() = " + part.getSize());
        System.out.println("memberDao = " + memberDao);

        String mimeType = part.getContentType();
        String fileName = part.getHeader("name");

        System.out.println("mimeType = " + mimeType);
        System.out.println("fileName = " + fileName);



        UUID hash = UUID.randomUUID();
        String newFileNamePath
="/home/domdorn/skriptum/upload/"+hash.toString();
        part.write(newFileNamePath);
        part.delete();

// String mimeType =
MimetypesFileTypeMap.getDefaultFileTypeMap().getContentType(file);
        FileType fileType = fileTypeService.getByMimeType(mimeType);

        FileEntity fileEntity;

        String ip = httpServletRequest.getRemoteAddr();

        try {
            fileEntity = fileService.persistFile(newFileNamePath, ip, null);
            fileEntity.setIpAddress(ip);
        } catch (MimeTypeParseException e) {
            e.printStackTrace(); //To change body of catch statement
use File | Settings | File Templates.
        }

        System.out.println("done everything! horray");
    }
}


This also happens on the lastest v3u1 nightly.

Am I am doing something wrong here?

Thanks,
Dominik

-- 
Dominik Dorn
http://dominikdorn.com
Tausche Deine Lernunterlagen auf http://www.studyguru.eu !




fileUploadBroken.jpg
(image/jpeg attachment: fileUploadBroken.jpg)