Valeu pela resposta, Lucas! Mas infelizmente não funcionou.
Coloquei alguns sysouts no GambiFilter e observei como o VRaptor está setando os atributos passando por parametro e a ordem dos parametros não parece ter muita alteração. Da a impressão que o VRaptor está ignorando ou reordenando os parametros internamente.
Como ficou meu GambiFilter:
public class GambiFilter implements Filter {
// destroy e init vazios
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) {
try {
chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) req) {
@Override
public Map getParameterMap() {
System.out.println(new TreeMap(super.getParameterMap()));
return new TreeMap(super.getParameterMap());
}
}, res);
} catch (IOException e) {
e.printStackTrace();
} catch (ServletException e) {
e.printStackTrace();
}
}
}
A url que acesso:
http://localhost:8080/ws/orders/save?order.id=123&order.client.username=66&order.vendor.ukey=66666&order.vendor.username=blabla&order.vendor.email=[email removido]&order.client.ukey=66&order.client.name=66&items[0]=component&items[0].ukey=1234&items[0].imageUrl=1234&items[0].deffault=true&token=123&_format=json
Console:
{_format=[Ljava.lang.String;@5e9a94, items[0]=[Ljava.lang.String;@f66abc, items[0].deffault=[Ljava.lang.String;@1d97efc, items[0].imageUrl=[Ljava.lang.String;@1ff323, items[0].ukey=[Ljava.lang.String;@193b022, order.client.name=[Ljava.lang.String;@110b205, order.client.ukey=[Ljava.lang.String;@1178281, order.client.username=[Ljava.lang.String;@78f83a, order.id=[Ljava.lang.String;@1f0cbfb, order.vendor.email=[Ljava.lang.String;@1dfe453, order.vendor.ukey=[Ljava.lang.String;@73b72, order.vendor.username=[Ljava.lang.String;@cfefc0, token=[Ljava.lang.String;@18526aa}
10:27:59,684 DEBUG [OgnlParametersProvider] Applying id with [123]
10:27:59,685 DEBUG [OgnlParametersProvider] Applying vendor.email with [[email removido]]
10:27:59,685 DEBUG [OgnlParametersProvider] Applying vendor.username with [blabla]
10:27:59,686 DEBUG [OgnlParametersProvider] Applying client.name with [66]
10:27:59,686 DEBUG [OgnlParametersProvider] Applying client.ukey with [66]
10:27:59,686 DEBUG [OgnlParametersProvider] Applying vendor.ukey with [66666]
10:27:59,687 DEBUG [OgnlParametersProvider] Applying client.username with [66]
{_format=[Ljava.lang.String;@5e9a94, items[0]=[Ljava.lang.String;@f66abc, items[0].deffault=[Ljava.lang.String;@1d97efc, items[0].imageUrl=[Ljava.lang.String;@1ff323, items[0].ukey=[Ljava.lang.String;@193b022, order.client.name=[Ljava.lang.String;@110b205, order.client.ukey=[Ljava.lang.String;@1178281, order.client.username=[Ljava.lang.String;@78f83a, order.id=[Ljava.lang.String;@1f0cbfb, order.vendor.email=[Ljava.lang.String;@1dfe453, order.vendor.ukey=[Ljava.lang.String;@73b72, order.vendor.username=[Ljava.lang.String;@cfefc0, token=[Ljava.lang.String;@18526aa}
10:27:59,688 DEBUG [OgnlParametersProvider] Applying [0].deffault with [true]
07/12/2011 10:27:59 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [default] in context with path [/ws] threw exception
net.vidageek.mirror.exception.ReflectionProviderException: could not invoke constructor public br.com.models.dtos.Buyable() on class br.com.models.dtos.Buyable
at net.vidageek.mirror.provider.java.PureJavaConstructorReflectionProvider.instantiate(PureJavaConstructorReflectionProvider.java:40)
at net.vidageek.mirror.invoke.ConstructorHandlerByConstructor.withArgs(ConstructorHandlerByConstructor.java:46)
at net.vidageek.mirror.invoke.ConstructorHandlerByArgs.withArgs(ConstructorHandlerByArgs.java:36)
at net.vidageek.mirror.invoke.ConstructorHandlerByArgs.withoutArgs(ConstructorHandlerByArgs.java:32)
at br.com.caelum.vraptor.http.ognl.ListNullHandler.instantiate(ListNullHandler.java:50)
at br.com.caelum.vraptor.http.ognl.ReflectionBasedNullHandler.nullPropertyValue(ReflectionBasedNullHandler.java:59)
at ognl.ASTProperty.getValueBody(ASTProperty.java:118)
at ognl.SimpleNode.evaluateGetValueBody(SimpleNode.java:212)
at ognl.SimpleNode.getValue(SimpleNode.java:236)
at ognl.ASTChain.setValueBody(ASTChain.java:222)
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.OgnlFacade.setValue(OgnlFacade.java:100)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.setProperty(OgnlParametersProvider.java:161)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.createParameter(OgnlParametersProvider.java:133)
at br.com.caelum.vraptor.http.ognl.OgnlParametersProvider.getParametersFor(OgnlParametersProvider.java:85)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.getParametersFor(ParametersInstantiatorInterceptor.java:105)
at br.com.caelum.vraptor.interceptor.ParametersInstantiatorInterceptor.intercept(ParametersInstantiatorInterceptor.java:77)
at br.com.caelum.vraptor.core.LazyInterceptorHandler.execute(LazyInterceptorHandler.java:59)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.interceptors.AuthorizationInterceptor.intercept(AuthorizationInterceptor.java:39)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.InstantiateInterceptor.intercept(InstantiateInterceptor.java:48)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:71)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:56)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:83)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.interceptor.ResourceLookupInterceptor.intercept(ResourceLookupInterceptor.java:69)
at br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:54)
at br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:54)
at br.com.caelum.vraptor.core.EnhancedRequestExecution.execute(EnhancedRequestExecution.java:44)
at br.com.caelum.vraptor.VRaptor$1.insideRequest(VRaptor.java:92)
at br.com.caelum.vraptor.ioc.spring.SpringProvider.provideForRequest(SpringProvider.java:58)
at br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:89)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at br.com.filter.GambiFilter.doFilter(GambiFilter.java:25)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at net.vidageek.mirror.provider.java.PureJavaConstructorReflectionProvider.instantiate(PureJavaConstructorReflectionProvider.java:34)
... 61 more