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 Wed, 06 Aug 2014 21:05:50 GMT
Any ideas of what's happening?

On 04/08/2014 12:38 p. m., Luis Limas wrote:
> 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
>


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


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org


Mime
View raw message