Excecao lançada no vraptor java.lang.IllegalArgumentException

17 respostas
boneazul

Direto estou passando por essa exception no vraptor , não sei o motivo pela qual ela está sendo lançada e como tratá-la para que não aconteca mais…aparentemente ela nao quebra a aplicação mas é lançada algumas vezes…

br.com.caelum.vraptor.InterceptionException: java.lang.IllegalArgumentException: wrong number of arguments at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:77) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.webtia.contrato.interceptors.AcessInterceptor.intercept(AcessInterceptor.java:39) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.webtia.contrato.interceptors.NoCacheInterceptor.intercept(NoCacheInterceptor.java:35) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.webtia.contrato.interceptors.AuthenticationInterceptor.intercept(AuthenticationInterceptor.java:55) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.webtia.contrato.interceptors.ErrorInterceptor.intercept(ErrorInterceptor.java:36) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.util.hibernate.HibernateTransactionInterceptor.intercept(HibernateTransactionInterceptor.java:45) at br.com.caelum.vraptor.core.InstantiatedInterceptorHandler.execute(InstantiatedInterceptorHandler.java:47) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.interceptor.InterceptorListPriorToExecutionExtractor.intercept(InterceptorListPriorToExecutionExtractor.java:46) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:81) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:67) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56) at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:65) at br.com.caelum.vraptor.core.DefaultRequestExecution.execute(DefaultRequestExecution.java:70) at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92) at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:56) at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:636) Caused by: java.lang.IllegalArgumentException: wrong number of arguments at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:616) at br.com.caelum.vraptor.interceptor.ExecuteMethodInterceptor.intercept(ExecuteMethodInterceptor.java:57) ... 55 more

e olhando a stack nao vi chamada a nenhum código relevante que seja da minha aplicação…

17 Respostas

G

Você precisa verificar se a versão do vraptor que você está usando é compatível com os jars auxiliares que você tem. Um exemplo de imcompatibilidade de versões é com o paranamer, onde a versão mais atual do vraptor só funciona com a 1.5+.

boneazul

Bom to usando a versao do vraptor 3.1.2 e o paranamer na versao 1.5 …tem versões mais novas disponíveis??

G

Na verdade o que falei do paranamer é apenas uma sugestão. Atualmente eu estou usando o snapshot do meu fork do vraptor com paranamer 2.2, mas a versão correta a ser usada no 3.1.2 é o paranamer 1.5.

O ideal é você analisar as versões dos jars que você possui e comparar com as disponibilizadas pelo vraptor. Penso que nesse seu caso pode haver algum var incompatível. Se precisar, poste aqui as libs que você tem.

Esse seu erro pode estar acontecendo porque alguma lib está tentando chamar um método que provavelmente foi alterado a assinatura, não tenho certeza disso.

boneazul

garcia-jj:
Na verdade o que falei do paranamer é apenas uma sugestão. Atualmente eu estou usando o snapshot do meu fork do vraptor com paranamer 2.2, mas a versão correta a ser usada no 3.1.2 é o paranamer 1.5.

O ideal é você analisar as versões dos jars que você possui e comparar com as disponibilizadas pelo vraptor. Penso que nesse seu caso pode haver algum var incompatível. Se precisar, poste aqui as libs que você tem.

Esse seu erro pode estar acontecendo porque alguma lib está tentando chamar um método que provavelmente foi alterado a assinatura, não tenho certeza disso.

Bom em todo caso vo baixar agora de novo e substituir tudo que tenho pelas que vier no download pra ver se o erro ainda persiste…

boneazul
br.com.caelum.vraptor.InterceptionException: ClientAbortException: java.net.SocketException: Broken pipe at

Outra exception que é sempre lançada tb quando o cara clica em cancelar um download nos componentes do tipo…

trecho do metodo que executa o dowload…

public Download view(DocumentoContrato documentocontrato) throws IOException{
			DocumentoContrato docContrato = daoDocumentoContratoDao.load(documentocontrato.getId());
			File file = new File(docBase+docContrato.getContrato().getId()+"\\"+docContrato.getUrl());
		    String filename = docContrato.getTitulo() + "." + docContrato.getExtensao();
		    String contentType="application/binary";
		    return new FileDownload(file, contentType, filename); 
	}
Lucas_Cavalcanti

boneazul, em que condições acontece o primeiro erro? num redirect? num forward? numa requisição normal?

quais métodos estão envolvidos no request?

no download, qual é o tamanho do arquivo que vc tah mandando? o arquivo existe?

Luiz_Aguiar

Por favor altere o título do seu tópico (editando a primeira mensagem) e coloque algo que tenha ligação com sua dúvida.

Obrigado.

boneazul

Lucas Cavalcanti:
boneazul, em que condições acontece o primeiro erro? num redirect? num forward? numa requisição normal?

quais métodos estão envolvidos no request?

no download, qual é o tamanho do arquivo que vc tah mandando? o arquivo existe?

Bom vamos lá…o primeiro erro “br.com.caelum.vraptor.InterceptionException: java.lang.IllegalArgumentException: wrong number of arg” acontece numa requisição normal…a unica diferenca é q ela é chamada em um src de iframe…dentro dakelas tabs do jquery ui…vai ai os códigos…se quiser recriar…

jsp das tabs

<div id="tabs">
			<ul>
					<li><a href="#tabs-1">Contrato</a></li>
					<li><a href="#tabs-2">Documentos</a></li>
					<li><a href="#tabs-3">Histórico</a></li>
					<li><a href="#tabs-4">Seguro garantia</a></li>
					<li><a href="#tabs-5">Itens gerenciaveis</a></li>
					<li><a href="#tabs-6">Termos aditivos</a></li>
					<li><a href="#tabs-7">Extrato IRRF</a></li>
			</ul>
				<div id="tabs-1" style="height:800px">
					<iframe src='<c:url value="/contrato/edit/${contrato.id}"/>' class="grid-iframe" frameborder="0"></iframe>
				</div>
			
				<div id="tabs-2" style="height:800px">
					<iframe src='<c:url value="/documentocontrato/list/${contrato.id}"/>' class="grid-iframe" frameborder="0"></iframe>
				</div>
			
				<div id="tabs-3" style="height:800px">
					<iframe src='<c:url value="/historicocontrato/list/${contrato.id}"/>' class="grid-iframe" frameborder="0"></iframe>
				</div>
			
				<div id="tabs-4" style="height:800px">
					<iframe src='<c:url value="/segurocontrato/list/${contrato.id}"/>' class="grid-iframe" frameborder="0"></iframe>
				</div>
			
				<div id="tabs-5" style="height:800px">
					<iframe src='<c:url value="/itemgerenciavel/list/${contrato.id}"/>' class="grid-iframe" frameborder="0"></iframe>
				</div>
			
				<div id="tabs-6" style="height:800px">
					<iframe src='<c:url value="/termoaditivo/list/${contrato.id}"/>' class="grid-iframe" frameborder="0"></iframe>
				</div>
			
				<div id="tabs-7" style="height:800px">
					<iframe src='<c:url value="/contrato/detalhes/irrf/${contrato.id}"/>' class="grid-iframe" frameborder="0"></iframe>
				</div>
		</div>
		<script>
                      $('#tabs').tabs({
			select: function(event, ui) { 
				var src=$('iframe', ui.panel).attr('src');
				$('iframe', ui.panel).attr('src',src);
			},
			fx: { opacity: 'toggle' }
		});
               </script>

e o controller…

package br.com.webtia.contrato.controllers;

import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collections;

import org.joda.time.DateTime;
import org.joda.time.Months;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.view.Results;
import br.com.webtia.contrato.annotations.Paginated;
import br.com.webtia.contrato.annotations.PutAcessInView;
import br.com.webtia.contrato.annotations.Rules;
import br.com.webtia.contrato.annotations.VerifyAccess;
import br.com.webtia.contrato.daos.CategoriaContratoDao;
import br.com.webtia.contrato.daos.CategoriaItemGerenciavelDao;
import br.com.webtia.contrato.daos.ConfiguracaoDao;
import br.com.webtia.contrato.daos.ContratoDao;
import br.com.webtia.contrato.daos.ContratoHistoricoDao;
import br.com.webtia.contrato.daos.ContratoUnidadeDao;
import br.com.webtia.contrato.daos.EmailPanelDao;
import br.com.webtia.contrato.daos.FornecedorDao;
import br.com.webtia.contrato.daos.FundamentacaoDao;
import br.com.webtia.contrato.daos.IndiceContratoDao;
import br.com.webtia.contrato.daos.ItemGerenciavelDao;
import br.com.webtia.contrato.daos.ModalidadeLicitacaoDao;
import br.com.webtia.contrato.daos.NotaFiscalDao;
import br.com.webtia.contrato.daos.TermoAditivoDao;
import br.com.webtia.contrato.integration.Cidade;
import br.com.webtia.contrato.integration.Unidade;
import br.com.webtia.contrato.models.Contrato;
import br.com.webtia.contrato.models.ContratoUnidade;
import br.com.webtia.contrato.models.EmailPanel;
import br.com.webtia.contrato.models.Fornecedor;

@Resource
@Path("contrato")
public class ContratoController {

	 atributos.....

	 public ContratoController(Result result,FornecedorDao daoFornecedor,
			 ConfiguracaoDao daoConfiguracao,CategoriaContratoDao daoCategoriaContrato,
			IndiceContratoDao daoIndiceContrato,CategoriaItemGerenciavelDao daoCategoriaItemGerenciavel,
			 FundamentacaoDao daoFundamentacao,ContratoHistoricoDao daoHistorico,ContratoUnidadeDao daoContratoUnidade,
			 ContratoDao daoContrato,ModalidadeLicitacaoDao daoModalidadeLicitacao,EmailPanelDao daoEmailPanel,
			 NotaFiscalDao daoNotaFiscal,ItemGerenciavelDao daoItemGerenciavel,TermoAditivoDao daoTermoAditivo){
		construtor...
	 }

	 @VerifyAccess
	 public void form(){
		this.result.include("porcentagemDefault",daoConfiguracao.getVariableByModuleName("CONTRATO","CONTRATO_PORCENTAGEM_SEGURO_GARANTIA"));
		this.result.include("categoriaItemGerenciavelList",daoCategoriaItemGerenciavel.listAll(null,null));
		this.result.include("indiceContratoList",daoIndiceContrato.listAll());
		this.result.include("fundamentacaoList",daoFundamentacao.listAll(null,null));
		this.result.include("categoriaContratoList",daoCategoriaContrato.listAll(null,null));
		this.result.include("fornecedorList",daoFornecedor.listAll(null,null));
		this.result.include("modalidadeLicitacaoList", daoModalidadeLicitacao.listAll(null,null));
	 }

	 @Path("edit/{contrato.id}")
	  @VerifyAccess
	 public void edit(Contrato contrato){
		 	result.include("contrato", daoContrato.load(contrato.getId()));
		 	result.include("countItemGerenciavel", daoItemGerenciavel.count(contrato));
		 	result.forwardTo(this).form();
	 }
}

O erro acontece no edit…que é chamado pelo iframe da aba…

acontece em mais outro varios pontos que seguem a mesma ideia…copo disse nao chega a tomar a exception…pois parece que dá algo errado e por algum motivo ela se recupera…

@VerifyAccess
	package br.com.webtia.contrato.controllers;

import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.apache.commons.io.IOUtils;
import org.terracotta.agent.repkg.de.schlichtherle.io.FileOutputStream;

import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.Download;
import br.com.caelum.vraptor.interceptor.download.FileDownload;
import br.com.caelum.vraptor.interceptor.multipart.UploadedFile;
import br.com.caelum.vraptor.view.Results;
import br.com.webtia.contrato.annotations.Paginated;
import br.com.webtia.contrato.annotations.PutAcessInView;
import br.com.webtia.contrato.annotations.Rules;
import br.com.webtia.contrato.annotations.VerifyAccess;
import br.com.webtia.contrato.daos.ConfiguracaoDao;
import br.com.webtia.contrato.daos.ContratoDao;
import br.com.webtia.contrato.daos.ContratoHistoricoDao;
import br.com.webtia.contrato.daos.DocumentoContratoDao;
import br.com.webtia.contrato.daos.TipoDocumentoDao;
import br.com.webtia.contrato.models.Contrato;
import br.com.webtia.contrato.models.DocumentoContrato;

@Resource
@Path("documentocontrato")
public class DocumentoContratoController {
	private DocumentoContratoDao daoDocumentoContratoDao;
	private TipoDocumentoDao daoTipoDocumento;
	private ContratoDao daoContratoDao;
	private ContratoHistoricoDao daoHistorico;
	private Result result;
	private ConfiguracaoDao daoConfiguracao;
	private String docBase;
	private String urlDocBase;

	@SuppressWarnings("deprecation")
	public DocumentoContratoController(Result result,
			TipoDocumentoDao daoTipoDocumento,
			DocumentoContratoDao daoDocumentoContratoDao,
			HttpServletRequest request,
			ContratoHistoricoDao daoHistorico,
			ContratoDao daoContratoDao,ConfiguracaoDao daoConfiguracao) {
		this.result = result;
		this.daoTipoDocumento = daoTipoDocumento;
		this.daoDocumentoContratoDao = daoDocumentoContratoDao;
		this.daoContratoDao=daoContratoDao;
		this.daoHistorico=daoHistorico;
		docBase=request.getRealPath("/")+"documentos\\";
		urlDocBase=request.getContextPath()+"/documentocontrato/view/";
		this.daoConfiguracao=daoConfiguracao;
	}

	@VerifyAccess
	@Path("list/{contrato.id}")
	@Paginated(pageSize = 50,tableId="documentocontrato")
	 @PutAcessInView(urls = { 
			 @Rules(var = "canInsert", url = "/documentocontrato/form/*"),
			 @Rules(var = "canEdit", url = "/documentocontrato/edit/*"),
			 @Rules(var = "canDelete", url = "/documentocontrato/delete/*")
	 })
	public void list(Contrato contrato) {
		this.result.include("size",daoDocumentoContratoDao.count(contrato));
		this.result.include("documentoContratoList",daoDocumentoContratoDao.listAll(contrato,(Integer)result.included().get("start"),(Integer)result.included().get("pageSize")));
		this.result.include("contrato",daoContratoDao.load(contrato.getId()));
	}
	
	@VerifyAccess
	@Path("view/{documentocontrato.id}")
	public Download view(DocumentoContrato documentocontrato) throws IOException{
			DocumentoContrato docContrato = daoDocumentoContratoDao.load(documentocontrato.getId());
			File file = new File(docBase+docContrato.getContrato().getId()+"\\"+docContrato.getUrl());
		    String filename = docContrato.getTitulo() + "." + docContrato.getExtensao();
		    String contentType="application/binary";
		    return new FileDownload(file, contentType, filename); 
	}

	
	
	
	
	
}

o download acontece nesse documentocontrato/view/id problema do clienteabort quando clica no cancelar do download o documento existe é um pdf de 500kb…
se precisar de mais código é so pedir…

G

boneazul:
br.com.caelum.vraptor.InterceptionException: ClientAbortException: java.net.SocketException: Broken pipe at

Outra exception que é sempre lançada tb quando o cara clica em cancelar um download nos componentes do tipo…

Isso não tem como alterar. Isso é previsto na spec do protocolo, e o webserver apenas te avisa que o usuário cancelou o download. Você pode ignorar o erro sem problemas ou trata-lo com um exception handler.

boneazul

garcia-jj:
boneazul:
br.com.caelum.vraptor.InterceptionException: ClientAbortException: java.net.SocketException: Broken pipe at

Outra exception que é sempre lançada tb quando o cara clica em cancelar um download nos componentes do tipo…

Isso não tem como alterar. Isso é previsto na spec do protocolo, e o webserver apenas te avisa que o usuário cancelou o download. Você pode ignorar o erro sem problemas ou trata-lo com um exception handler.

beleza vo colocar em um handler entao essa exceção para nao mostrar na tela…e colocar um log no lugar…

Lucas_Cavalcanti

o problema é que vc faz várias requisições ao mesmo tempo, com forwards no meio delas…

o container deve estar misturando as requisições (o vraptor usa um escopo flash pra fazer os forwards e redirects, e qdo tem requisições “simultâneas” ele pode pegar o parâmetro errado do flash…

já tem um bug reportado disso, vou tentar corrigir assim que possível…

boneazul

Lucas Cavalcanti:
o problema é que vc faz várias requisições ao mesmo tempo, com forwards no meio delas…

o container deve estar misturando as requisições (o vraptor usa um escopo flash pra fazer os forwards e redirects, e qdo tem requisições “simultâneas” ele pode pegar o parâmetro errado do flash…

já tem um bug reportado disso, vou tentar corrigir assim que possível…

tranquilo cara…enquanto isso eu trato aki com um handler…abraços…

G

Como eu te disse, é apenas um aviso que o usuário cancelou o download. Não é um erro propriamente dito. Na minha opinião não há necessidade de tratar isso. Mas a escolha é sua. :thumbup:

Como assim? É quase impossível que você misture duas requisições.

boneazul

Como eu te disse, é apenas um aviso que o usuário cancelou o download. Não é um erro propriamente dito. Na minha opinião não há necessidade de tratar isso. Mas a escolha é sua. :thumbup:

Como assim? É quase impossível que você misture duas requisições.

Entao cara pelo que eu fui verificar aki não sei se ajuda…eu descobri que o cara estava dando duple clique na aba …e a cada clique eu mando dar um reload no src inicial do iframe…nesses casos realmente é bem provavel que esteja recebendo 2 requisições muitos proximas ou quase ao mesmo se nao for ao mesmo instante…do mesmo cliente…no caso em que quando é dado um clique e o abençoado do cliente espera carregar o erro nao aparece…eu vo melhorar a parte visual pra travar a aba no primeiro clique evitando assim o duplo clique…mas mesmo assim acho q o bug tem que ser analisado …

abraços…

eu tenho que tratar cara…pq a minha aplicação envia email quando qualquer erro é lançado…e acabo recebendo email desnecessário…

alias como ficou akele negocio do exception handler do vraptor???

pois hoje faço com um interceptor que ta meio porquinho…

package br.com.webtia.contrato.interceptors;

import java.io.PrintWriter;
import java.io.StringWriter;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;

import br.com.caelum.vraptor.InterceptionException;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.core.InterceptorStack;
import br.com.caelum.vraptor.interceptor.Interceptor;
import br.com.caelum.vraptor.resource.ResourceMethod;
import br.com.caelum.vraptor.view.Results;
import br.com.webtia.contrato.controllers.GeneralController;
import br.com.webtia.contrato.util.SendMail;

public class ErrorInterceptor implements Interceptor {
	private Result result;
	private HttpServletRequest request;
	private static Logger logger=Logger.getLogger(ErrorInterceptor.class);

	public ErrorInterceptor(Result result, HttpServletRequest request) {
		this.request = request;
		this.result = result;
	}

	public boolean accepts(ResourceMethod method) {
		return true;
	}

	public void intercept(InterceptorStack stack, ResourceMethod method,
			Object resourceInstance) {
		try {
			stack.next(method, resourceInstance);
		} catch (InterceptionException i){
			if(i.getMessage().contains("java.lang.IllegalArgumentException: wrong number of arguments")||i.getMessage().contains("java.lang.IllegalArgumentException: argument type mismatch")) {
				logger.info("IllegalArgumentException => "+request.getRequestURL()+" => "+i.getMessage());
				result.redirectTo(GeneralController.class).reload(request.getRequestURL().toString());
			}
			else if(i.getMessage().contains("ClientAbortException")) logger.info("ClientAbortException => "+request.getRequestURL()+" => "+i.getMessage());
			else {
				PrintWriter p  = null;
				try {
					StringWriter w = new StringWriter();
					p=new PrintWriter(w);
					i.printStackTrace(p);
					SendMail.sendMail("email","email",
							"Erro execução Contrato", "URL : "
									+ request.getRequestURL() + "</br>"
									+ w.toString());
				}  catch (Exception e1) {
					e1.printStackTrace();
				} finally {
					if (p!= null) p.close();
				} 
				result.use(Results.logic()).redirectTo(GeneralController.class)
						.error();
			}
			
		} 
	}
}
G

boneazul, quando ao duplo clique acho dá para você criar um interceptor que valida um token, assim como tinha no struts1.

O Exception Handler tá andando, mas um pouco lento, já que estou com o tempo bem curto aqui na empresa. Esse final de semana quero ver se finalizo ele.

Abraços

G

boneazul, sugiro você remover esses emails do código fonte disponibilizado aqui, evitando que os spammers façam a festa.

boneazul

feito…esqueci de editar esses trechos

Criado 11 de junho de 2010
Ultima resposta 15 de jun. de 2010
Respostas 17
Participantes 4