4 Replies Latest reply on Jun 26, 2013 10:30 AM by dageisz

    richfaces 4.3 fileUpload java.lang.NullPointerException

    morellik

      Dear all,

       

       

      I'm a newbie with richfaces. Now I'm trying to use fileUpload but I obtain NullPointerException error. I'm using RichFaces 4.3.2 with GlassFish 3.1.2.2 and NetBeans 7.3.

      This is the form:

       

       

      <h:form>                        <h:panelGrid columns="2" columnClasses="top,top">  
                                <rich:fileUpload fileUploadListener="#{fileUploadBean.listener(event)}"  
                                      id="upload" acceptedTypes="txt,csv, pdf"  
                                     ontyperejected="alert('Only Text and CSV files are accepted');"  
                                      maxFilesQuantity="5">  
                                      <a4j:ajax event="uploadcomplete" execute="@none" render="info" />  
                                 </rich:fileUpload>  
                            </h:panelGrid>  
                            <h:panelGroup id="info">  
                                 <rich:dataGrid columns="1" value="#{fileUploadBean.files}"  
                                      var="file" rowKeyVar="row">  
                                      <rich:panel bodyClass="rich-laguna-panel-no-header">  
                                           <h:panelGrid columns="2">  
                                                <a4j:mediaOutput element="img" mimeType="image/jpeg"  
                                                     createContent="#{fileUploadBean.paint}" value="#{row}"  
                                                     style="width:100px; height:100px;" cacheable="false">  
                                                     <f:param value="#{fileUploadBean.timeStamp}" name="time" />  
                                                </a4j:mediaOutput>  
                                                <h:panelGrid columns="2">  
                                                     <h:outputText value="File Name:" />  
                                                     <h:outputText value="#{file.name}" />  
                                                    <h:outputText value="File Length(bytes):" />  
                                                    <h:outputText value="#{file.length}" />  
                                                </h:panelGrid>  
                                           </h:panelGrid>  
                                      </rich:panel>  
                                 </rich:dataGrid>  
                                 <a4j:commandButton action="#{fileUploadBean.clearUploadData}"  
                                      render="info, upload" value="Clear Uploaded Data"  
                                      rendered="#{fileUploadBean.size>0}" />  
                                <a4j:commandButton action="#{fileUploadBean.writeFile}"  
                                      value="Write file to Disk" rendered="#{fileUploadBean.size>0}" />  
                            </h:panelGroup>  
                       </h:form> 
      
      

       

       

       

       

       

      The following is the listener:

       

      @ManagedBean
      
      @SessionScoped
      public class FileUploadBean implements Serializable {
      
         private static final long serialVersionUID = -4664762090820133359L; 
          private ArrayList<UploadedText> files = new ArrayList<UploadedText>();
          private static final String fPath = "/tmp";
      
           public FileUploadBean() {
          }
      
          public void paint(OutputStream stream, Object object) throws IOException {
              stream.write(getFiles().get((Integer) object).getData());
              stream.close();
          }
      
          public void listener(FileUploadEvent event) throws Exception {
              UploadedFile item = event.getUploadedFile();
              UploadedText file = new UploadedText();
              System.out.println(item.getData().length);
              file.setLength(item.getData().length);
              file.setName(item.getName());
              file.setData(item.getData());
              files.add(file);
          }
      
          public String clearUploadData() {
              files.clear();
              return null;
          }
      
          public int getSize() {
              if (getFiles().size() > 0) {
                  return getFiles().size();
              } else {
                  return 0;
              }
          }
      
          public long getTimeStamp() {
              return System.currentTimeMillis();
          }
      
          public ArrayList<UploadedText> getFiles() {
              return files;
          }
      
          public void setFiles(ArrayList<UploadedText> files) {
              this.files = files;
          }
      
           public void writeFile() {  
                  FileOutputStream fop = null;  
                  File file;  
                  UploadedText contain = files.size() > 0 ? files.get(0) : null;  
                  if (contain == null) {  
                      return;  
                  }  
                  try {  
                       file = new File(fPath + contain.getName());  
                       fop = new FileOutputStream(file);
                       if (!file.exists()) {  
                           file.createNewFile();  
                       }  
                       fop.write(contain.getData());  
                       fop.flush();  
                       fop.close();  
      
                  } catch (IOException e) {  
                  } finally {  
                       try {  
                            if (fop != null) {  
                                 fop.close();  
                            }  
                       } catch (IOException e) {  
                      }  
                  }  
           } 
      
      

       

      And the following is the UploadedText class.

       

       

       

       

      public class UploadedText implements Serializable {
      
          private static final long serialVersionUID = -3957467715082208719L;
          private String name;
          private String mime;
          private long length;
          private byte[] data;
      
          public String getName() {
              return name;
          }
      
          public void setName(String name) {
              int extDot = name.lastIndexOf('.');
              if (extDot > 0) {
                  String extension = name.substring(extDot + 1);
                  if ("txt".equals(extension)) {
                      mime = "text/plain";
                  } else if ("csv".equals(extension)) {
                      mime = "text/csv";
                  } else if ("pdf".equals(extension)) {
                      mime = "application/pdf";
                  } else {
                      mime = "text/unknown";
                  }
              }
              this.name = name;
          }
      
      // Follow getter and setter
      
      

       

       

       

       

       

       

      When I click on upload button appears the progress bar and immediately disappears and in the glassfish log I see:

       

      SEVERE: JSF1073: javax.faces.event.AbortProcessingException caught during processing of APPLY_REQUEST_VALUES 2 : UIComponent-ClientId=j_idt24:upload, Message=/file/upload.xhtml @20,54 fileUploadListener="#{fileUploadBean.listener(event)}": java.lang.NullPointerException

      SEVERE: /file/upload.xhtml @20,54 fileUploadListener="#{fileUploadBean.listener(event)}": java.lang.NullPointerException

       

      Where I'm wrong?

       

      Thanks