struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Luis Limas <luiscl...@hotmail.com>
Subject Re: Struts missing parameters
Date Mon, 04 Aug 2014 17:38:00 GMT
An update, the concrete lost-parameters are this ones:

{
    "id":41201,
    "code":"",
    "deleted":0,
    "status":3,
    "description":"BITACORA DE REVISION SEMANAL DE MOLINOS GLENN MILL"
}

This is my entity who's missing parameters:

  * http://codeviewer.org/view/code:4259

I've just noticed that all the misssing parameters belong to 
StandardEntity.java (anotated with @MappedSuperclass)

  * http://codeviewer.org/view/code:425a

I consider this a very important fact, so it seems like somehow 
/JSONUtil.deserialize/ fails at sometimes when tries to deserialize 
@MappedSuperclass (es)

Greetings,

On 04/08/2014 11:37 a. m., Luis Limas wrote:
> Hi everyone,
> I have an issue at JSONInterceptor/ParameterInterceptor (i think), 
> parameteres are being lost (becoming null), im using:
>
>  * Struts2 2.3.16.3
>  * Spring AOP 4.0.2
>  * Tomcat 7.0.34
>  * Dojo 1.8
>
> After many debugging i've concluded that the issue it's inside one of 
> those two interceptors, this is the issue:
>
> At client side i send the following json-rpc/stuff, please pay special 
> attention to POST-DATA and the red parameter
>
>       characterEncoding = UTF-8
>           contentLength = 872
>             contentType = application/json-rpc
>                  locale = es_MX
>                 locales = es_MX
>                protocol = HTTP/1.1
>              remoteAddr = 192.168.0.183
>              remoteHost = 192.168.0.183
>                  scheme = http
>              serverName = 192.168.0.90
>              serverPort = 8080
>                isSecure = false
>      --------------------------------------------- HttpServletRequest
>             contextPath = /MyApplication
>                  cookie = JSESSIONID = CA8C2ACD2FE5F2259FFCDD76BE07A247
>                  header = accept = */*
>                  header = x-newrelic-id = UgAOVF9TGwAAU1NaBgA=
>                  header = content-type = application/json-rpc
>                  header = x-requested-with = XMLHttpRequest
>                  header = referer =
>    http://192.168.0.90:8080/MyApplication/view/v.verification.view
>                  header = accept-language = es-mx
>                  header = accept-encoding = gzip, deflate
>                  header = user-agent = Mozilla/4.0 (compatible; MSIE
>    7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727;
>    .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0;
>    .NET4.0C; .NET4.0E; InfoPath.3)
>                  header = host = 192.168.0.90:8080
>                  header = content-length = 872
>                  header = connection = Keep-Alive
>                  header = cache-control = no-cache
>                  header = cookie =
>    JSESSIONID=CA8C2ACD2FE5F2259FFCDD76BE07A247
>                  method = POST
>                pathInfo = null
>             queryString = null
>              remoteUser = null
>      requestedSessionId = CA8C2ACD2FE5F2259FFCDD76BE07A247
>              requestURI = /MyApplication/view/Request.action
>             servletPath = /view/Request.action
>      =============================================
>      POST-DATA:
>      =============================================
> {"params":[*{"author":{"id":302},"autoProm":0,"autorizationPool":null,"blockedBy":null,"blockedByName":null,"businessUnit":null,"code":"","creationDate":"2014-07-30T12:36:37","deleted":0,"department":{"id":"13"},"description":"BITACORA
>    DE REVISION SEMANAL DE MOLINOS GLENN
> MILL","document":null,"documentCode":"FFQ-043","documentType":{"code":"FORMATOS","deleted":0,"description":"FORMATOS","id":11,"isRetainable":1,"moduleId":0,"saveHandle":null,"status":4,"value":"11"},"fileId":12820,"flujo":{"id":"24"},"id":_41201_,"isBusy":null,"nodo":{"id":3575},"organizationalUnit":null,"reazon":"FORMALIDAD
>    DE LA BITACORA EN UN REGISTRO
> CONTROLADO","requestLogList":[],"retentionText":"3","retentionTime":1,"saveHandle":null,"status":3,"storagePlaceId":"1","timeToFreeMinutes":null,"type":1,"verificationList":[],"version":"1","tipoSolicitud":1}*],"method":"verifyRequestSMD","id":3}
>      =============================================
>
>
> Previews data was printed at a Filter i've made for debugging 
> purposes, it runs before any struts interceptor (RequestBuffer.java) 
> (the failure happens with and without my filter)
>
> The stack trace shows an error inside my application because the 
> red-id parameter didn't made it to my function called "HQLT_findById", 
> actually a null was sent there
>
>    java.lang.IllegalArgumentException: id to load is required for loading
>         at org.hibernate.event.LoadEvent.<init>(LoadEvent.java:89)
>         at org.hibernate.event.LoadEvent.<init>(LoadEvent.java:57)
>         at org.hibernate.impl.SessionImpl.get(SessionImpl.java:1080)
>         at org.hibernate.impl.SessionImpl.get(SessionImpl.java:1070)
>         at
> Framework.DAO.GenericDAOImpl.HQLT_findById(GenericDAOImpl.java:1885)
>         at
> Framework.DAO.GenericDAOImpl.*HQLT_findById*(GenericDAOImpl.java:1837)
>         at sun.reflect.GeneratedMethodAccessor1386.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown 
> Source)
>         at java.lang.reflect.Method.invoke(Unknown Source)
>         at
> org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
>         at
> org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
>         at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
>         at
> org.springframework.dao.support.PersistenceExceptionTranslationInterceptor.invoke(PersistenceExceptionTranslationInterceptor.java:136)
>         at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
>         at
> org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:98)
>         at
> org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:262)
>         at
> org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:95)
>         at
> org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
>         at
> org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
>         at com.sun.proxy.$Proxy117.HQLT_findById(Unknown Source)
>         at 
> DPMS.Document.CRUD_Request.verifyRequest(CRUD_Request.java:148)
>         at
> DPMS.Document.CRUD_Request.verifyRequestSMD(CRUD_Request.java:191)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
>         at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown 
> Source)
>         at java.lang.reflect.Method.invoke(Unknown Source)
>         at
> org.apache.struts2.json.JSONInterceptor.invoke(JSONInterceptor.java:246)
>         at
> org.apache.struts2.json.JSONInterceptor.intercept(JSONInterceptor.java:133)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> org.apache.struts2.interceptor.DeprecationInterceptor.intercept(DeprecationInterceptor.java:41)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:256)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:167)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:265)
>         at
> org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:252)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:139)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:189)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:254)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:246)
>         at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54)
>         at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:562)
>         at
> org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
>         at
> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:99)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>         at
> org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:232)
>         at
> org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:108)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>    **_*at 
> Framework.Config.RequestBuffer.doFilter(RequestBuffer.java:47)*_
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>         at Framework.Config.LogFilter.doFilter(LogFilter.java:59)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>         at Framework.Config.LoginFilter.doFilter(LoginFilter.java:52)
>         at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
>         at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
>         at
> org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108)
>         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:222)
>         at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
>         at
> org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
>         at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
>         at
> com.googlecode.psiprobe.Tomcat70AgentValve.invoke(Tomcat70AgentValve.java:38)
>         at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
>         at
> org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
>         at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
>         at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
>         at
> org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
>         at
> org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
>         at
> org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown
>    Source)
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown
>    Source)
>         at java.lang.Thread.run(Unknown Source)
>
>
> At the end, the issue is that i've sent this:
>
> *{"author":{"id":302},"autoProm":0,"autorizationPool":null,"blockedBy":null,"blockedByName":null,"businessUnit":null,"code":"","creationDate":"2014-07-30T12:36:37","deleted":0,"department":{"id":"13"},"description":"BITACORA
>    DE REVISION SEMANAL DE MOLINOS GLENN
> MILL","document":null,"documentCode":"FFQ-043","documentType":{"code":"FORMATOS","deleted":0,"description":"FORMATOS","id":11,"isRetainable":1,"moduleId":0,"saveHandle":null,"status":4,"value":"11"},"fileId":12820,"flujo":{"id":"24"},"id":_41201_,"isBusy":null,"nodo":{"id":3575},"organizationalUnit":null,"reazon":"FORMALIDAD
>    DE LA BITACORA EN UN REGISTRO
> CONTROLADO","requestLogList":[],"retentionText":"3","retentionTime":1,"saveHandle":null,"status":3,"storagePlaceId":"1","timeToFreeMinutes":null,"type":1,"verificationList":[],"version":"1","tipoSolicitud":1}*
>
> But the /JSONUtil.deserialize (at JSONInterceptor:123)/ inside of 
> struts did this (please note that *"id":_41201_* is missing) (the 
> following JSON was made by using /JSONUtil.serialize /of my Entity 
> /[ignoring hierarchy and excluding nulls//]/)
>
> *{"author":{"id":302},"autoProm":0,"creationDate":"2014-07-30T12:36:37","department":{"code":"","deleted":0,"description":"","id":13,"status":1},"documentCode":"FFQ-043","documentType":{"code":"FORMATOS","deleted":0,"description":"FORMATOS","id":11,"isRetainable":1,"moduleId":0,"status":4,"value":"11"},"fileId":12820,"flujo":{"code":"","deleted":0,"description":"","id":24,"status":1},"nodo":{"code":"","deleted":0,"description":"","id":3575,"status":1,"topLevel":0},"reazon":"FORMALIDAD
>    DE LA BITACORA EN UN REGISTRO
> CONTROLADO","requestLogList":[],"retentionText":3,"retentionTime":1,"storagePlaceId":1,"type":1,"verificationList":[],"version":"1"}*
>
> I've inspected a lot of struts2 source code and i didn't found 
> anything, my guess is that somewhere inside struts something like 
> /request.getParameter("id")/ is beign called or simply 
> /JSONUtil.deserialize /is not working properly.
>
> The issue is not easily reproducible because it happens like 1 time 
> per day, some important fact is that once it happens ONCE at any SMD 
> call it starts happening at ALL SMD calls... the only fix for this is 
> to restart Tomcat, after that the application starts working fine again,
>
> A workaroud i did by following the /request.getParameter("id")/ guess 
> was to do a HttpServletRequestWrapper to make "getParameter" 
> multireadable, by using this workaround the error stoped happending by 
> 20 days... but suddenly it happeed again, the following link shows my 
> HttpServletRequestWrapper
>
>  * http://codeviewer.org/view/code:4241
>
> Basically it stores all RequestBody data to be able to call request 
> data more than once (getParameter, getParameters, getInputStream, 
> etc), if you need more information i'll be happy to help,
>
> Greetings
>
>
> ---
> Este mensaje no contiene virus ni malware porque la protección de 
> avast! Antivirus está activa.
> http://www.avast.com
>



---
Este mensaje no contiene virus ni malware porque la protección de avast! Antivirus está
activa.
http://www.avast.com

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message