Pessoal fiz metodo que instancia uma classe abstrata, quando rodo uma classe de Test em modo desktop ela funciona perfeitamente. Quando utilizo ela em modo Web a classe não é instanciada corretamente;
vejam:
Metodo dentro da classe Pessoa:
public final VinculoPessoa criarVinculo(int cdVinculo) {
Map<Integer, Class<?>> vMap = new HashMap<Integer, Class<?>>();
vMap.put(Administrador.CD_VINCULO, Administrador.class);
vMap.put(Prestador.CD_VINCULO, Prestador.class);
vMap.put(Colaborador.CD_VINCULO, Colaborador.class);
vMap.put(Cliente.CD_VINCULO, Cliente.class);
vMap.put(VinculoCNU.CD_VINCULO, VinculoCNU.class);
vMap.put(VinculoFornecedor.CD_VINCULO, VinculoFornecedor.class);
vMap.put(VinculoParticipacoes.CD_VINCULO, VinculoParticipacoes.class);
VinculoPessoa vp = null;
try {
final Class<VinculoPessoa> clazz = (Class<VinculoPessoa>) vMap.get(cdVinculo);
Constructor<VinculoPessoa> constructor = clazz.getConstructor(Pessoa.class);
vp = constructor.newInstance(new Object[]{this});
vinculosPortal.add(vp);
} catch (NoSuchMethodException e) {
conf.Log.logControlMsg(this, conf.Log.LEVEL_ERRO, e);
} catch (InvocationTargetException e) {
conf.Log.logControlMsg(this, conf.Log.LEVEL_ERRO, e);
} catch (IllegalAccessException e) {
conf.Log.logControlMsg(this, conf.Log.LEVEL_ERRO, e);
} catch (InstantiationException e) {
conf.Log.logControlMsg(this, conf.Log.LEVEL_ERRO, e);
}
return vp;
}
[quote=surfzera]Pessoal fiz metodo que instancia uma classe abstrata, quando rodo uma classe de Test em modo desktop ela funciona perfeitamente. Quando utilizo ela em modo Web a classe não é instanciada corretamente;
vejam:
Metodo dentro da classe Pessoa:
[code]
public final VinculoPessoa criarVinculo(int cdVinculo) {
Map<Integer, Class<?>> vMap = new HashMap>();
vMap.put(Administrador.CD_VINCULO, Administrador.class);
vMap.put(Prestador.CD_VINCULO, Prestador.class);
vMap.put(Colaborador.CD_VINCULO, Colaborador.class);
vMap.put(Cliente.CD_VINCULO, Cliente.class);
vMap.put(VinculoCNU.CD_VINCULO, VinculoCNU.class);
vMap.put(VinculoFornecedor.CD_VINCULO, VinculoFornecedor.class);
vMap.put(VinculoParticipacoes.CD_VINCULO, VinculoParticipacoes.class);
VinculoPessoa vp = null;
try {
final Class<VinculoPessoa> clazz = (Class<VinculoPessoa>) vMap.get(cdVinculo);
Constructor<VinculoPessoa> constructor = clazz.getConstructor(Pessoa.class);
vp = constructor.newInstance(new Object[]{this});
vinculosPortal.add(vp);
} catch (NoSuchMethodException e) {
conf.Log.logControlMsg(this, conf.Log.LEVEL_ERRO, e);
} catch (InvocationTargetException e) {
conf.Log.logControlMsg(this, conf.Log.LEVEL_ERRO, e);
} catch (IllegalAccessException e) {
conf.Log.logControlMsg(this, conf.Log.LEVEL_ERRO, e);
} catch (InstantiationException e) {
conf.Log.logControlMsg(this, conf.Log.LEVEL_ERRO, e);
}
return vp;
}
[/code][/quote]
Erro:
br.com.unimed.portal.pessoa.colaborador.Colaborador.(Colaborador.java:145)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Você ta tentando utilizar essa classe com algum framework?
Não tentei… qual framework posso utilizar ?
[quote=surfzera]Não tentei… qual framework posso utilizar ? [/quote]Eu digo, na view. Você está tentando utilizar esse objeto em alguma página? Em algum framework? Quando acontece esse erro?
[quote=surfzera]
Erro:
br.com.unimed.portal.pessoa.colaborador.Colaborador.(Colaborador.java:145)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)[/quote]
Isso não é o erro, poste a stacktrace completa.
Você sabe que não pode instanciar uma classe abstrata, correto?
Posta a parte relevante da classe Colaborador também. Principalmente o construtor.
Segue
Construtor da Classe Colaborador:
public Colaborador(Pessoa pessoa) {
super(pessoa);
}
Segue Erro completo:
HTTP Status 500 -
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
javax.servlet.ServletException
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:848)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:781)
org.apache.jsp.uploadCSV_jsp._jspService(org.apache.jsp.uploadCSV_jsp:94)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
root cause
java.lang.ExceptionInInitializerError
br.com.unimed.portal.pessoa.colaborador.Colaborador.(Colaborador.java:145)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
java.lang.reflect.Constructor.newInstance(Constructor.java:513)
br.com.unimed.portal.pessoa.Pessoa.criarVinculo(Pessoa.java:248)
br.com.unimed.portal.colaborador.CargaColaborador.popularPessoaFisica(CargaColaborador.java:125)
br.com.unimed.portal.colaborador.CargaColaborador.lerArquivoCsv(CargaColaborador.java:86)
org.apache.jsp.uploadCSV_jsp._jspService(org.apache.jsp.uploadCSV_jsp:77)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
note The full stack trace of the root cause is available in the Apache Tomcat/5.5.9 logs.
O que tem nessa linha?
br.com.unimed.portal.pessoa.colaborador.Colaborador.(Colaborador.java:145)
Hebert
Esta sendo usado Refletion utilizando a classe Contructor, não entendi bem se é isso que você quis dizer:
import java.lang.reflect.Constructor;
final Class<VinculoPessoa> clazz = (Class<VinculoPessoa>) vMap.get(cdVinculo);
Constructor<VinculoPessoa> constructor = clazz.getConstructor(Pessoa.class);
vp = constructor.newInstance(new Object[]{this});
Linha 145 classe Colaborador:
144 - public static final int CD_VINCULO = 3;
145 - private static TipoVinculoPessoa tp_vinculo = TipoVinculoPessoa.getInstanceOf(CD_VINCULO);
Eu ACHO que o seu servidor está se perdendo na hora de instanciar a classe. Creio que a solução seria criar um classloader próprio, mas não sei te falar ao certo como seria.
Então aproveitando o gancho estou usando o JBOSS 4.0.2
Só uma pergunta.
Sua classe Colaborador tem um contrutor default?
Vi que existe um construtor recebendo uma Pessoa, o que a deixa sem o construtor default.
Sim a classe Colaborador tem um Contrutor:
public Colaborador(Pessoa pessoa) {
super(pessoa);
}
thiago_pco@hotmail.com - Não entendi oque você que dizer! Pode me explicar melhor ?
Alguns frameworks utilizam o contrutor default ou padrão para inicializar classes. Por padrão toda classe java sem um construtor explícito possui um construtor default.
Porém quando criamos um construtor com parâmetros diferentes o default deixa de existir.
Como sua classe possui um construtor recebendo uma Pessoa, provavelmente não possui mais o construtor padrão(Caso não seja adicionado explicitamente), que seria algo do tipo:
public Colaborador(){
}