Salve pessoal, estava tentando fazer um upload de arquivo com jsf e com o tomahawk da Apache mas sempre me deparo com a seguinte exceção:
SEVERE: Received 'java.lang.NullPointerException' when invoking action listener '#{DocumentoControl.save}' for component 'j_id_id56'
SEVERE: java.lang.NullPointerException
at pacote.DocumentoControl.save(DocumentoControl.java:38)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.el.parser.AstValue.invoke(AstValue.java:187)
at com.sun.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:297)
at javax.faces.event.MethodExpressionActionListener.processAction(MethodExpressionActionListener.java:88)
at javax.faces.event.ActionEvent.processListener(ActionEvent.java:77)
at javax.faces.component.UIComponentBase.broadcast(UIComponentBase.java:746)
at javax.faces.component.UICommand.broadcast(UICommand.java:368)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:447)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:752)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:97)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:251)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:117)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:244)
at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1096)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:288)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:647)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.doProcess(DefaultProcessorTask.java:579)
at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.process(DefaultProcessorTask.java:831)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.executeProcessorTask(DefaultReadTask.java:341)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:263)
at com.sun.enterprise.web.connector.grizzly.DefaultReadTask.doTask(DefaultReadTask.java:214)
at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:265)
at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
o meu jsp está assim:
<h:form enctype="multipart/form-data">
<h:panelGrid columns="3">
<h:outputText value="Tipo de Documento" styleClass="" />
<h:inputText id="tpdCodigo" required="true"
binding="#{DocumentoControl.inputTpdDocumento}"
styleClass="inputsForms">
</h:inputText>
<h:message for="tpdCodigo" />
<h:outputText value="Arquivo" styleClass="" />
<t:inputFileUpload
id="file"
storage="file"
value="#{DocumentoControl.inputDocumento}"
/>
<h:message for="file"/>
</h:panelGrid>
<p><h:commandButton value="Salvar"
actionListener="#{DocumentoControl.save}"
action="#{DocumentoControl.act}"
styleClass="" />
<h:commandButton
value="Cancelar"
immediate="true"
onclick="return confirm('Deseja cancelar o tipo de documento sendo editado?')"
action="cancelar"
styleClass="" />
</p>
</h:form>
e no backing bean no metodo save
System.out.print("Entrou aqui");
// obtem os valores dos componentes
int tpdCodigo = Integer.parseInt((String) getInputTpdDocumento().getValue());
File arq = new File(getInputDocumento().getName());
BufferedInputStream bis = new BufferedInputStream(getInputDocumento().getInputStream());
FileOutputStream fos = new FileOutputStream(arq);
byte[] buffer = new byte[1024];
int count;
while ((count = bis.read(buffer)) > 0)
fos.write(buffer, 0, count);
bis.close();
fos.close();
System.out.print("Passou pela leitura do arquivo");
sendo que input documento é do tipoUploadedFile.
Configurei também o web.xml com o seguinte:
<filter>
<filter-name>extensionsFilter</filter-name>
<filter-class>org.apache.myfaces.webapp.filter.ExtensionsFilter</filter-class>
<init-param>
<param-name>uploadMaxFileSize</param-name>
<param-value>100m</param-value>
</init-param>
<init-param>
<param-name>uploadThresholdSize</param-name>
<param-value>100k</param-value>
</init-param>
</filter>
O que acontece é que ele não está pegando o inputDocumento, o que poderia estar errado?