Problemas de Permissão com MultipartRequestInterceptor

Pessoal,

Tenho um site hospedado dentro da LocaWeb e ao utilizar o filtro MultipartRequestInterceptor esta sendo gerada uma exeção:

org.vraptor.interceptor.InterceptorInstantiationException: Unable to instantiate using public org.vraptor.interceptor.MultipartRequestInterceptor() throws java.io.IOException
at org.vraptor.interceptor.InterceptorDealer.poll(InterceptorDealer.java:68)
at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:58)
at br.com.primeiromilhao.interceptor.BancoInterceptor.intercept(BancoInterceptor.java:19 )
at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
at org.vraptor.interceptor.FlashScopeInterceptor.intercept(FlashScopeInterceptor.java:22 )
at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
at org.vraptor.interceptor.RegisterAttributesInteceptor.intercept(RegisterAttributesInte ceptor.java:38)
at org.vraptor.core.InterceptorsLogicFlow.execute(InterceptorsLogicFlow.java:72)
at org.vraptor.core.VRaptorExecution.execute(VRaptorExecution.java:98)
at org.vraptor.core.DefaultController.execute(DefaultController.java:46)
at org.vraptor.VRaptorServlet.service(VRaptorServlet.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterCha in.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 173)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:119)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:55)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterCha in.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at br.com.locaweb.tomcat.LocaWebValve.invoke(LocaWebValve.java:101)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:199)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:282)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:754)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:684)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:876)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
Caused by: org.vraptor.component.ComponentInstantiationException: Unable to instantiate using public org.vraptor.interceptor.MultipartRequestInterceptor() throws java.io.IOException
at org.vraptor.component.ComponentConstructor.newInstance(ComponentConstructor.java:45)
at org.vraptor.interceptor.InterceptorType.newInstance(InterceptorType.java:66)
at org.vraptor.interceptor.InterceptorDealer.poll(InterceptorDealer.java:62)
… 31 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.j ava:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccess orImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:494)
at org.vraptor.component.ComponentConstructor.newInstance(ComponentConstructor.java:43)
… 33 more
Caused by: java.io.IOException: Permission denied
at java.io.UnixFileSystem.createFileExclusively(Native Method)
at java.io.File.checkAndCreate(File.java:1345)
at java.io.File.createTempFile(File.java:1434)
at java.io.File.createTempFile(File.java:1471)
at org.vraptor.interceptor.MultipartRequestInterceptor.(MultipartRequestInte rceptor.java:34)
… 38 more

Acredito que ao executar seu construtor:

public MultipartRequestInterceptor() throws IOException {
this.temporaryDirectory = new File(System.getProperty(“java.io.tmpdir”));
}

Alguém que conhece este interceptor e Linux poderia me dizer qual o diretorio eu preciso ter a permissão de escrita?
Pois acredito que este problema seja novo na locaWeb.

Valeu!

Thiago

Pessoal,

Complementando o post anterior, fiz alguns testes dentro do servidor da LocaWeb.
Ao utilizar este interceptor seu construtor tenta criar um repositório de arquivos temporário:

public MultipartRequestInterceptor() throws IOException {
this.temporaryDirectory = new File(System.getProperty(“java.io.tmpdir”));
}

Este construtor esta tentando criar um diretorio dentro do seguinte mapeamento no servidor:

/opt/tomcat55/temp

Mas as permissões de hospedagem nao permitem.
Como se trata de um construtor sem argumento da classe, não consigo evitar essa execução mesmo especializando a classe. Existe alguma manobra para eu conseguir fornecer outro caminho ao inves do que o seguite método fornece? System.getProperty(“java.io.tmpdir”)

O ato de fazer um new File() não significa que você vai criar um arquivo. O Java apenas instancia o arquivo/diretório para que você possa trabalhar com ele, mas em nenhum momento ele cria.

Qual a versão do Vraptor você está usando?

isso é do VRaptor 2.6.x provavelmente…

o jeito mais facil talvez seja pegar o fonte do MultipartRequestInterceptor, criar uma classe com o mesmo conteúdo, alterar o que vc precisa e usar essa sua classe alterada

Funcionou!

Fiz isso mesmo. Reescrevi a classe, modificando esta parte do código que estava fixa, para um diretório que eu tinha permissão de escrita.

Valeu pela ajuda.

Thiago