Ao tentar salvar um formulário depois de preenchido aparece : Erro ao tentar atualizar Objeto.
Parece que o erro está vinculado a classe controle.
o ideal é você postar o código do que está fazendo, para ficar mais fácil de lhe ajudarem.
public class QuestionarioCtr extends CensoBaseCtr<ProtocoloVO> {
private static final long serialVersionUID = 1L;
private ListModelList<SexoEnum> sexoList;
private ListModelList<TipoLogradouroEnum> tipoLogradouroList;
private ListModelList<UFEnum> ufList;
private ListModelList<CondicaoConjugeEnum> condicaoConjugeList;
@Override
public void doAfterCompose(Component tela) throws Exception {
super.doAfterCompose(tela);
sexoList = new ListModelList<SexoEnum>(SexoEnum.values());
tipoLogradouroList = new ListModelList<TipoLogradouroEnum>(TipoLogradouroEnum.values());
ufList = new ListModelList<UFEnum>(UFEnum.values());
condicaoConjugeList = new ListModelList<CondicaoConjugeEnum>(CondicaoConjugeEnum.values());
pesquisar();
}
@Override
public void antesPesquisar(ProBaseVO pArg) throws Exception {
super.antesPesquisar(pArg);
ProtocoloVO protocoloVO = (ProtocoloVO) pArg;
if (isPapelOperador()) {
if (protocoloVO.getCpf() != null && !protocoloVO.getCpf().isEmpty() && protocoloVO.getCpf().length() < 12) {
String cpf = UtilCenso.formataCPF(protocoloVO.getCpf());
protocoloVO.setCpf(cpf);
}
} else if (isPapelOperadorOrgao()) {
protocoloVO.setCnpjOrgao(retornaCnpj());
} else {
String login = UtilCenso.formataCPF(getUsuarioVO().getLogin());
protocoloVO.setCpf(login);
}
}
@Override
protected void antesSalvar(ProBaseVO objetoAtual) {
ProtocoloVO protocoloVO = (ProtocoloVO) objetoAtual;
super.antesSalvar(objetoAtual);
if (this.isPapelOperador() == true || isPapelOperadorOrgao() == true) {
String cpf = UtilCenso.formataCPF(protocoloVO.getCpf());
protocoloVO.setCpf(cpf);
} else {
protocoloVO.setCpf(UtilCenso.formataCPF(getUsuarioVO().getLogin()));
}
}
@Override
public void setObjetoAtual(Object objetoAtual) {
ProtocoloVO protocoloVO = (ProtocoloVO) objetoAtual;
EtapaVO etapaVO = protocoloVO.getEtapaVO();
TipoProtocoloVO tipoProtocoloVO = etapaVO.getTipoProtocoloVO();
if (ObjetoHelper.isCampoNaoPreenchido(etapaVO, "id")) {
throw new ViolacaoDeRegraEx("PERÍODO DE REALIZAÇÃO DO CENSO PREVIDENCIÁRIO NÃO INICIADO.");
}
if (this.isPapelOperador() == false && etapaVO.getId() == 1 && tipoProtocoloVO.getDescProtocolo().equals(ConstantesCenso.TIPOS_PROTOCOLO.PENSIONISTA)) {
if (!DataHelper.isDataInicioNulaAnteriorAtual(etapaVO.getDtInicio(), new Date())) {
throw new ViolacaoDeRegraEx("PERÍODO DE REALIZAÇÃO DO CENSO PREVIDENCIÁRIO NÃO INICIADO.");
}
}
super.setObjetoAtual(objetoAtual);
}
@Override
protected void antesAtualizaObjetoAtual(Object objetoAtual) {
super.antesAtualizaObjetoAtual(objetoAtual);
ProtocoloVO protocoloVO = (ProtocoloVO) objetoAtual;
EtapaVO etapaVO = protocoloVO.getEtapaVO();
TipoProtocoloVO tipoProtocoloVO = etapaVO.getTipoProtocoloVO();
controlaExibicaoMensagemCensoRealizado(protocoloVO);
controlaExibicaoBotaoImprimir(protocoloVO);
if (protocoloVO.getDadosPessoaisVO().getDadosFuncionaisVO() == null && tipoProtocoloVO.getDescProtocolo().equals(ConstantesCenso.TIPOS_PROTOCOLO.ATIVO)) {
DadosFuncionaisVO dadosFuncionaisVO = new DadosFuncionaisVO();
protocoloVO.getDadosPessoaisVO().setDadosFuncionaisVO(dadosFuncionaisVO);
// DadosPessoaisVO dadosPessoaisVO = new DadosPessoaisVO();
// protocoloVO.setDadosPessoaisVO(dadosPessoaisVO);
}
}
public ListModelList<SexoEnum> getSexoList() {
return sexoList;
}
public ListModelList<TipoLogradouroEnum> getTipoLogradouroList() {
return tipoLogradouroList;
}
public ListModelList<UFEnum> getUfList() {
return ufList;
}
public ListModelList<CondicaoConjugeEnum> getCondicaoConjugeList() {
return condicaoConjugeList;
}
public List<SexoEnum> filtraSexo(Bandboxbind bandbox) {
return this.getSexoList();
}
public List<TipoLogradouroEnum> filtraTipoLogradouro(Bandboxbind bandbox) {
return this.getTipoLogradouroList();
}
public List<UFEnum> filtraUF(Bandboxbind bandbox) {
return this.getUfList();
}
public List<CondicaoConjugeEnum> filtraCondicaoConjuge(Bandboxbind bandbox) {
return this.getCondicaoConjugeList();
}
}
Poste a stacktrace completa aqui pra gente ver (a parte importante é onde tem o causedBy). E copie e cole a stacktrace aqui, evite mandar imagens para ficar mais fácil de tentar ajudar.
2023-05-23 10:13:06.116 ERROR 3956 --- [nio-8086-exec-7] b.g.p.i.c.c.servidor.QuestionarioCtr : Erro ao salvar
java.lang.RuntimeException: Erro ao tentar atualizar objeto
at br.gov.prodigio.comuns.utils.Reflexao.atualizarCampoDoObjeto(Reflexao.java:153) ~[prodigio-dominio-9.0.000.jar:na]
at br.gov.prodigio.controle.ProCtr.validacaoGenericaDeBeanvalidator(ProCtr.java:2415) ~[prodigio-web-zk-9.0.000.jar:na]
at br.gov.prodigio.controle.ProCtr.valitadeField(ProCtr.java:2397) ~[prodigio-web-zk-9.0.000.jar:na]
at br.gov.prodigio.controle.componente.GenericConstraint.validate(GenericConstraint.java:85) ~[prodigio-web-zk-9.0.000.jar:na]
at org.zkoss.zul.impl.InputElement.validate(InputElement.java:359) ~[zul-8.6.4.jar:8.6.4]
at org.zkoss.zul.impl.InputElement.setText(InputElement.java:310) ~[zul-8.6.4.jar:8.6.4]
at org.zkoss.zul.impl.InputElement.checkUserError(InputElement.java:724) ~[zul-8.6.4.jar:8.6.4]
at org.zkoss.zul.impl.InputElement.getText(InputElement.java:287) ~[zul-8.6.4.jar:8.6.4]
at org.zkoss.zul.Textbox.getValue(Textbox.java:59) ~[zul-8.6.4.jar:8.6.4]
at jdk.internal.reflect.GeneratedMethodAccessor239.invoke(Unknown Source) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at org.zkoss.lang.reflect.Fields.get(Fields.java:116) ~[zcommon-8.6.4.jar:8.6.4]
at org.zkoss.zkplus.databind.Binding.getAttributeValues(Binding.java:468) ~[zkplus-8.6.4.jar:8.6.4]
at org.zkoss.zkplus.databind.Binding.saveAttribute(Binding.java:444) ~[zkplus-8.6.4.jar:8.6.4]
at org.zkoss.zkplus.databind.DataBinder.saveAttrs(DataBinder.java:594) ~[zkplus-8.6.4.jar:8.6.4]
at org.zkoss.zkplus.databind.DataBinder.saveComponent(DataBinder.java:559) ~[zkplus-8.6.4.jar:8.6.4]
at br.gov.prodigio.controle.componente.ProAnnotateDataBinder.saveComponent(ProAnnotateDataBinder.java:125) ~[prodigio-web-zk-9.0.000.jar:na]
at org.zkoss.zkplus.databind.DataBinder.saveComponent(DataBinder.java:564) ~[zkplus-8.6.4.jar:8.6.4]
at br.gov.prodigio.controle.componente.ProAnnotateDataBinder.saveComponent(ProAnnotateDataBinder.java:125) ~[prodigio-web-zk-9.0.000.jar:na]
at org.zkoss.zkplus.databind.DataBinder.saveComponent(DataBinder.java:564) ~[zkplus-8.6.4.jar:8.6.4]
at br.gov.prodigio.controle.componente.ProAnnotateDataBinder.saveComponent(ProAnnotateDataBinder.java:125) ~[prodigio-web-zk-9.0.000.jar:na]
at org.zkoss.zkplus.databind.DataBinder.saveComponent(DataBinder.java:564) ~[zkplus-8.6.4.jar:8.6.4]
at br.gov.prodigio.controle.componente.ProAnnotateDataBinder.saveComponent(ProAnnotateDataBinder.java:125) ~[prodigio-web-zk-9.0.000.jar:na]
at org.zkoss.zkplus.databind.DataBinder.saveComponent(DataBinder.java:564) ~[zkplus-8.6.4.jar:8.6.4]
at br.gov.prodigio.controle.componente.ProAnnotateDataBinder.saveComponent(ProAnnotateDataBinder.java:125) ~[prodigio-web-zk-9.0.000.jar:na]
at org.zkoss.zkplus.databind.DataBinder.saveAll(DataBinder.java:580) ~[zkplus-8.6.4.jar:8.6.4]
at br.gov.prodigio.controle.ProCtr.transfereDadosDaTelaParaObjeto(ProCtr.java:614) ~[prodigio-web-zk-9.0.000.jar:na]
at br.gov.prodigio.controle.ProCtr.salvar(ProCtr.java:508) ~[prodigio-web-zk-9.0.000.jar:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
at bsh.Reflect.invokeMethod(Reflect.java:131) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.Reflect.invokeObjectMethod(Reflect.java:77) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.Name.invokeMethod(Name.java:852) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:69) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:96) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:41) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.Interpreter.eval(Interpreter.java:659) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at bsh.Interpreter.eval(Interpreter.java:750) ~[bsh-2.0b6.jar:2.0b6 2016-02-05 05:16:19]
at org.zkoss.zk.scripting.bsh.BSHInterpreter.exec(BSHInterpreter.java:132) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.scripting.util.GenericInterpreter.interpret(GenericInterpreter.java:342) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.ui.impl.PageImpl.interpret(PageImpl.java:963) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3137) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.ui.AbstractComponent.service(AbstractComponent.java:3091) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.ui.impl.EventProcessor.process(EventProcessor.java:138) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.ui.impl.UiEngineImpl.processEvent(UiEngineImpl.java:1845) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.ui.impl.UiEngineImpl.process(UiEngineImpl.java:1617) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.ui.impl.UiEngineImpl.execUpdate(UiEngineImpl.java:1320) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.au.http.DHtmlUpdateServlet.process(DHtmlUpdateServlet.java:611) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.au.http.DHtmlUpdateServlet.doGet(DHtmlUpdateServlet.java:487) ~[zk-8.6.4.jar:8.6.4]
at org.zkoss.zk.au.http.DHtmlUpdateServlet.doPost(DHtmlUpdateServlet.java:495) ~[zk-8.6.4.jar:8.6.4]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:660) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.12.jar:9.0.12]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:92) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:93) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107) ~[spring-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:770) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1415) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.12.jar:9.0.12]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: java.lang.NullPointerException: null
at br.gov.prodigio.comuns.utils.Reflexao.atualizarCampoDoObjeto(Reflexao.java:150) ~[prodigio-dominio-9.0.000.jar:na]
... 91 common frames omitted
O que tem na linha 150 da classe Reflexao
? Está acontecendo um NullPointerException
nessa linha.
É uma classe padrão do Framework
public class Reflexao {
private static final Logger log = LoggerFactory.getLogger(Reflexao.class);
private static Map<String, Class> mapaDeTiposPrimitivos = new HashMap<String, Class>();
static {
mapaDeTiposPrimitivos.put(“int”, Integer.class);
mapaDeTiposPrimitivos.put(“long”, Long.class);
mapaDeTiposPrimitivos.put(“double”, Double.class);
mapaDeTiposPrimitivos.put(“float”, Float.class);
mapaDeTiposPrimitivos.put(“boolean”, Boolean.class);
mapaDeTiposPrimitivos.put(“char”, Character.class);
mapaDeTiposPrimitivos.put(“byte”, Byte.class);
mapaDeTiposPrimitivos.put(“void”, Void.class);
mapaDeTiposPrimitivos.put(“short”, Short.class);
}
/**
* Método responsável por recuperar o nome do atributo associado ao método.
* <p>
* Ex.:<br>
* <code> Method metodo = ArquivoVO.class.getDeclaredMethod("getNome", null); </code> <br>
* <code> recuperaNomeDoAtributo(metodo)</code>
* <p>
* O código acima ira retornar a String <code>"nome"</code>
*
* @param method
* Nome do método que se deseja recuperar o atributo
* @return nome do atributo
*/
public static String recuperaNomeDoAtributo(Method method) {
String nomeMetodo = null;
try {
nomeMetodo = method.getName().substring(3, 4).toLowerCase() + method.getName().substring(4);
} catch (Exception e) {
e.printStackTrace();
}
return nomeMetodo;
}
/**
* Método recursivo que atualiza a propriedade do objeto de acordo com o argumento.<br>
* Se a propriedade for simples é recuperado o método set da propriedade é o valor e atualizado.<br>
* Se a propriedade for composta o método é chamado recursivamente para recuperar a propriedade do valor a ser alterado.
*
* @param propriedadade
* Propriedade do objeto à ser atualizado
* @param objeto
* Objeto que contém o atributo a ser atualizado
* @param argumento
* Valor a ser atribuÃdo no propriedade
* @throws Exception
* se o atributo/objeto não for encontrado.
*/
public static void atualizarCampoDoObjeto(String propriedadade, Object objeto, Object argumento) {
try {
if (propriedadade.contains(".")) {
Object agregadoVO = null;
String[] objetoAgregado = propriedadade.split("\\.");
agregadoVO = Reflexao.recuperaValorDaPropriedade(objetoAgregado[0], objeto);
Class c = null;
if (agregadoVO == null) {
c = Reflexao.recuperaTipoDeRetornoDoMetodoGet(objetoAgregado[0], objeto);
if (Collection.class.isAssignableFrom(c)) {
return;
}
agregadoVO = c.newInstance();
} else {
c = agregadoVO.getClass();
}
if (Collection.class.isAssignableFrom(c)) {
return;
}
Class[] classes = new Class[1];
classes[0] = agregadoVO.getClass();
// Method metodo2 = objeto.getClass().getMethod("set" + objetoAgregado[0].substring(0, 1).toUpperCase()
// + objetoAgregado[0].substring(1),classes);
Method metodo2 = retornaMetodoSet(objetoAgregado[0], objeto, agregadoVO);
metodo2.invoke(objeto, agregadoVO);
String propriedadeAux = propriedadade.replace(objetoAgregado[0] + ".", "");
atualizarCampoDoObjeto(propriedadeAux, agregadoVO, argumento);
} else {
Class[] classes = new Class[1];
Class class1 = null;
if (argumento != null) {
if (argumento instanceof Set) {
classes[0] = Set.class;
} else {
class1 = argumento.getClass();
while (class1.getSimpleName().contains("$$")) {// para tratar classes proxy hibernate
class1 = class1.getSuperclass();
}
classes[0] = class1;
}
} else {
return;
}
if (objeto != null && Collection.class.isAssignableFrom(objeto.getClass())) {
if (objeto instanceof Set) {
objeto = ((Set) objeto).iterator().next();
}
}
Method metodo2 = recuperaMetodoNaHierarquia(propriedadade, objeto, classes);
metodo2.invoke(objeto, argumento);
}
} catch (Exception e) {
throw new RuntimeException("Erro ao tentar atualizar objeto", e);
}
}
@SuppressWarnings({ "unchecked" })
public static Method recuperaMetodoNaHierarquia(String propriedadade, Object objeto, Class[] classes) {
Method[] methods = objeto.getClass().getMethods();
Method metodo2 = null;
for (Method method : methods) {
if (method.getName().equals("set" + propriedadade.substring(0, 1).toUpperCase() + propriedadade.substring(1))) {
Class<?> classeDoParametro = method.getParameterTypes()[0];
if (classeDoParametro.isPrimitive()) {
Class classeDoTipoPrimitivo = mapaDeTiposPrimitivos.get(classeDoParametro.getSimpleName());
if (classeDoTipoPrimitivo.isAssignableFrom(classes[0])) {
metodo2 = method;
break;
}
} else {
if (classeDoParametro.isAssignableFrom(classes[0])) {
metodo2 = method;
break;
}
}
}
}
return metodo2;
}
/**
* Método recursivo que recupera a propriedade do objeto.<br>
* Se a propriedade for simples é recuperado o método set da propriedade é o valor e atualizado.<br>
* Se a propriedade for composta, o método é chamado recursivamente para recuperar a propriedade set do valor a ser alterado.
*
* @param propriedadade
* Propriedade do objeto à ser atualizado
* @param objeto
* Objeto que contém o atributo a ser atualizado
* @param argumento
* Valor a ser atribuÃdo no propriedade
* @throws Exception
* se o atributo/objeto não for encontrado.
*/
public static Method retornaMetodoSet(String propriedadade, Object objeto, Object argumento) throws Exception {
if (propriedadade.contains(".")) {
Object agregadoVO = null;
String[] objetoAgregado = propriedadade.split("\\.");
try {
agregadoVO = Reflexao.recuperaValorDaPropriedade(objetoAgregado[0], objeto);
Class c = null;
if (agregadoVO == null) {
c = Reflexao.recuperaTipoDeRetornoDoMetodoGet(objetoAgregado[0], objeto);
agregadoVO = c.newInstance();
} else {
c = agregadoVO.getClass();
}
if (Collection.class.isAssignableFrom(c)) {
return null;
}
Class[] classes = new Class[1];
classes[0] = agregadoVO.getClass();
Method metodo2 = objeto.getClass().getMethod("set" + objetoAgregado[0].substring(0, 1).toUpperCase() + objetoAgregado[0].substring(1), classes);
metodo2.invoke(objeto, agregadoVO);
String propriedadeAux = propriedadade.replace(objetoAgregado[0] + ".", "");
atualizarCampoDoObjeto(propriedadeAux, agregadoVO, argumento);
} catch (Exception e) {
throw new Exception("Erro ao recuperar método Set ", e);
}
} else {
Class[] classes = new Class[1];
Class class1 = null;
if (argumento != null) {
if (argumento instanceof Set) {
classes[0] = Set.class;
} else {
class1 = argumento.getClass();
while (class1.getSimpleName().contains("$$")) {// para tratar classes proxy hibernate
class1 = class1.getSuperclass();
}
classes[0] = class1;
}
} else {
// return;
}
Method metodo2 = recuperaMetodoNaHierarquia(propriedadade, objeto, classes);
return metodo2;
}
return null;
}
/**
* Método responsável por atualizar o valor da propriedade do objeto para <code>null</code>.
*
* @param propriedadade
* Propriedade do objeto à ser atualizado
* @param objeto
* Objeto que contém o atributo a ser atualizado
* @param argumento
* Valor a ser atribuÃdo no propriedade
* @throws Exception
* se o atributo/objeto não for encontrado.
*/
public static void atualizarCampoDoObjetoParaNull(String propriedadade, Object objeto, Object argumento) throws Exception {
Method metodo2 = retornaMetodoSet(propriedadade, objeto, argumento);
if (metodo2 != null) {
metodo2.invoke(objeto, (Object) null);
}
}
/**
* Método responsável por atualizar o valor da propriedade do objeto para vazio.
*
* @param propriedadade
* Propriedade do objeto à ser atualizado
* @param objeto
* Objeto que contém o atributo a ser atualizado
* @param argumento
* Valor a ser atribuÃdo no propriedade
* @throws Exception
* se o atributo/objeto não for encontrado.
*/
public static void atualizarCampoDoObjetoParaVazio(String propriedadade, Object objeto, Object argumento) throws Exception {
Method metodo2 = retornaMetodoSet(propriedadade, objeto, argumento);
if (metodo2 != null) {
metodo2.invoke(objeto, argumento);
}
}
/**
* Método que atualiza a propriedade do objeto de acordo com método e o argumento passado como parâmetro.<br>
*
* @param metodo
* Método a ser atualizado
* @param objeto
* Objeto que contém o atributo a ser atualizado
* @param argumento
* Valor a ser atribuÃdo no propriedade
* @throws Exception
* se o atributo/objeto não for encontrado.
*/
public static void atualizarCampoDoObjeto(Method metodo, Object objeto, Object argumento) throws NoSuchMethodException, IllegalAccessException, InvocationTargetException {
Class[] classes = new Class[1];
classes[0] = metodo.getReturnType();
if (objeto instanceof Set) {
Set colecao = (Set) objeto;
objeto = (colecao.toArray()[0]);
}
Method metodo2 = objeto.getClass().getMethod("set" + metodo.getName().substring(3), classes);
metodo2.invoke(objeto, argumento);
}
/**
* Método responsável por recuperar o getter do atributo.<br>
* Se o atributo for complexo, o método e chamado recursivamente para recuperar o get do atributo.
*
* @param nomeAtributo
* nome do atributo a se recuperar o método get
* @param objeto
* objeto que contem o método
* @return retorna o método get do objeto
* @throws Exception
* se o atributo não for encontrado no objeto
*/
public static Method recuperaMetodoGetDoObjeto(String nomeAtributo, Object objeto) throws Exception {
if (!nomeAtributo.contains(".")) {
if (objeto instanceof Set) {
Set colecao = (Set) objeto;
if (!colecao.isEmpty()) {
objeto = colecao.toArray()[0];
}
}
Method methods[] = objeto.getClass().getMethods();
String nomeAtributoAux = "";
for (Method method : methods) {
nomeAtributoAux = Reflexao.recuperaNomeDoAtributo(method);
if (eMetodoGetterBean(method)) {
if (nomeAtributoAux.equals(nomeAtributo)) {
return method;
}
}
}
} else {
String nodosDaExpressao[] = nomeAtributo.split("\\.");
Method m = recuperaMetodoGetDoObjeto(nodosDaExpressao[0], objeto);
Class tipo = null;
Object objAux = m.invoke(objeto);
if (objAux == null) {
if (m.getReturnType().isInterface()) {
tipo = retornaTargetEntityClass(m, m.getReturnType());
objAux = tipo.newInstance();
} else {
objAux = m.getReturnType().newInstance();
}
}
if (Set.class.isAssignableFrom(objAux.getClass()) || List.class.isAssignableFrom(objAux.getClass()) || Set.class.equals(objAux) || List.class.equals(objAux)) {
tipo = recuperaTipoDeParametroGenericosEmRetornoDeMetodos(m);
try {
String subExpressao = "";
for (int i = 1; i < nodosDaExpressao.length; i++) {
subExpressao = subExpressao + "." + nodosDaExpressao[i];
}
return recuperaMetodoGetDoObjeto(subExpressao.substring(1), tipo.newInstance());
} catch (IllegalAccessException e) {
log.error("Erro ao recuperar método Get", e);
} catch (InstantiationException e) {
log.error("Erro ao recuperar método Get", e);
}
} else {
nomeAtributo = nomeAtributo.replaceFirst(nodosDaExpressao[0] + ".", "");
return recuperaMetodoGetDoObjeto(nomeAtributo, objAux);
}
}
throw new Exception("Não foi possÃvel encontrar o atributo ou método: " + " " + nomeAtributo + " da classe:" + objeto.getClass().getName());
}
/**
* Método responsável por recuperar o setter do atributo.<br>
* Se o atributo for complexo, o método e chamado recursivamente para recuperar o set do atributo.
*
* @param nomeAtributo
* nome do atributo a se recuperar o método set
* @param objeto
* objeto que contem o método
* @return retorna o método set do objeto
* @throws Exception
* se o atributo não for encontrado no objeto
*/
public static Method recuperaMetodoSetDoObjeto(String nomeAtributo, Object objeto) throws Exception {
if (!nomeAtributo.contains(".")) {
if (objeto instanceof Set) {
Set colecao = (Set) objeto;
if (!colecao.isEmpty()) {
objeto = colecao.toArray()[0];
}
}
Method methods[] = objeto.getClass().getMethods();
String nomeAtributoAux = "";
for (Method method : methods) {
nomeAtributoAux = Reflexao.recuperaNomeDoAtributo(method);
if (eMetodoSetterBean(method)) {
if (nomeAtributoAux.equals(nomeAtributo)) {
return method;
}
}
}
} else {
String nodosDaExpressao[] = nomeAtributo.split("\\.");
Method m = recuperaMetodoSetDoObjeto(nodosDaExpressao[0], objeto);
Class tipo = null;
Object objAux = m.invoke(objeto);
if (objAux == null) {
if (m.getReturnType().isInterface()) {
tipo = retornaTargetEntityClass(m, m.getReturnType());
objAux = tipo.newInstance();
} else {
objAux = m.getReturnType().newInstance();
}
}
if (Set.class.isAssignableFrom(objAux.getClass()) || List.class.isAssignableFrom(objAux.getClass()) || Set.class.equals(objAux) || List.class.equals(objAux)) {
tipo = recuperaTipoDeParametroGenericosEmRetornoDeMetodos(m);
try {
String subExpressao = "";
for (int i = 1; i < nodosDaExpressao.length; i++) {
subExpressao = subExpressao + "." + nodosDaExpressao[i];
}
return recuperaMetodoSetDoObjeto(subExpressao.substring(1), tipo.newInstance());
} catch (IllegalAccessException e) {
log.error("Erro ao recuperar método Get", e);
} catch (InstantiationException e) {
log.error("Erro ao recuperar método Get", e);
}
} else {
nomeAtributo = nomeAtributo.replace(nodosDaExpressao[0], "");
nomeAtributo = nomeAtributo.substring(1);// retirando o ponto
return recuperaMetodoSetDoObjeto(nomeAtributo, objAux);
}
}
throw new Exception("Não foi possÃvel encontrar o atributo ou método: " + " " + nomeAtributo + " da classe:" + objeto.getClass().getName());
}
private static boolean eMetodoSetterBean(Method metodo) {
return
(metodo.getName().startsWith("set")) && (metodo.getName().indexOf("_") == -1) && (!metodo.getName().equals("setNrVersao")) &&
(!metodo.getName().equals("setUsuarioCriacao")) && (!metodo.getName().equals("setClass"));
}
private static boolean eMetodoGetterBean(Method metodo) {
return (metodo.getName().startsWith("get")) && (metodo.getName().indexOf("_") == -1) && (!metodo.getName().equals("getNrVersao")) && (!metodo.getName().equals("getUsuarioCriacao")) && (!metodo.getName().equals("getClass"));
}
private static boolean eMetodoGetterBeanPersistencia(Method metodo) {
return (!metodo.getName().equals("getId")) && (metodo.getName().startsWith("get")) && (metodo.getName().indexOf("_") == -1) && (!metodo.getName().equals("getNrVersao")) && (!metodo.getName().equals("getUsuarioCriacao"))
&& (!metodo.isAnnotationPresent(Transient.class)) && (!metodo.getName().equals("getClass"));
}
/**
* Método responsável por retornar o tipo genérico de uma coleção.
*
* @param objeto
* objeto que contem o método a ser pesquisado
* @param nomeMetodo
* nome do método a ser pesquisado
* @return tipo genérico da <code>Collection</code>
* @throws Exception
* se o atributo nomeMetodo não for encontrado
*/
public static Class recuperaTipoDeParametroGenerico(Object objeto, String nomeMetodo) throws Exception {
Class<? extends Object> classe = objeto.getClass();
while (classe.getSimpleName().contains("$$")) {// Resolve questões relacionadas as classes de proxy hibernate
classe = classe.getSuperclass();
}
Method metodos[] = classe.getMethods();
for (Method metodo : metodos) {
if (metodo.getName().equals(nomeMetodo)) {
return recuperaTipoDeParametroGenericosEmRetornoDeMetodos(metodo);
}
}
return null;
}
/**
* Método responsável por retornar o tipo genérico de uma coleção
*
* @param metodo
* método a ser pesquisado
* @return tipo genérico da <code>Collection</code>
* @throws Exception
* se o tipo do <code>metodo</code> não for uma <code>Collection</code>
*/
public static Class recuperaTipoDeParametroGenericosEmRetornoDeMetodos(Method metodo) throws Exception {
int beginIndex = metodo.getGenericReturnType().toString().indexOf("<");
int endIndex = metodo.getGenericReturnType().toString().indexOf(">");
String nomeDoTipo = metodo.getGenericReturnType().toString().substring(beginIndex + 1, endIndex);
try {
Class clazz = Class.forName(nomeDoTipo);
if (clazz.isInterface()) {
clazz = retornaTargetEntityClass(metodo, clazz);
}
return clazz;
} catch (ClassNotFoundException e) {
throw new Exception("Não foi possÃvel encontrar a classe " + nomeDoTipo, e);
}
}
private static Class retornaTargetEntityClass(Method metodo, Class clazz) {
if (metodo.isAnnotationPresent(OneToMany.class)) {
clazz = metodo.getAnnotation(OneToMany.class).targetEntity();
} else if (metodo.isAnnotationPresent(ManyToOne.class)) {
clazz = metodo.getAnnotation(ManyToOne.class).targetEntity();
} else {
clazz = metodo.getAnnotation(ManyToMany.class).targetEntity();
}
if (clazz == null || "void".equalsIgnoreCase(clazz.getName())) {
throw new RuntimeException("targetEntity não encontrado no método " + metodo + " da classe " + metodo.getDeclaringClass());
}
return clazz;
}
/**
* Método responsável por verificar se o método passado como parâmetro não possui como retorno um objeto <code>Set</code>
*
* @param metodo
* método a ser verificado
* @return boolean
*/
public static boolean eMetodoGetterBeanSemSet(Method metodo) {
return (!metodo.getName().equals("getId")) && (metodo.getName().startsWith("get")) && (metodo.getName().indexOf("_") == -1) && (!metodo.getName().equals("getClass")) && (!metodo.getName().equals("getNrVersao"))
&& (!metodo.getName().equals("getDataCriacao")) && (!metodo.getName().equals("getDataAlteracao")) && (!metodo.getName().equals("getUnidadeCriacao")) && (!metodo.getName().equals("getUsuarioCriacao"))
&& (!metodo.getReturnType().equals(Set.class));
}
/**
* Método responsável por recuperar o valor da propriedade do objeto.<br>
* Se a propriedade for complexa, o método e chamado recursivamente, varrendo todo o grafo do objeto para recuperar a propriedade.
*
* @param propriedade
* Propriedade a ser recuperada
* @param objetoAtual
* Objeto que contém a a propriedade
* @return o valor da propriedade passada como parâmetro
* @throws Exception
* se a propriedade não for encontrada
*/
public static Object recuperaValorDaPropriedade(String propriedade, Object objetoAtual) throws Exception {
if (ePropriedadeSimples(propriedade)) {
Method metodo = recuperaMetodoGetDoObjeto(propriedade, objetoAtual);
if (metodo == null) {
throw new IllegalArgumentException("A propriedade " + propriedade + " não existe no objeto");
}
return recuperaValorDeMetodoGet(metodo, objetoAtual);
} else {
String propriedadeAux = "";
Object objetoAux = null;
String propriedades[] = propriedade.split("\\.");
Method metodo = recuperaMetodoGetDoObjeto(propriedades[0], objetoAtual);
objetoAux = recuperaValorDeMetodoGet(metodo, objetoAtual);
if (objetoAux == null) {// && (ProBaseVO.class.isAssignableFrom(metodo.getReturnType()))) {
objetoAux = metodo.getReturnType().newInstance();
Reflexao.atualizarCampoDoObjeto(propriedades[0], objetoAtual, objetoAux);
}
// despreza a primeira string
for (int i = 1; i < propriedades.length; ++i) {// operador pré-posto discarta a primeira posicao
if (i < propriedades.length) {
propriedadeAux = propriedadeAux + "." + propriedades[i];
}
}
return recuperaValorDaPropriedade(propriedadeAux.substring(1), objetoAux);
}
}
/**
* Método responsável por recuperar o valor da propriedade do objeto.<br>
* Se a propriedade for complexa, é um objeto intermediario for nulo o metodo retornara null sem verificar o restante do grafo.
*
* @param propriedade
* Propriedade a ser recuperada
* @param objetoAtual
* Objeto que contém a a propriedade
* @return o valor da propriedade passada como parâmetro
* @throws Exception
* se a propriedade não for encontrada
*/
public static Object recuperaValorDaPropriedadeVerificandoSeGrafoEstaInstanciado(String propriedade, Object objetoAtual) throws Exception {
if (ePropriedadeSimples(propriedade)) {
Method metodo = recuperaMetodoGetDoObjeto(propriedade, objetoAtual);
if (metodo == null) {
throw new IllegalArgumentException("A propriedade " + propriedade + " não existe no objeto");
}
return recuperaValorDeMetodoGet(metodo, objetoAtual);
} else {
String propriedadeAux = "";
Object objetoAux = null;
String propriedades[] = propriedade.split("\\.");
Method metodo = recuperaMetodoGetDoObjeto(propriedades[0], objetoAtual);
objetoAux = recuperaValorDeMetodoGet(metodo, objetoAtual);
if (objetoAux == null) {// && (ProBaseVO.class.isAssignableFrom(metodo.getReturnType()))) {
return null;
}
// despreza a primeira string
for (int i = 1; i < propriedades.length; ++i) {// operador pré-posto discarta a primeira posicao
if (i < propriedades.length) {
propriedadeAux = propriedadeAux + "." + propriedades[i];
}
}
return recuperaValorDaPropriedade(propriedadeAux.substring(1), objetoAux);
}
}
private static boolean ePropriedadeSimples(String propriedade) {
return propriedade.indexOf(".") == -1;
}
/**
* Método responsável por recuperar o valor getter do método passado como parâmetro.
*
* @param getter
* método que sera invocado para retornar o valor
* @param objetoAtual
* objeto que contem o método
* @return valor do método get
* @throws IllegalAccessException
* @throws InvocationTargetException
* se o método não existir
*/
public static Object recuperaValorDeMetodoGet(Method getter, Object objetoAtual) throws IllegalAccessException, InvocationTargetException {
Object objetoRetornado;
objetoRetornado = getter.invoke(objetoAtual);
return objetoRetornado;
}
/**
* Método responsável por recuperar o valor getter do método passado como parâmetro, se o retorno for igual a <code>null</code> é retornado uma nova instância do objeto de retorno
*
* @param getter
* método que sera invocado para retornar o valor
* @param objetoAtual
* objeto que contem o método
* @return valor do método get ou uma nova instância, case retorno seja igual a <code>null</code>
* @throws Exception
* se o método getter do parâmetro não existir no objeto atual
*/
public static Object recuperaValorDeMetodoGetNotNull(Method getter, Object objetoAtual) throws Exception {
Object objetoRetornado;
if (objetoAtual instanceof Set) {
Set colecao = (Set) objetoAtual;
if (!colecao.isEmpty()) {
objetoAtual = (colecao.toArray()[0]);
}
}
objetoRetornado = getter.invoke(objetoAtual);
if (Set.class.isAssignableFrom(getter.getReturnType())) {
Class tipoGenerico = recuperaTipoDeParametroGenericosEmRetornoDeMetodos(getter);
Set objetoRetornadoSet = new HashSet();
objetoRetornadoSet.add(tipoGenerico.newInstance());
objetoRetornado = objetoRetornadoSet;
} else if (objetoRetornado == null) {
objetoRetornado = getter.getReturnType().newInstance();
}
return objetoRetornado;
}
/**
* Método responsável por recuperar o valor getter do atributo passado como parâmetro
*
* @param nomeDoMetodoGet
* nome do método a recuperar o valor
* @param objetoAtual
* objeto que contem o método get
* @return valor do método get
* @throws Exception
* se o método get não existir no objeto
*/
public static Object recuperaValorDeMetodoGet(String nomeDoMetodoGet, Object objetoAtual) throws Exception {
Method getter = recuperaMetodoGetDoObjeto(nomeDoMetodoGet, objetoAtual);
Object objetoRetornado;
objetoRetornado = getter.invoke(objetoAtual);
return objetoRetornado;
}
/**
* Método responsável por recuperar o tipo de retorno do método get.
*
* @param nomeDoAtributo
* nome do atributo a recuperar o get
* @param objetoAtual
* objeto que contem o método get do atributo
* @return retorna o tipo de retorno do método get
* @throws Exception
* se o não existir o getter do atributo informado
*/
public static Class recuperaTipoDeRetornoDoMetodoGet(String nomeDoAtributo, Object objetoAtual) throws Exception {
Class classe = null;
if (nomeDoAtributo.contains(".")) {
String[] nodos = nomeDoAtributo.split("\\.");
String novoCampo = "";
for (int i = 1; i < nodos.length; i++) {
novoCampo = novoCampo + "." + nodos[i];
}
Method getter = null;
getter = recuperaMetodoGetDoObjeto(nodos[0], objetoAtual);
try {
Class<?> returnType = getter.getReturnType();
if (Collection.class.isAssignableFrom(returnType)) {
returnType = recuperaTipoDeParametroGenericosEmRetornoDeMetodos(getter);
}
classe = recuperaTipoDeRetornoDoMetodoGet(novoCampo.substring(1), returnType.newInstance());
} catch (InstantiationException e) {
log.error("Erro ao recuperar tipo de retorno do método Get", e);
}
} else {
classe = recuperaMetodoGetDoObjeto(nomeDoAtributo, objetoAtual).getReturnType();
}
return classe;
}
/**
* Método responsável por recuperar o tipo de retorno do método get. Se o atributo for complexo o método é chamado recursivamente para varrer todo o grafo para recuperar o retorno do atributo
*
* @param nomeDoAtributo
* nome do atributo a recuperar o get
* @param objetoAtual
* objeto que contem o método get do atributo
* @return retorna o tipo de retorno do método get
* @throws Exception
* se o não existir o getter do atributo informado
*/
public static Class recuperaTipoDeRetornoDoMetodoGetNoGrafo(String nomeDoAtributo, Object objetoAtual) throws Exception {
Class classe = null;
if (nomeDoAtributo.contains(".")) {
String[] nodos = nomeDoAtributo.split("\\.");
String novoCampo = "";
for (int i = 1; i < nodos.length; i++) {
novoCampo = novoCampo + "." + nodos[i];
}
Method getter = null;
getter = recuperaMetodoGetDoObjeto(nodos[0], objetoAtual);
Class<?> returnType = null;
try {
returnType = getter.invoke(objetoAtual).getClass();
log.info("Recuperou o tipo de retorno do método através da instancia");
} catch (Exception e) {
log.warn("Não foi possÃvel recuperar tipo de retorno do método através da instancia. Vai tentar pelo tipo declarado estaticamente no metodo");
returnType = getter.getReturnType();
}
if (Collection.class.isAssignableFrom(returnType)) {
returnType = recuperaTipoDeParametroGenericosEmRetornoDeMetodos(getter);
}
classe = recuperaTipoDeRetornoDoMetodoGetNoGrafo(novoCampo.substring(1), returnType.newInstance());
} else {
classe = recuperaMetodoGetDoObjeto(nomeDoAtributo, objetoAtual).getReturnType();
}
return classe;
}
public static String recuperaNomeDeMetdoPorClasse(Object object) {
return object.getClass().getSimpleName().substring(0, 1).toLowerCase() + object.getClass().getSimpleName().substring(1);
}
/**
* Método responsável por recuperar todos os atributos da classe informada no parâmetro.
*
* @param object
* classe que se deseja recuperar os atributos
* @return parâmetros da classe
*/
public static String[] recuperaNomeDeAtributosPorClasse(Object object) {
Method[] methods = object.getClass().getMethods();
String[] atributos = new String[methods.length];
for (int i = 0; i < methods.length; i++) {
atributos[i] = methods[i].getName().substring(3, 4).toLowerCase() + methods[i].getName().substring(4);
}
return atributos;
}
/**
* Método responsável por recuperar todos os atributos da classe informada no parâmetro.
*
* @param object
* classe que se deseja recuperar os atributos
* @return parâmetros da classe
*/
public static List<String> recuperaNomeDeAtributosBeansPorClasse(Object object) {
Method[] methods = object.getClass().getMethods();
List<String> atributos = new ArrayList<String>();
for (int i = 0; i < methods.length; i++) {
if (eMetodoGetterBeanPersistencia(methods[i])) {
atributos.add(methods[i].getName().substring(3, 4).toLowerCase() + methods[i].getName().substring(4));
}
}
return atributos;
}
public static void transfereDadosEntreObjetos(Object appBaseVOOrigem, Object appBaseVODestino) throws Exception {
List<String> atributos = recuperaNomeDeAtributosBeansPorClasse(appBaseVOOrigem);
for (String atributo : atributos) {
try {
Method metodoGet = recuperaMetodoGetDoObjeto(atributo, appBaseVOOrigem);
Object valor = recuperaValorDeMetodoGet(metodoGet, appBaseVOOrigem);
if (valor instanceof Collection) {
continue;
/*
* valor = clonaColecao((Collection)valor); atualizarCampoDoObjeto(atributo, appBaseVODestino, valor);
*/} else if (eMetodoGetterBeanPersistencia(metodoGet)) {
atualizarCampoDoObjeto(atributo, appBaseVODestino, valor);
}
} catch (NoSuchMethodException e) {
throw new Exception("Erro ao tranferir dados de objeto para outro: " + e.getMessage());
} catch (IllegalAccessException e) {
throw new Exception("Erro ao tranferir dados de objeto para outro: " + e.getMessage());
} catch (InvocationTargetException e) {
throw new Exception("Erro ao tranferir dados de objeto para outro: " + e.getMessage());
}
}
}
public static Collection clonaColecao(Collection colecaoASerClonada) throws Exception {
Collection colecaoClone = null;
try {
colecaoClone = new HashSet();
Object appBaseVOClone = null;
Object appBaseVOASerClonado = null;
for (Object o : colecaoASerClonada) {
appBaseVOASerClonado = (Object) o;
appBaseVOClone = appBaseVOASerClonado.getClass().newInstance();
transfereDadosEntreObjetos(appBaseVOASerClonado, appBaseVOClone);
colecaoClone.add(appBaseVOClone);
}
} catch (InstantiationException e) {
throw new Exception("Erro ao tentar clonar colecao", e);
} catch (IllegalAccessException e) {
throw new Exception("Erro ao tentar clonar colecao", e);
}
return colecaoClone;
}
public static Class[] getGenericTypes(Class<?> clazz) {
TypeVariable[] typeVariables = clazz.getTypeParameters();
List<Class> lista = new ArrayList<Class>();
for (TypeVariable variable : typeVariables) {
lista.add((Class) variable.getBounds()[0]);
}
return lista.toArray(new Class[lista.size()]);
}
public static Class[] getGenericTypes2(Class<?> clazz) {
try {
ParameterizedType genericSuperclass = (ParameterizedType) clazz.getGenericSuperclass();
Type[] actualTypeArguments = genericSuperclass.getActualTypeArguments();
Class[] array = new Class[actualTypeArguments.length];
for (int i = 0; i < actualTypeArguments.length; i++) {
Type type = actualTypeArguments[i];
array[i] = (Class) type;
}
return array;
} catch (Exception e) {
throw new RuntimeException("Não foi possÃvel descobrir o tipo genérico da classe " + clazz);
}
}
public static List<Class> obterClassesGenericasDeUmaColecaoLista(Field field) throws ClassNotFoundException {
List<Class> listaRetorno = new ArrayList<Class>();
Type type = field.getGenericType();
if (type instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) type;
for (Type t : pt.getActualTypeArguments()) {
listaRetorno.add(Class.forName(t.toString().replaceAll("class ", "")));
}
}
return listaRetorno;
}
public static <A extends Annotation> A findAnnotation(Method method, Class<A> annotationClass) throws NoSuchMethodException, SecurityException {
A annotation = method.getAnnotation(annotationClass);
if (annotation != null) {
return annotation;
}
Class<?> cl = method.getDeclaringClass();
while (annotation == null) {
cl = cl.getSuperclass();
if (cl == null || cl == Object.class) {
break;
}
try {
Method equivalentMethod = cl.getDeclaredMethod(method.getName(), method.getParameterTypes());
annotation = equivalentMethod.getAnnotation(annotationClass);
} catch (NoSuchMethodException e) {
log.debug("O método findAnnotation da classe Reflexao não encontrou o método {} na classe {}.", method.getName(), cl.getName());
}
}
return annotation;
}
public static List<Method> recuperaMetodosQuePossuemEstaAnotacaoNestaClasse(Class<? extends Annotation> annotationClass, Class cls) {
Method[] methods = cls.getMethods();
List<Method> methodsList = new ArrayList<Method>();
for (Method method : methods) {
try {
if (findAnnotation(method, annotationClass) != null) {
methodsList.add(method);
}
} catch (NoSuchMethodException e) {
log.debug("O método recuperaMetodosQuePossuemEstaAnotacaoNestaClasse da classe Reflexao não encontrou o método {} na classe {}.", method.getName(), cls.getName());
} catch (SecurityException e) {
log.debug("O método recuperaMetodosQuePossuemEstaAnotacaoNestaClasse da classe Reflexao não encontrou o método {} na classe {}. {}", method.getName(), cls.getName(), e.getMessage());
}
}
return methodsList;
}
@SuppressWarnings("unchecked")
public static Enum recuperaEnumPeloOrdinal(Class<Enum> classeDaEnum, int ordinalEnum) {
Object[] array = EnumSet.allOf(classeDaEnum).toArray();
return (Enum) array[ordinalEnum];
}
@SuppressWarnings("unchecked")
public static Enum recuperaEnumPelaString(Class<Enum> classeDaEnum, String stringEnum) {
return Enum.valueOf(classeDaEnum, stringEnum);
}
@SuppressWarnings("unchecked")
public static <T> T recuperarInstanciaSingleton(String classe) {
try {
Class<?> classeSingleton = Class.forName(classe);
Method metodoGetInstance = classeSingleton.getMethod("getInstance");
Object instancia = metodoGetInstance.invoke(null);
return (T) instancia;
} catch (Exception e) {
throw new RuntimeException("Não foi possÃvel instanciar a classe singleton:" + classe);
}
}
}
Então das duas uma:
- ou o framework não funciona;
- ou você está usando a classe do jeito errado, provavelmente errando os parâmetros ao chamar métodos.
Posta o código desse método.
Consegui achar o erro.
Estava chamando o componente errado no front