9 Replies Latest reply on Aug 29, 2007 10:14 PM by shane.bryzak

    s:fileUpload error

    demetrio812

      Hi,
      I read about 50 posts, tried a lot of combination but a simple file upload is not working in my app (Seam 2B1, JBoss AS 4.2.1GA)...I made to work about 2 months ago (Seam 1.2.1GA, JBoss AS 4.0.X).

      I tried SEAM POJO, SLSB, SFSB with CONVERSATION or EVENT scope, tried InputStream for data field but also byte[], add Seam Multipart Filter (org.jboss.seam.web.MultipartFilter) to web.xml but it doesn't work!

      this is my configuration:

      web.xml:

      <?xml version="1.0" ?>
      <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_5.xsd"
       version="2.5">
      
       <!-- Ajax4jsf -->
      
       <context-param>
       <param-name>org.ajax4jsf.VIEW_HANDLERS</param-name>
       <param-value>com.sun.facelets.FaceletViewHandler</param-value>
       </context-param>
      
       <context-param>
       <param-name>org.ajax4jsf.SKIN</param-name>
       <param-value>blueSky</param-value>
       </context-param>
      
       <!-- Seam -->
      
       <listener>
       <listener-class>org.jboss.seam.servlet.SeamListener</listener-class>
       </listener>
      
       <filter>
       <filter-name>Seam Filter</filter-name>
       <filter-class>org.jboss.seam.servlet.SeamFilter</filter-class>
       </filter>
      
       <filter-mapping>
       <filter-name>Seam Filter</filter-name>
       <url-pattern>/*</url-pattern>
       </filter-mapping>
      
       <servlet>
       <servlet-name>Seam Resource Servlet</servlet-name>
       <servlet-class>org.jboss.seam.servlet.SeamResourceServlet</servlet-class>
       </servlet>
      
       <servlet-mapping>
       <servlet-name>Seam Resource Servlet</servlet-name>
       <url-pattern>/seam/resource/*</url-pattern>
       </servlet-mapping>
      
       <!-- Facelets development mode (disable in production) -->
      
       <context-param>
       <param-name>facelets.DEVELOPMENT</param-name>
       <param-value>true</param-value>
       </context-param>
      
       <!-- JSF -->
      
       <context-param>
       <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
       <param-value>.xhtml</param-value>
       </context-param>
      
       <servlet>
       <servlet-name>Faces Servlet</servlet-name>
       <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
       <load-on-startup>1</load-on-startup>
       </servlet>
      
       <servlet-mapping>
       <servlet-name>Faces Servlet</servlet-name>
       <url-pattern>*.seam</url-pattern>
       </servlet-mapping>
      
       <security-constraint>
       <display-name>Restrict raw XHTML Documents</display-name>
       <web-resource-collection>
       <web-resource-name>XHTML</web-resource-name>
       <url-pattern>*.xhtml</url-pattern>
       </web-resource-collection>
       <auth-constraint/>
       </security-constraint>
      
       <context-param>
       <param-name>facelets.LIBRARIES</param-name>
       <param-value>/WEB-INF/tomahawk.taglib.xml</param-value>
       </context-param>
      <!-- Tomahawk -->
      <filter>
       <filter-name>MyFacesExtensionsFilter</filter-name>
       <filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
       <init-param>
       <param-name>maxFileSize</param-name>
       <param-value>20m</param-value>
       </init-param>
      </filter>
      
      <!-- extension mapping for adding <script/>, <link/>, and other resource tags to JSF-pages -->
      <filter-mapping>
       <filter-name>MyFacesExtensionsFilter</filter-name>
       <!-- servlet-name must match the name of your javax.faces.webapp.FacesServlet entry -->
       <servlet-name>Faces Servlet</servlet-name>
      </filter-mapping>
      
      <!-- extension mapping for serving page-independent resources (javascript, stylesheets, images, etc.) -->
      <filter-mapping>
       <filter-name>MyFacesExtensionsFilter</filter-name>
       <url-pattern>/faces/myFacesExtensionResource/*</url-pattern>
      </filter-mapping>
      
      <!-- Parametri applicazione -->
      <context-param>
       <param-name>id_tipologia_admin</param-name>
       <param-value>1</param-value>
      </context-param>
      <context-param>
       <param-name>id_tipologia_editor</param-name>
       <param-value>2</param-value>
      </context-param>
      <context-param>
       <param-name>id_tipologia_guest</param-name>
       <param-value>3</param-value>
      </context-param>
      <context-param>
       <param-name>id_tipologia_iscritto_newsletter</param-name>
       <param-value>4</param-value>
      </context-param>
      <context-param>
       <param-name>id_lingua_default</param-name>
       <param-value>1</param-value>
      </context-param>
      <context-param>
       <param-name>id_configurazione</param-name>
       <param-value>1</param-value>
      </context-param>
      
      
      </web-app>
      
      


      component.xml:

      <?xml version="1.0" encoding="UTF-8"?>
      <components xmlns="http://jboss.com/products/seam/components"
       xmlns:core="http://jboss.com/products/seam/core"
       xmlns:persistence="http://jboss.com/products/seam/persistence"
       xmlns:drools="http://jboss.com/products/seam/drools"
       xmlns:bpm="http://jboss.com/products/seam/bpm"
       xmlns:security="http://jboss.com/products/seam/security"
       xmlns:mail="http://jboss.com/products/seam/mail"
       xmlns:web="http://jboss.com/products/seam/web"
       xmlns:framework="http://jboss.com/products/seam/framework"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation=
       "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.0.xsd
       http://jboss.com/products/seam/persistence http://jboss.com/products/seam/persistence-2.0.xsd
       http://jboss.com/products/seam/drools http://jboss.com/products/seam/drools-2.0.xsd
       http://jboss.com/products/seam/bpm http://jboss.com/products/seam/bpm-2.0.xsd
       http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.0.xsd
       http://jboss.com/products/seam/mail http://jboss.com/products/seam/mail-2.0.xsd
       http://jboss.com/products/seam/web http://jboss.com/products/seam/web-2.0.xsd
       http://jboss.com/products/seam/framework http://jboss.com/products/seam/framework-2.0.xsd
       http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd">
      
       <core:init debug="@debug@" jndi-pattern="@jndiPattern@"/>
      
       <core:manager concurrent-request-timeout="500"
       conversation-timeout="120000"
       conversation-id-parameter="cid"/>
      
       <persistence:managed-persistence-context name="entityManager"
       auto-create="true"
       persistence-unit-jndi-name="java:/unica2EntityManagerFactory"/>
      
       <drools:rule-base name="securityRules">
       <drools:rule-files>
       <value>/security.drl</value>
       </drools:rule-files>
       </drools:rule-base>
      
       <security:identity authenticate-method="#{authenticator.authenticate}"
       security-rules="#{securityRules}"/>
      
       <event type="org.jboss.seam.notLoggedIn">
       <action expression="#{redirect.captureCurrentView}"/>
       </event>
       <event type="org.jboss.seam.postAuthenticate">
       <action expression="#{redirect.returnToCapturedView}"/>
       </event>
      
       <mail:mail-session host="out.virgilio.it" port="25" debug="true"
       ssl="false" />
      
       <!-- For use with jBPM pageflow or process management -->
       <!--
       <bpm:jbpm>
       <bpm:process-definitions></bpm:process-definitions>
       <bpm:pageflow-definitions></bpm:pageflow-definitions>
       </bpm:jbpm>
       -->
      
       <web:multipart-filter create-temp-files="true"
       max-request-size="10000000" url-pattern="*.seam">
       </web:multipart-filter>
      
       <core:resource-loader>
       <core:bundle-names>
       <value>messages</value>
       <value>messages_site</value>
       <value>messages_articles</value>
       <value>messages_articles_list</value>
       <value>messages_articles_form</value>
       </core:bundle-names>
       </core:resource-loader>
      
      </components>
      


      home.xhtml:

      <?xml version="1.0" encoding="iso-8859-1"?>
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
      <ui:composition xmlns="http://www.w3.org/1999/xhtml"
       xmlns:s="http://jboss.com/products/seam/taglib"
       xmlns:ui="http://java.sun.com/jsf/facelets"
       xmlns:f="http://java.sun.com/jsf/core"
       xmlns:h="http://java.sun.com/jsf/html"
       xmlns:rich="http://richfaces.ajax4jsf.org/rich"
       template="layout/template.xhtml">
      
      <ui:define name="body">
      
       <h:messages styleClass="message"/>
      
       <h:form enctype="multipart/form-data">
       <rich:panel>
       <f:facet name="header">Test</f:facet>
      
       <s:decorate id="fileUploadDecoration" template="layout/edit.xhtml">
       <ui:define name="label">Image</ui:define>
       <s:fileUpload id="file" data="#{uploadFile.uploadedFile}"
       />
       </s:decorate>
      
       <div style="clear:both"/>
       </rich:panel>
       <div class="actionButtons">
       <h:commandButton value="Upload" action="#{uploadFile.parse}">
      
       </h:commandButton>
       </div>
       </h:form>
      </ui:define>
      </ui:composition>
      


      UploadFile.java:

      package com.novaware.unica;
      
      import java.io.InputStream;
      import java.io.Serializable;
      
      import javax.ejb.Remove;
      import javax.ejb.Stateful;
      import javax.ejb.Stateless;
      
      import org.jboss.seam.ScopeType;
      import org.jboss.seam.annotations.Destroy;
      import org.jboss.seam.annotations.In;
      import org.jboss.seam.annotations.Logger;
      import org.jboss.seam.annotations.Name;
      import org.jboss.seam.annotations.Scope;
      import org.jboss.seam.faces.FacesMessages;
      import org.jboss.seam.log.Log;
      
      
      @Name("uploadFile")
      @Stateful // I also tried Stateless
      @Scope(ScopeType.EVENT) //I also tried CONVERSATION
      public class UploadFile implements IUploadFile { // Also tried Seam Pojo
       @Logger
       Log log;
      
       @In FacesMessages facesMessages;
      
       private byte[] uploadedFile; // I also tried with InputStream
       private String uploadedFileName;
       private String contentType;
      
       public void parse() throws Exception {
       log.info("File:"+uploadedFile+" - "+uploadedFileName+" - "+contentType);
       }
      
       public void setUploadedFile(byte[] uploadedFile)
       {
       this.uploadedFile = uploadedFile;
       }
      
       public byte[] getUploadedFile()
       {
       return uploadedFile;
       }
      
       public String getUploadedFileName() {
       return uploadedFileName;
       }
      
      
       public void setUploadedFileName(String uploadedFileName) {
       this.uploadedFileName = uploadedFileName;
       }
      
       public String getContentType() {
       return contentType;
       }
      
       public void setContentType(String contentType) {
       this.contentType = contentType;
       }
      
       @Destroy @Remove
       public void destroy() {
       }
      }
      


      IUploadFile.java:

      package com.novaware.unica;
      
      import java.io.InputStream;
      
      import javax.ejb.Local;
      
      @Local
      public interface IUploadFile {
      
       public abstract void parse() throws Exception;
      
       public abstract void setUploadedFile(byte[] uploadedFile);
      
       public abstract byte[] getUploadedFile();
      
       public abstract String getUploadedFileName();
      
       public abstract void setUploadedFileName(String uploadedFileName);
      
       public abstract String getContentType();
      
       public abstract void setContentType(String contentType);
      
       public void destroy();
      }
      


      where is the error?

      thanks!

      Demetrio Filocamo