Estou obtendo Nullpointer exception quando faço o upload de arquivo com struts2.
será que falta alguma configuracao.
Estou usando multipart/form-data no formulario.
<s:form action="cadQuestaoXml" namespace="/crud" theme="simple"
method="POST" enctype="multipart/form-data">
fiaux
#2
Em que linha da action? O arquivo é setado na variável File? Você tem uma variável file de mesmo nome do atributo name da tag s:file na jsp?
Linha 55 da action
Codigo do formulario
<s:form action="cadQuestaoXml" namespace="/crud" theme="simple"
method="POST" enctype="multipart/form-data">
<table id="tabela">
<tr>
<td><s:text name="questao.form_row_select_certificacao"/></td>
<td rowspan="2"><s:doubleselect
label="Certificacao"
name="idCertificacao"
list="certificacoes"
listKey="id"
listValue="nome"
value="'id'"
doubleValue="'id'"
doubleList="competencias"
doubleListKey="id"
doubleListValue="nome"
doubleName="idCompetencia"
theme="simple" />
</td>
</tr>
<tr>
<td><s:text name="questao.form_row_select_competencia"/></td>
</tr>
<tr>
<td><s:text name="questao.form_row_arquivo"/></td>
<td align="left">
<s:file name="upload" theme="simple" size="50" />
</td>
</tr>
<tr>
<td> </td>
<td align="left"><s:submit value="Cadastrar" method="parser" /></td>
</tr>
</table>
</s:form>
codigo da action
package action;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.FileChannel;
import java.util.ArrayList;
import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.ServletRequestAware;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import parserxml.EventHandler;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.OgnlValueStack;
import dao.CertificacaoDao;
import dao.CompetenciaDao;
import dao.QuestaoDao;
import entidades.Certificacao;
import entidades.Competencia;
import entidades.Parametro;
public class QuestaoAction extends ActionSupport implements ServletRequestAware{
private static final long serialVersionUID = 6266088461853095687L;
private int idCertificacao;
private String idCompetencia;
//private String arquivo;
private File upload;//The actual file
private String uploadContentType; //The content type of the file
private String uploadFileName; //The uploaded file name
private ArrayList<Competencia> competencias = new ArrayList<Competencia>();
private ArrayList<Parametro> totalizador;
private ArrayList<Certificacao> certificacoes;
private CompetenciaDao competenciaDao; //dependency injection
private QuestaoDao questaoDao;
private CertificacaoDao certificacaoDao;
private HttpServletRequest request;
private static void copyFile(File in, File out) {
try {
FileChannel sourceChannel = new FileInputStream(in).getChannel();
FileChannel destinationChannel = new FileOutputStream(out).getChannel();
sourceChannel.transferTo(0, sourceChannel.size(), destinationChannel);
sourceChannel.close();
destinationChannel.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
public String parser() throws Exception {
//um parse eh criado atraves de um SAXParserFactory
SAXParser parser;
try {
System.out.println(uploadFileName);
copyFile(upload, new File("c:\\uploads\\"+ uploadFileName));
parser = SAXParserFactory.newInstance().newSAXParser();
//FileInputStream eh usado par InputSource
InputSource input = new InputSource("c:\\uploads\\"+ uploadFileName);
//informa para o parse qual classe vai processar os eventos: EventHandler.java
parser.parse(input, new EventHandler(idCompetencia, questaoDao));
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return SUCCESS;
}
@Override
public String execute() throws Exception {
return SUCCESS;
}
//getters e setters
public int getIdCertificacao() {
return idCertificacao;
}
public void setIdCertificacao(int idCertificacao) {
this.idCertificacao = idCertificacao;
}
public String getIdCompetencia() {
return idCompetencia;
}
public void setIdCompetencia(String idCompetencia) {
this.idCompetencia = idCompetencia;
}
//get e set de file
public File getUpload() {
return upload;
}
public void setUpload(File upload) {
this.upload = upload;
}
public String getUploadContentType() {
return uploadContentType;
}
public void setUploadContentType(String uploadContentType) {
this.uploadContentType = uploadContentType;
}
public String getUploadFileName() {
return uploadFileName;
}
public void setUploadFileName(String uploadFileName) {
this.uploadFileName = uploadFileName;
}
/*
public String getArquivo() {
return arquivo;
}
public void setArquivo(String arquivo) {
this.arquivo = arquivo;
}
*/
public ArrayList<Parametro> getTotalizador() {
String cpf = request.getRemoteUser();
totalizador = questaoDao.getTotalizadores(cpf);
return totalizador;
}
public void setTotalizador(ArrayList<Parametro> totalizador) {
this.totalizador = totalizador;
}
public ArrayList<Competencia> getCompetencias() {
String cpf = request.getRemoteUser();
OgnlValueStack stack = (OgnlValueStack)
ServletActionContext.getValueStack(ServletActionContext.getRequest());
Object tipoCert = stack.findValue("top");
if(tipoCert!=null && tipoCert instanceof Certificacao) {
Certificacao cert = (Certificacao)tipoCert;
competencias = competenciaDao.listaTodasCompetencia(cpf,cert.getId());
}
return competencias;
}
public void setCompetencias(ArrayList<Competencia> competencias) {
this.competencias = competencias;
}
public ArrayList<Certificacao> getCertificacoes() {
//apenas as certificacoes do gestor
String cpf = request.getRemoteUser();
certificacoes = certificacaoDao.listaTodosCertificacao(cpf);
return certificacoes;
}
public void setCertificacoes(ArrayList<Certificacao> certificacoes) {
this.certificacoes = certificacoes;
}
public CompetenciaDao getCompetenciaDao() {
return competenciaDao;
}
public void setCompetenciaDao(CompetenciaDao competenciaDao) {
this.competenciaDao = competenciaDao;
}
public QuestaoDao getQuestaoDao() {
return questaoDao;
}
public void setQuestaoDao(QuestaoDao questaoDao) {
this.questaoDao = questaoDao;
}
public CertificacaoDao getCertificacaoDao() {
return certificacaoDao;
}
public void setCertificacaoDao(CertificacaoDao certificacaoDao) {
this.certificacaoDao = certificacaoDao;
}
@Override
public void setServletRequest(HttpServletRequest arg0) {
request = arg0;
}
}
fiaux
#4
Pô cara, e a exception, rola onde?
– edit Foi mal, não vi que você disse a linha.
fiaux
#5
Aparentemente, tá certo. Já rodou em debug, botando breakpoint no setUpload?