Usando joda-time no vraptor estou com esse problema abaixo.
Pelo que noto aqui o “joda converter” está sendo registrado:
INFO: 16:28:54 INFO (PicoComponentRegistry.java:97) - Class being registered as @RequestScoped, since there is no Scope annotation class br.com.caelum.vraptor.converter.jodatime.LocalDateConverter
INFO: 16:28:54 DEBUG (PicoComponentRegistry.java:99) - Registering br.com.caelum.vraptor.converter.jodatime.LocalDateConverter as a request component
INFO: 16:28:54 DEBUG (PicoComponentRegistry.java:76) - Registering br.com.caelum.vraptor.converter.jodatime.LocalTimeConverter with br.com.caelum.vraptor.converter.jodatime.LocalTimeConverter
INFO: 16:28:54 INFO (PicoComponentRegistry.java:97) - Class being registered as @RequestScoped, since there is no Scope annotation class br.com.caelum.vraptor.converter.jodatime.LocalTimeConverter
INFO: 16:28:54 DEBUG (PicoComponentRegistry.java:99) - Registering br.com.caelum.vraptor.converter.jodatime.LocalTimeConverter as a request component
A mensagem de erro:
INFO: 16:32:06 DEBUG (AsmBasedTypeCreator.java:117) - Fields: [private esim.model.dto.YearDTO YearController$store$1614024553$1.Year_]
INFO: 16:32:06 DEBUG (CacheBasedTypeCreator.java:55) - cached generic type for method {DefaultResourceMethod: esim.web.controller.management.YearController.store}
INFO: 16:32:06 DEBUG (OgnlParametersProvider.java:140) - [b]Applying year.startDate with [01/01/2001][/b]
INFO: 16:32:06 WARN (OgnlParametersProvider.java:162) - [b]unable to parse expression 'year.startDate'ognl.OgnlException: startDate[/b] [br.com.caelum.vraptor.VRaptorException: Unable to find converter for org.joda.time.LocalDate]
at ognl.ObjectPropertyAccessor.setPossibleProperty(ObjectPropertyAccessor.java:103)
at ognl.ObjectPropertyAccessor.setProperty(ObjectPropertyAccessor.java:162)
at ognl.OgnlRuntime.setProperty(OgnlRuntime.java:2225)
at ognl.ASTProperty.setValueBody(ASTProperty.java:127)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:279)
at ognl.ASTChain.setValueBody(ASTChain.java:227)
at ognl.SimpleNode.evaluateSetValueBody(SimpleNode.java:220)
at ognl.SimpleNode.setValue(SimpleNode.java:279)
at ognl.Ognl.setValue(Ognl.java:737)
at ognl.Ognl.setValue(Ognl.java:783)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createViaOgnl(OgnlParametersProvider.java:142)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createRoot(OgnlParametersProvider.java:116)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:92)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:71)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:45)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:59)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:42)
A classe que recebe os parametros:
[code]public final class YearDTO
implements Serializable {
private Integer id;
private LocalDate startDate;
}[/code]
Além disso usando o pico para injeção e os jars estão no classpath.
Isso é um bug mesmo =(
pra contornar o bug, crie as classes:
@Convert(LocalDate.class)
public class MeuLocalDateConverter extends LocalDateConverter {
}
@Convert(LocalTime.class)
public class MeuLocalTimeConverter extends LocalTimeConverter {
}
o problema é que o registro dos converters do Joda time é opcional… e apesar dos converters terem sido registrados no pico, não foram adicionado na coleção de converters… =(
no Spring isso funciona normalmente… só no pico que dá esse problema…
vou corrigir isso
[]'s
ou melhor: crie a seguinte classe:
@Component
@ApplicationScoped
public class CustomConverters extends DefaultConverters {
public CustomConverters() {
super();
register(LocalDateConverter.class);
register(LocalTimeConverter.class);
}
}
lucas
creio que os converted de joda time nao devam ser opcionais, e sim entrar como defaults, que acha?
garcia, e sua opiniao?
Paulo, na documentação diz que o joda é carregado apenas se os jars estiverem no classpath. Creio é a melhor opção, assim como é no hibernate. Atualmente não é assim que funciona? Penso que deixar padrão força o projeto ter joda.
Uma coisa que pensei outro dia, analisando a dependencia do commons-file-upload por causa do converter para upload de arquivos seria interessante ter uma forma de eu configurar o que eu quero subir. Assim como é para quando eu quero alterar o comportamento padrão do PathResolver basta eu escrever o meu path resolver.
Lucas, como há bugs em relação ao pico, hein? Estou usando ele porque o spring é muito grande e possui dependencias. Já que minha aplicação é only-web, preferi algo bem mais light.
Quanto ao joda… tenho nesse bean duas propriedades LocalDate. Notei que a primeira vez ele injeta, na segunda vez não. Então a exception é lançada. Vou fazer mais uns debugs alí.
o PicoProvider tem mais bugs que o SpringProvider pq algumas coisas a gente tem que fazer na mão com o pico, e o spring já faz pra gente…
a regra é simples, qto mais código, mais bugs 
e tem mais código da parte do VRaptor no Pico que no Spring…
eu já corrigi esse bug, de qqer forma, se quiser baixar a versão snapshot já vai estar correto
[]'s
Lucas, agora relendo meu post, deixe-me explicar melhor, pois acho que causei um mal entendido. Os bugs que me referia seria quanto ao Pico, e não na bridge entre vraptor e Pico.
Abraços
ah… sem problemas…
desculpe se eu fui um pouco mal educado…
quanto ao pico ser menor, não é tão verdade…
se você usar o spring só como DI provider, vc só precisa do spring-core.jar, não precisa
daquele monte de complexidade (e poder) que o spring tem.
se você usar o pico como DI provider, você precisa do Pico, do reflections-api pra fazer
classpath scanning, e o reflections-api depende de mais uns 5 projetos…
sem contar que se você quiser no futuro usar qualquer coisa do spring, você consegue fazer
diretamente,
acho que vale a pena deixar com o spring como Provider…
[]'s
Lucas, coloquei o spring-core apenas. Porém creio que eu precise de mais alguns módulos:
Caused by: java.lang.ClassNotFoundException: org.springframework.web.context.request.RequestContextListener
at com.sun.enterprise.loader.EJBClassLoader.findClassData(EJBClassLoader.java:738)
at com.sun.enterprise.loader.EJBClassLoader.findClass(EJBClassLoader.java:628)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
... 87 more
Há como subir o spring sem o web-context? Se bem que pensando, preciso do módulo web para trabalhar com sessions e afins, correto? Ou o próprio vraptor cuida disso?
usa o jar do spring que vem com o blank-project…
e não, não precisa do módulo web do Spring… a menos que vc precise de algo muito específicodo spring…
pelo menos o blank-project não precisa dele, nem os projetos que a gente está desenvolvendo com o vraptor
[]s
Lucas, o jar que vem com o vraptor vem com todos os módulos do spring all-in-one. Tive que colocar os jars: aopalliance.jar, aspectjrt.jar, spring-aop.jar, spring-beans.jar, spring-context.jar, spring-core.jar, spring-web.jar. Ou seja, praticamente a mesma coisa que simplesmente colocar o spring-all.jar.
Migrando para o SpringProvider, quais os jars posso remover junto com o pico?
Abraços
picocontainer…jar
reflections…jar
dom4j…jar
commons-vfs…jar
[quote=lucascs]picocontainer…jar
reflections…jar
dom4j…jar
commons-vfs…jar[/quote]
Removendo essas libs e colocando as libs do spring deu praticamente na mesma, e pelo menos fujo um pouco dos problemas do pico, hehe.
Abraços, e obrigado.