Intanciando classe Abstrata

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(){
}