Boa noite pessoal!
Estou integrando uma applicação vraptor com um client android.
Eu envio uma requisição post com os valores:
event.activity = bla
event.group = bla
event.name = bla
event.data[0].key = key
event.data[0].value = value
event.data[0].type = type
//muitos outros valores.
O que ocorre: antes meu código não tinha o último construtor abaixo, com o List, apenas o primeiro e o segundo.
Assim, o Iogi não estava populando minha lista interna! Só passou a fazê-lo quando eu inclui o terceiro construtor.
Eu percebi pelos logs que o Iogi tenta encontrar o construtor mais adequado de acordo com os parâmetros da requisição, mas está parando quando o faz, e não continua a popular o restante dos parâmetros.
Há uma forma de resolver isso (visto que o terceiro construtor para meu uso não tem sentido)?
Seguem minhas classes e o log do VRaptor
public class Event implements Iterable<EventData> {
private static final int INITIAL_SEND_VALUE = 0;
private String activity;
private String group;
private String name;
private List<EventData> data;
private long registerTime;
private long sendTime = INITIAL_SEND_VALUE;
public Event() {
data = new LinkedList<EventData>();
}
public Event(String activity, String group, String name) {
this();
this.activity = activity;
this.group = group;
this.name = name;
this.registerTime = new Date().getTime();
}
public Event(String activity, String group, String name, List<EventData> data) {
this(activity, group, name);
this.data = data;
}
public Collection<EventData> getData() {
return data;
}
// muitos métodos suprimidos
}
public class EventData {
private String key;
private String value;
private int type;
public EventData() {
}
public EventData(String key, String value, int type) {
this.key = key;
this.value = value;
this.type = type;
}
public String getKey() {
return key;
}
public String getValue() {
return value;
}
public int getType() {
return type;
}
}
Log do VRaptor, com a classe sem o construtor (nesse log dá pra ver que o Iogi ou VRaptor para a inicialização do objeto quando encontra o construtor):
00:24:48,378 DEBUG [VRaptor ] VRaptor received a new request
00:24:48,416 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
00:24:48,417 DEBUG [DefaultResourceTranslator] trying to access /event
00:24:48,420 DEBUG [DefaultResourceTranslator] found resource [DefaultResourceMethod: PrototipoController.event(Event)]
00:24:48,421 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor InstantiateInterceptor
00:24:48,422 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExceptionHandlerInterceptor
00:24:48,423 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor FlashInterceptor
00:24:48,435 DEBUG [IogiParametersProvider] IogiParametersProvider is up
00:24:48,435 DEBUG [LazyInterceptorHandler] Invoking interceptor ParametersInstantiatorInterceptor
00:24:48,435 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for PrototipoController.event(Event) as [event]
00:24:48,441 DEBUG [JstlLocalization ] couldn't find message bundle, creating an empty one
00:24:48,448 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for PrototipoController.event(Event) as [event]
00:24:48,452 DEBUG [IogiParametersProvider] getParametersFor() called with parameters Parameters(Parameter(event.data[3].type -> 3), Parameter(event.name -> pesquisa), Parameter(event.data[4].value -> 1388793600000), Parameter(event.data[0].key -> origem), Parameter(event.sendTime -> 1386123888355), Parameter(event.data[0].value -> RAO), Parameter(event.data[2].type -> 2), Parameter(event.data[2].key -> valor), Parameter(event.data[4].type -> 3), Parameter(event.data[4].key -> data_final), Parameter(event.data[2].value -> 123123), Parameter(event.data[1].key -> destino), Parameter(event.group -> group), Parameter(event.data[0].type -> 2), Parameter(event.data[3].value -> 1388793600000), Parameter(event.data[1].value -> GRU), Parameter(event.activity -> MainActivity), Parameter(event.registerTime -> 1386123887683), Parameter(event.data[5].value -> 94), Parameter(event.data[5].type -> 1), Parameter(event.data[3].key -> data_inicial), Parameter(event.data[5].key -> numero_resultados), Parameter(event.data[1].type -> 2)) and targets [Target(name=event, type=class br.com.prototipo.prototipoapi.Event)].
00:24:48,456 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for Event() as []
00:24:48,457 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for Event(String, String, String) as [activity, group, name]
00:24:48,465 DEBUG [ParametersInstantiatorInterceptor] Parameter values for [DefaultResourceMethod: PrototipoController.event(Event)] are [[MainActivity - group - pesquisa]]
00:24:48,466 DEBUG [LazyInterceptorHandler] Invoking interceptor DeserializingInterceptor
00:24:48,466 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for PrototipoController.event(Event) as [event]
00:24:48,469 DEBUG [IogiParametersProvider] getParametersFor() called with parameters Parameters(Parameter(event.data[3].type -> 3), Parameter(event.name -> pesquisa), Parameter(event.data[4].value -> 1388793600000), Parameter(event.data[0].key -> origem), Parameter(event.sendTime -> 1386123888355), Parameter(event.data[0].value -> RAO), Parameter(event.data[2].type -> 2), Parameter(event.data[2].key -> valor), Parameter(event.data[4].type -> 3), Parameter(event.data[4].key -> data_final), Parameter(event.data[2].value -> 123123), Parameter(event.data[1].key -> destino), Parameter(event.group -> group), Parameter(event.data[0].type -> 2), Parameter(event.data[3].value -> 1388793600000), Parameter(event.data[1].value -> GRU), Parameter(event.activity -> MainActivity), Parameter(event.registerTime -> 1386123887683), Parameter(event.data[5].value -> 94), Parameter(event.data[5].type -> 1), Parameter(event.data[3].key -> data_inicial), Parameter(event.data[5].key -> numero_resultados), Parameter(event.data[1].type -> 2)) and targets [Target(name=event, type=class br.com.prototipo.prototipoapi.Event)].
00:24:48,470 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for Event() as []
00:24:48,470 DEBUG [ParanamerNameProvider] Found parameter names with paranamer for Event(String, String, String) as [activity, group, name]
00:24:48,471 DEBUG [DeserializingInterceptor] Deserialized parameters for [DefaultResourceMethod: PrototipoController.event(Event)] are [[MainActivity - group - pesquisa]]
00:24:48,471 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ExecuteMethodInterceptor
00:24:48,471 DEBUG [ExecuteMethodInterceptor] Invoking PrototipoController.event(Event)
Saved: [MainActivity - group - pesquisa]
00:24:48,776 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ForwardToDefaultViewInterceptor
00:24:48,776 DEBUG [ForwardToDefaultViewInterceptor] forwarding to the dafault page for this logic
00:24:48,779 DEBUG [DefaultPageResult ] forwarding to /WEB-INF/jsp/prototipo/event.jsp
00:24:48,779 DEBUG [VRaptor ] VRaptor received a new request
00:24:48,780 DEBUG [ToInstantiateInterceptorHandler] Invoking interceptor ResourceLookupInterceptor
00:24:48,780 DEBUG [DefaultResourceTranslator] trying to access /WEB-INF/jsp/prototipo/event.jsp
00:24:48,780 DEBUG [VRaptor ] VRaptor ended the request
00:24:48,780 DEBUG [VRaptor ] VRaptor ended the request