VRaptor não consegue instanciar inner Enums

8 respostas
Lucas_Cavalcanti

isso parece ser um bug mesmo do VRaptor…

só pra eu conseguir reproduzir, essa classe está dentro de um jar?

8 Respostas

Lucas_Cavalcanti

não consegui reproduzir aqui =(

você tem como reproduzir o bug em um contexto menor, ou pelo menos me explicar melhor qual é o seu ambiente pra eu conseguir reproduzir, por favor?

G

Você mapeou o package no web.xml? O VRaptor só faz scan automatico para classes no WEB-INF/classes. Para classes dentro de um jar é necessário declarar o pacote no web.xml.

G

Esta classe é modelo e não usa anotação nenhuma, seja do VRaptor ou dos steriotypes do Spring.

Por coinscidência, implementei um serializer e marquei como @Deserializes. Ele não detecta esse cara, mesmo mapeando no web.xml um parâmetro de contexto com o nome br.com.caelum.vraptor.packages e adicionando o pacote do meu tipo JsonDeserializer.

Hmm, é verdade, erro meu.

Lucas_Cavalcanti

seufagner, dúvidas:

  • como vc gerou ele? se vc gerou pelo eclipse, vc precisa ter marcado um checkbox chamado “Include directory entries”, senão o VRaptor não consegue scanear os seus conteúdos…

-na requisição que está dando problemas, aparece alguma stacktrace com erros? tenta fazer um System.out.println(XXX.Type.values()), e vê o que aparece.

seufagner

Ola

O Bootstrap do VRaptor não consegue encontrar inner Enums ? Quando coloco-a em um arquivo separado tudo funciona normalmente.

public class Item extends MembaseBucketEntity {

	private static final long serialVersionUID = 1L;

	public enum Type {
		DEFAULT;
	}

	@NotNull
	@Min(1)
	private Integer price = 0;

...

}
java.lang.NoClassDefFoundError: com/gazeus/musiccity/model/item/Item$Type
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:186)
	at br.com.caelum.vraptor.scan.DynamicWebAppBootstrap.configure(DynamicWebAppBootstrap.java:45)
	at br.com.caelum.vraptor.ioc.spring.SpringProvider.start(SpringProvider.java:84)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:110)
	at br.com.caelum.vraptor.VRaptor.init(VRaptor.java:103)
	at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:273)
	at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:254)
seufagner

Oi Lucas, está sim.

seufagner

Claro Lucas.

A classe Enum está em um JAR-core, que por usa vez está no WEB-INF/libs da aplicação web que utiliza a tal inner enum.

As requisições chegam via JSON de um swf e minha resposta é dada no mesmo formato.

Esta é classe de domínio, argumento do método no Controller

public class XXX extends YYY {

	private static final long serialVersionUID = 1L;

	public enum Type {
		SUBWAY, TINY, SMALL, MEDIUM, LARGE, XLARGE;
	}

... 
}

Estou testando via cURL:

curl -d … “xxx.type=SUBWAY&xxx.description=foo” http://localhost:8080/project/xxx/save

Erro:

12:15:01,077 DEBUG [ParametersInstantiatorInterceptor] There are conversion errors: [ValidationMessage{category=type, message=???is_not_a_valid_enum_value???, parameters=null}]

seufagner

Esta classe é modelo e não usa anotação nenhuma, seja do VRaptor ou dos steriotypes do Spring.

Por coinscidência, implementei um serializer e marquei como @Deserializes. Ele não detecta esse cara, mesmo mapeando no web.xml um parâmetro de contexto com o nome br.com.caelum.vraptor.packages e adicionando o pacote do meu tipo JsonDeserializer.

Criado 2 de março de 2011
Ultima resposta 16 de mar. de 2011
Respostas 8
Participantes 3