首页 > 解决方案 > 连字符 (-) 的不适当 OGNL 表达式

问题描述

我在请求参数中将设备名称和设备版本作为设备名称和设备版本传递给Weblogic12C应用程序服务器中运行的 Struts 2 应用程序。

应用程序正在从请求中获取值并且工作正常,但ognl InappropriateExpressionException正在服务器日志中连续打印。即使包括如下excludeParams属性

<interceptor-stack name="commonStack">
        <interceptor-ref name="timer"/>
        <interceptor-ref name="SessionInterceptor"/>
        <interceptor-ref name="defaultStack" />
        <interceptor-ref name="params">
         <param name="excludeParams">dojo..*,device-*</param>
        </Interceptor-ref>
</interceptor-stack>

我得到的异常如下

错误设置表达式 'device-version' 的值为 '[Ljava.lang.String;@1012dde9' evaluateSetValueBody(SimpleNode.java:220) at ognl.SimpleNode.setValue(SimpleNode.java:301) at ognl.Ognl.setValue(Ognl.java:737) at com.opensymphony.xwork2.ognl.OgnlUtil.setValue(OgnlUtil.java :218) 在 com.opensymphony.xwork2.ognl.OgnlValueStack.setValue(OgnlValueStack.java:174) 在 com.opensymphony.xwork2.ognl 的 com.opensymphony.xwork2.ognl.OgnlValueStack.trySetValue(OgnlValueStack.java:187)。 OgnlValueStack.setParameter(OgnlValueStack.java:152) 在 com.opensymphony.xwork2.interceptor。ParametersInterceptor.setParameters(ParametersInterceptor.java:318) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:230) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com .opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:238) 在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java :98) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:191) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation) 的 org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:73) .java:242) 在 org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:91) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 org.apache.struts2.interceptor。 FileUploadInterceptor.intercept(FileUploadInterceptor.java:252) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation .java:242) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.intercept(ChainingInterceptor.java:145) 在 com.opensymphony.xwork2.interceptor.intercept(ChainingInterceptor.java:142)。 PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) 在 com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) 在 com.opensymphony.xwork2.DefaultActionInvocation。在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 org.apache.struts2 的 com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) 调用(DefaultActionInvocation.java:242) .interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:193) 在com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) 在 com.opensymphony.xwork2.DefaultActionInvocation。在 com.tcs.interceptors.SessionInterceptor.intercept(SessionInterceptor.java:134) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 com.opensymphony.xwork2.interceptor 调用(DefaultActionInvocation.java:242) .TimerInterceptor.invokeUnderTiming(TimerInterceptor.java:135) 在 com.opensymphony.xwork2.interceptor.TimerInterceptor.intercept(TimerInterceptor.java:122) 在 com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:242) 在 org. apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:54) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:544) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction( org.apache 上的 ExecuteOperations.java:77)。struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) 在 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) 在 com.tcs.common.filter.GZIPFilter.doFilter(GZIPFilter. java:114) 在 weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3683) 在 weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction 的 weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:78) .run(WebAppServletContext.java:3649) 在 weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:326) 在 weblogic.security.service.SecurityManager.runAsForUserCode(SecurityManager.java:197) 在 weblogic.servlet。提供者。WlsSecurityProvider.runAsForUserCode(WlsSecurityProvider.java:203) 在 weblogic.servlet.provider.WlsSubjectHandle.run(WlsSubjectHandle.java:71) 在 weblogic.servlet.internal.WebAppServletContext.doSecuredExecute(WebAppServletContext.java:2433) 在 weblogic.servlet.internal .WebAppServletContext.securedExecute(WebAppServletContext.java:2281) 在 weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2259) 在 weblogic.servlet.internal.ServletRequestImpl.runInternal(ServletRequestImpl.java:1691) 在 weblogic.servlet。 weblogic.servlet.provider.ContainerSupportProviderImpl$WlsRequestExecutor.run(ContainerSupportProviderImpl.java:270) 处 weblogic.invocation.ComponentInvocationContextManager 处的 internal.ServletRequestImpl.run(ServletRequestImpl.java:1651)。_runAs(ComponentInvocationContextManager.java:348) 在 weblogic.invocation.ComponentInvocationContextManager.runAs(ComponentInvocationContextManager.java:333) 在 weblogic.work.LivePartitionUtility.doRunWorkUnderContext(LivePartitionUtility.java:54) 在 weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java :41) 在 weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640) 在 weblogic.work.ExecuteThread.execute(ExecuteThread.java:406) 在 weblogic.work.ExecuteThread.run(ExecuteThread.java:346)doRunWorkUnderContext(LivePartitionUtility.java:54) 在 weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) 在 weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640) 在 weblogic.work.ExecuteThread.execute(ExecuteThread.java :406) 在 weblogic.work.ExecuteThread.run(ExecuteThread.java:346)doRunWorkUnderContext(LivePartitionUtility.java:54) 在 weblogic.work.PartitionUtility.runWorkUnderContext(PartitionUtility.java:41) 在 weblogic.work.SelfTuningWorkManagerImpl.runWorkUnderContext(SelfTuningWorkManagerImpl.java:640) 在 weblogic.work.ExecuteThread.execute(ExecuteThread.java :406) 在 weblogic.work.ExecuteThread.run(ExecuteThread.java:346)

标签: javaexceptionstruts2weblogic12cognl

解决方案


推荐阅读