Duvida com os parâmetros do Vraptor

Olá,

Estou tendo problemas com o preenchimento dos parâmetros de um determinado método, utilizando o VRaptor, a assinatura do método se parece com isso:

@SuppressWarnings("unchecked")
@Path ("/services/gravarContato/{appid}/{sessionid}")
public void gravarContato(String appid, 
	String sessionid,
	int id_usuarioempresa,
	int id_usuario,
	int id_departamento,
	int id_cargo,
	int id_usuariotipo,
	String cd_cpf,
	String cd_sexo,
	Date dt_nascimento)

O problema ocorre com os parâmetros do tipo int, quando informo id_cargo, id_departamento ou id_usuario, a URL alcança o método e tudo funciona perfeitamente, porém, quando informo algum dos outros parâmetros: id_usuarioempresa ou id_usuariotipo, simplesmente não funciona, obtenho o seguinte erro:

br.com.caelum.vraptor.http.InvalidParameterException: unable to instantiate type int
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:154)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createParameter(OgnlParametersProvider.java:122)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:85)

java.lang.IllegalArgumentException: Vraptor does not support this interface or abstract type: int
	br.com.caelum.vraptor.http.ognl.GenericNullHandler.instantiate(GenericNullHandler.java:69)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:152)
	br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createParameter(OgnlParametersProvider.java:122)

Porquê essa situação ocorre? Quando renomeio os parâmetros colocando o “_id” no final, tipo: usuarioempresa_id ou usuariotipo_id e, passando todos, ou, apenas alguns parâmetros, tudo funciona corretamente.

Obrigado.

estranho… habilita o log de debug do vraptor, e posta o resultado do log da requisição que deu problema por favor.

Lucas,

Veja o log:

INFO: Server startup in 2963 ms
01:15:23,925 DEBUG VRaptor:82 - VRaptor received a new request
01:15:24,150 DEBUG ToInstantiateInterceptorHandler:53 - Invoking interceptor ResourceLookupInterceptor
01:15:24,150 DEBUG DefaultResourceTranslator:51 - trying to access /services/gravarContato/FA0C84BD13/1d49446fa4034c1f92fb73c736db6232
01:15:24,156 DEBUG VRaptorRequest:86 - Setting appid with [FA0C84BD13]
01:15:24,156 DEBUG VRaptorRequest:86 - Setting sessionid with [1d49446fa4034c1f92fb73c736db6232]
01:15:24,157 DEBUG DefaultResourceTranslator:61 - found resource [DefaultResourceMethod: ContatoResource.gravarContatoContatoResource.gravarContato(String, String, int, int, int, int, int, String, String, Date, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String)]
01:15:24,272 DEBUG LazyInterceptorHandler:58 - Invoking interceptor ParametersInstantiatorInterceptor
01:15:24,279 DEBUG JstlLocalization:83 - couldn't find message bundle, creating an empty one
01:15:24,280 DEBUG ParanamerNameProvider:51 - Found parameter names with paranamer for ContatoResource.gravarContato(String, String, int, int, int, int, int, String, String, Date, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String, String) as [appid, sessionid, id_usuarioempresa, id_usuario, id_departamento, id_cargo, id_usuariotipo, cd_cpf, cd_sexo, dt_nascimento, ds_email, cd_telefoneddd1, cd_telefonenumero1, cd_telefoneramal1, cd_telefoneddd2, cd_telefonenumero2, cd_telefoneramal2, cd_faxddd, cd_faxnumero, cd_faxramal, cd_celularddd, cd_celularnumero, cd_telresddd, cd_telresnumero, cd_telrecddd, cd_telrecnumero, nm_usuario]
01:15:24,298 DEBUG OgnlParametersProvider:160 - Applying  with [FA0C84BD13]
01:15:24,327 DEBUG OgnlFacade:118 - unable to parse expression ''. Ignoring.
01:15:24,328 DEBUG OgnlParametersProvider:160 - Applying  with [1d49446fa4034c1f92fb73c736db6232]
01:15:24,328 DEBUG OgnlFacade:118 - unable to parse expression ''. Ignoring.
01:15:24,333 DEBUG OgnlParametersProvider:160 - Applying  with [16]
01:15:24,333 DEBUG OgnlFacade:118 - unable to parse expression ''. Ignoring.
23/06/2012 01:15:24 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet default threw exception
br.com.caelum.vraptor.http.InvalidParameterException: unable to instantiate type int
	at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:154)
	at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createParameter(OgnlParametersProvider.java:122)
	at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:85)

a URL passada como exemplo:

http://localhost:8080/teste/services/gravarContato/FA0C84BD13/1d49446fa4034c1f92fb73c736db6232?id_usuarioempresa=16

Obrigado.

descobri qual é o problema…

vc tem três parametros em que um é substring do outro:

id_usuario, id_usuarioempresa e id_usuariotipo…

e o vraptor tem uma lógica que pega todos os parametros do request que começam com o nome do parametro:


(último método)

assim o vraptor se perde…

uma dica: pq vc não recebe já todos esses valores dentro de um objeto? pq receber um por um?

Lucas,

Obrigado pela resposta, o problema era esse mesmo. Irei coloca-los em um objeto, estava apenas fazendo testes para entender como o framework funciona. Uma ultima questão, eu posso utilizado com objetos compostos? Ex: usuario.empresa.id, isso preencheria o id do objeto Empresa que está dentro do objeto Usuario?

Obrigado.

sim, usuario.empresa.id funciona, desde que hajam getters e setters correspondentes.