Rich:fileUpload + Tomcat 6.0

13 respostas
V

Pessoal, estou testando minha aplicação no Tomcat 6.0 e estou tendo
problemas com o rich:fileUpload.

A aplicação roda originalmente no Glassfish e funciona corretamente, mas no
Tomcat dá um erro quando tento fazer o upload.

No componente aparece “Transfer Error Ocurred” enquanto no log do Tomcat
aparece:

WARNING: phase(RESTORE_VIEW 1,com.sun.faces.context.FacesContextImpl@933ab5)

threw exception: org.ajax4jsf.exception.FileUploadException: Could not

create temporary file Could not create temporary file

org.ajax4jsf.request.MultipartRequest$FileParam.createTempFile(MultipartRequest.java:216)

org.ajax4jsf.request.MultipartRequest.readHeader(MultipartRequest.java:515)

org.ajax4jsf.request.MultipartRequest.readNext(MultipartRequest.java:427)

org.ajax4jsf.request.MultipartRequest.parseRequest(MultipartRequest.java:619)

org.richfaces.component.FileUploadPhaselistener.beforePhase(FileUploadPhaselistener.java:63)

com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:222)

com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)

javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:178)

org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)

org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:347)

org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:495)

org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)

org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)

org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)

org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)

org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)

org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)

org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)

org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)

org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)

org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)

org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)

java.lang.Thread.run(Thread.java:619)

Já coloquei no web.xml conforme fala no demo do Richfaces:

<filter>
    <display-name>RichFaces Filter</display-name>
    <filter-name>richfaces</filter-name>
    <filter-class>org.ajax4jsf.Filter</filter-class>
    <init-param>
        <param-name>createTempFiles</param-name>
        <param-value>true</param-value>
    </init-param>
    <init-param>
        <param-name>maxRequestSize</param-name>
        <param-value>10485760</param-value>
    </init-param>
</filter>

Mas mesmo assim o erro continua.
O arquivo que estou fazendo upload tem 1 Kb, portanto não é por causa do maxRequestSize.

Alguém tem alguma idéia do que pode ser ?

13 Respostas

V

Nenhuma idéia ?

Pensei que poderia ser que a pasta do tomcat estava como somente leitura, porém tirei essa propriedade e continua sem funcionar.

Uso o windows XP 64bits, será que tem algum tipo de incompatibilidade ?

T

então, pelo erro, mostra que ele não consegue criar o arquivo temporario na pasta do tomcat…

veja se você tem todas as permissões na mesma…

V

As permissões seriam do usuário logado no windows?

Se for, estou logado com um usuário com permissões de administrador.

L

Olá victorpriest,

Estou passando por problema semelhante aqui. Tudo indica que está relacionado a isso aqui: https://jira.jboss.org/browse/RF-7927

Atualizei o Richfaces para 3.3.3.Final mas agora estou tendo o seguinte problema:

Caused by: com.sun.faces.config.ConfigurationException:
Source Document: jar:file:/media/Dados/dev_linux/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/ReportBuilder/WEB-INF/lib/richfaces-ui-3.3.3.Final.jar!/META-INF/faces-config.xml
Cause: Class ‘org.richfaces.component.FileUploadPhaselistener’ is missing a runtime dependency: java.lang.NoClassDefFoundError: org/ajax4jsf/exception/FileUploadException

Não encontrei um jar que contenha essa classe.

Poderia me ajudar?

Grato

thiago.correa

Coloca o atributo createTempFiles para false e veja se o erro persiste!

L

Grande Thiago

Obrigado por sua atenção ao meu problema.

Testei sua sugestão aqui e também não funcionou.

Estou anexando meu web.xml.

Você vai ver que tentei usar mais uns filtros mas ainda não deu certo. Tem cara de estar faltando algum jar, mas também acho que possa existir algum erro de configuração.

Eu estava utilizando o richfaces 3.3.1.GA mas em função do erro que citei anteriormente atualizei para o 3.3.3.FINAL e começou a acontecer este problema.

Desde já agradeço sua ajuda!

Abraços

thiago.correa

Cara, você criou 2 Filters iguais porém com nomes diferentes.

No meu projeto a configuração ficou da seguinte maneira

<filter>
  <display-name>Rich Faces Filter</display-name>
  <filter-name>richfaces</filter-name>
  <filter-class>org.ajax4jsf.Filter</filter-class>
  <init-param>
   <param-name>createTempFiles</param-name>
   <param-value>false</param-value>
  </init-param>
  <init-param>
   <param-name>maxRequestSize</param-name>
   <param-value>10000000</param-value>
  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>richfaces</filter-name>
  <servlet-name>Faces Servlet</servlet-name>
  <dispatcher>FORWARD</dispatcher>
  <dispatcher>INCLUDE</dispatcher>
  <dispatcher>REQUEST</dispatcher>
 </filter-mapping>

Não uso o Seam, portanto não posso afirmar se é esse o problema, mas ao que tudo indica foi os 2 org.ajax4jsf.Filter que você criou, ao invés de um!

L

Thiago,

Os filtros duplicados que você cita, na verdade estão comentados.

Hora habilito um, hora outro, agora testei com a configuração que você passou também e nada.

O erro é sempre o mesmo.

Você utiliza o Richfaces 3.3.3.FINAL também?

Grato

thiago.correa

Sim:

Bom, olha aí como está o meu jsp e mbean

<rich:fileUpload
				clearAllControlLabel="#{buildingBundle.clearAll_button}"
				addControlLabel="#{buildingBundle.add_button}"
				cancelEntryControlLabel="#{buildingBundle.cancel_label}"
				doneLabel="#{buildingBundle.done_label}"
				progressLabel="#{buildingBundle.progress_label}"
				uploadControlLabel="#{buildingBundle.upload_button}"
				stopEntryControlLabel="#{buildingBundle.stop_label}"
				fileUploadListener="#{advertiseMBean.advertise.upload}"></rich:fileUpload>

public void upload(UploadEvent event) { UploadItem uploadItem = event.getUploadItem(); Photo photo = new Photo(); photo.setContent(uploadItem.getData()); // photo.setBuilding(building); // building.getPhotos().add(photo); }

Dá uma comparada e testa de novo!

L

A utilização do componente também está compatível com a sua. Mas acho que o problema não está aí pois o erro ocorre na tentativa do contexto subir. Com este erro o contexto nem está subindo.

[color=red]Caused by: com.sun.faces.config.ConfigurationException:

Source Document: jar:file:/media/Dados/dev_linux/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/ReportBuilder/WEB-INF/lib/richfaces-ui-3.3.3.Final.jar!/META-INF/faces-config.xml

Cause: Class org.richfaces.component.FileUploadPhaselistener is missing a runtime dependency: java.lang.NoClassDefFoundError: org/ajax4jsf/exception/FileUploadException

at com.sun.faces.config.processor.AbstractConfigProcessor.createInstance(AbstractConfigProcessor.java:253)

at com.sun.faces.config.processor.LifecycleConfigProcessor.addPhaseListeners(LifecycleConfigProcessor.java:141)

at com.sun.faces.config.processor.LifecycleConfigProcessor.process(LifecycleConfigProcessor.java:114)

at com.sun.faces.config.processor.AbstractConfigProcessor.invokeNext(AbstractConfigProcessor.java:108)

at com.sun.faces.config.processor.FactoryConfigProcessor.process(FactoryConfigProcessor.java:132)

at com.sun.faces.config.ConfigManager.initialize(ConfigManager.java:203)

 16 more

22/09/2010 15:24:07 org.apache.catalina.core.StandardContext start

SEVERE: Error listenerStart

22/09/2010 15:24:07 org.apache.catalina.core.StandardContext start

SEVERE: Context [/ReportBuilder] startup failed due to previous errors[/color]
thiago.correa

Esse arquivo está em richfaces-impl-3.3.3.Final.jar, verifique se esse jar está no classpath da sua webapp

L

Pois é Thiago,

Eu estava testando exatamente isso quando você postou.

Eu estou utilizando Maven no meu projeto e enquanto estava com a versão 3.3.1 o richfaces-impl já vinha nas dependências.
Comparei as dependências das versões e não sei por que “caixas d’água” com a atualização para 3.3.3 deixou de vir. Incluí a dependência manualmente e resolveu.

Se ao menos o www.findjar.com ou www.jarfinder.com tivessem me ajudado, mas nem eles sabem onde está esta classe.

Muito obrigado pela força!

Quando precisar estamos aí!

Abraço!

thiago.correa

São 3 jars, fora as dependências :wink:
No que precisar estamos aí!

Criado 23 de abril de 2010
Ultima resposta 22 de set. de 2010
Respostas 13
Participantes 4