¿Cómo resolver este java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream?

Estoy utilizando el siguiente código para cargar un archivo en tomcat5.5 y me da la siguiente excepción

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream

¿podríais ayudarme a solucionarlo?

import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileItemFactory;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

/**
 * Servlet implementation class FileUploadServlet
 */
public class FileUploadServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#HttpServlet()
     */
    public FileUploadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     */
    @SuppressWarnings("rawtypes")
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     */
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        System.out.println("Status : "+isMultipart);
        if (isMultipart) {
            FileItemFactory factory = new DiskFileItemFactory();
            ServletFileUpload upload = new ServletFileUpload(factory);

            try {
                List items = upload.parseRequest(request);
                Iterator iterator = items.iterator();
                while (iterator.hasNext()) {
                    FileItem item = (FileItem) iterator.next();

                    if (!item.isFormField()) {
                        String fileName = item.getName();

                        String root = getServletContext().getRealPath("/");
                        File path = new File(root + "/uploads");
                        if (!path.exists()) {
                            boolean status = path.mkdirs();
                        }

                        File uploadedFile = new File(path + "/" + fileName);
                        System.out.println(uploadedFile.getAbsolutePath());
                        item.write(uploadedFile);
                    }
                }
            } catch (FileUploadException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        response.sendRedirect("upload.jsp");
    }

}

Este es el jar que uso commons-fileupload-1.2.2.jar.

Solución

El mensaje de excepción en particular le está diciendo que la clase mencionada falta en el classpath. Como el nombre del paquete org.apache.commons.io indica, la clase mencionada es parte del proyecto http://commons.apache.org/io.

Y de hecho, Commons FileUpload tiene Commons IO como dependencia. Necesitas descargar y soltar commons-io.jar en el /WEB-INF/lib también.

Ver también:

Comentarios (0)

utilizar la dependencia de maven


  org.apache.commons
  commons-io 
  1.3.2 

o descarga commons-io.1.3.2.jar en tu carpeta lib

Comentarios (1)

Descargar PrimeFaces 4.0. Solucionó mi problema de inmediato. Estoy usando Glassfish 4.0

Comentarios (0)