Nullpointerexception 由于请求的变化,WebSphere中的NPE

Nullpointerexception 由于请求的变化,WebSphere中的NPE,nullpointerexception,httprequest,websphere-7,atg,Nullpointerexception,Httprequest,Websphere 7,Atg,我在隐式调用request.getAttributeatg.parent.session.id时发生了许多NPE。堆栈跟踪位于跟踪日志之间的下方 [2012/02/03 12:53:26:953 SAST] 00000162 srt 1 com.ibm.ws.webcontainer.srt.SRTServletRequest getHeader this->com.ibm.ws.webcontainer.srt.SRTServletRequest@14f314f3:

我在隐式调用request.getAttributeatg.parent.session.id时发生了许多NPE。堆栈跟踪位于跟踪日志之间的下方

[2012/02/03 12:53:26:953 SAST] 00000162 srt           1 com.ibm.ws.webcontainer.srt.SRTServletRequest getHeader this->com.ibm.ws.webcontainer.srt.SRTServletRequest@14f314f3:  name --> SOAPAction header --> "http://acme.com/services/pick/SubmitOrder2"
[2012/02/03 12:53:26:953 SAST] 00000162 http          1 com.ibm.ws.webcontainer.srt.http.HttpInputStream fill fill
[2012/02/03 12:53:26:960 SAST] 00000162 channel       1 com.ibm.ws.webcontainer.channel.WCCByteBufferInputStream bufferIsGood buffer is good remaining --> 1635
[2012/02/03 12:53:26:960 SAST] 00000162 http          1 com.ibm.ws.webcontainer.srt.http.HttpInputStream read read length -->2048
[2012/02/03 12:53:26:960 SAST] 00000162 channel       1 com.ibm.ws.webcontainer.channel.WCCByteBufferInputStream bufferIsGood buffer is good remaining --> 1123
[2012/02/03 12:53:26:960 SAST] 00000162 channel       1 com.ibm.ws.webcontainer.channel.WCCByteBufferInputStream read Reset requested len --> 1574 to size remaining in current buffer --> 1123
[2012/02/03 12:53:26:960 SAST] 00000162 http          1 com.ibm.ws.webcontainer.srt.http.HttpInputStream read read returning -->1597, total=1635,limit=1635
[2012/02/03 12:53:26:961 SAST] 00000162 http          1 com.ibm.ws.webcontainer.srt.http.HttpInputStream read read length -->2048
[2012/02/03 12:53:26:962 SAST] 00000162 http          1 com.ibm.ws.webcontainer.srt.http.HttpInputStream read Over the limit: -1
[2012/02/03 12:53:26:962 SAST] 00000162 http          > com.ibm.ws.webcontainer.srt.http.HttpInputStream close ENTRY total=1635,limit=1635
[2012/02/03 12:53:26:962 SAST] 00000162 http          1 com.ibm.ws.webcontainer.srt.http.HttpInputStream finish finish
[2012/02/03 12:53:26:962 SAST] 00000162 srt           1 com.ibm.ws.webcontainer.srt.SRTServletResponse isSkipInputStreamRead skipInputStreamRead = false
[2012/02/03 12:53:26:962 SAST] 00000162 http          < com.ibm.ws.webcontainer.srt.http.HttpInputStream close RETURN total=1635,limit=1635
[2012/02/03 12:53:26:964 SAST] 00000162 PickingManage I com.acme.services.pick.PickingManagementHttpBindingImpl submitOrder2 Method: submitOrder2
[2012/02/03 12:53:26:967 SAST] 00000162 webapp        1 com.ibm.ws.webcontainer.webapp.WebAppDispatcherContextImpl isSecurityEnabledForApplication serverSecurityEnabled
[2012/02/03 12:53:26:967 SAST] 00000162 srt           1 com.ibm.ws.webcontainer.srt.SRTServletRequest getRemoteUser  (security enabled)--> user XXXX
[2012/02/03 12:53:26:968 SAST] 00000162 PickingManage I com.acme.services.pick.PickingManagementHttpBindingImpl getUsername current user is: XXXX
[2012/02/03 12:53:26:971 SAST] 00000162 channel       1 com.ibm.ws.webcontainer.channel.WCCRequestImpl getHeader  header --> Axis/1.4
[2012/02/03 12:53:26:971 SAST] 00000162 srt           1 com.ibm.ws.webcontainer.srt.SRTServletRequest getHeader this->com.ibm.ws.webcontainer.srt.SRTServletRequest@14f314f3:  name --> user-agent
[2012/02/03 12:53:27:564 SAST] 00000162 srt           1 com.ibm.ws.webcontainer.srt.SRTServletRequest getAttribute this->com.ibm.ws.webcontainer.srt.SRTServletRequest@28e428e4:  name --> atg.parent.session.id
[2012/02/03 12:53:27:565 SAST] 00000162 SystemOut     O   /com/acme/order/picking/PickingService        An exception occurred: java.lang.NullPointerException   java.lang.NullPointerException
    at com.ibm.ws.webcontainer.srt.SRTServletRequest$SRTServletRequestHelper.access$200(SRTServletRequest.java:2629)
    at com.ibm.ws.webcontainer.srt.SRTServletRequest.getAttribute(SRTServletRequest.java:276)
    at atg.servlet.MutableHttpServletRequest.getAttribute(MutableHttpServletRequest.java:505)
    at atg.servlet.MutableHttpServletRequest.getAttribute(MutableHttpServletRequest.java:470)
    at atg.servlet.NameContextManager.getNameContextId(NameContextManager.java:320)
    at atg.servlet.ServletUtil.getParentSessionId(ServletUtil.java:558)
    at atg.commerce.messaging.CommerceMessageImpl.<init>(CommerceMessageImpl.java:230)
    at com.acme.fulfillment.PickingMessage.<init>(PickingMessage.java:5)
    at com.acme.order.picking.PickingService.submitOrder(PickingService.java:128)
    at com.acme.services.pick.PickingManagementHttpBindingImpl.submitOrder2(PickingManagementHttpBindingImpl.java:177)
    at com.acme.services.pick.PickingManagementHttpBindingSkeleton.submitOrder2(PickingManagementHttpBindingSkeleton.java:165)
    at sun.reflect.GeneratedMethodAccessor1040.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:600)
    at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:388)
    at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:283)
    at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
    at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
    at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
    at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
[2012/02/03 12:53:27:566 SAST] 00000162 SystemOut     O
[2012/02/03 12:53:27:571 SAST] 00000162 PickingManage E com.acme.services.pick.PickingManagementHttpBindingImpl submitOrder2 An exception occurred: java.lang.NullPointerException
                             java.lang.NullPointerException
    at com.ibm.ws.webcontainer.srt.SRTServletRequest$SRTServletRequestHelper.access$200(SRTServletRequest.java:2629)
    at com.ibm.ws.webcontainer.srt.SRTServletRequest.getAttribute(SRTServletRequest.java:276)
    at atg.servlet.MutableHttpServletRequest.getAttribute(MutableHttpServletRequest.java:505)
    at atg.servlet.MutableHttpServletRequest.getAttribute(MutableHttpServletRequest.java:470)
    at atg.servlet.NameContextManager.getNameContextId(NameContextManager.java:320)
    at atg.servlet.ServletUtil.getParentSessionId(ServletUtil.java:558)
    at atg.commerce.messaging.CommerceMessageImpl.<init>(CommerceMessageImpl.java:230)
    at com.acme.fulfillment.PickingMessage.<init>(PickingMessage.java:5)
    at com.acme.order.picking.PickingService.submitOrder(PickingService.java:128)
    at com.acme.services.pick.PickingManagementHttpBindingImpl.submitOrder2(PickingManagementHttpBindingImpl.java:177)
    at com.acme.services.pick.PickingManagementHttpBindingSkeleton.submitOrder2(PickingManagementHttpBindingSkeleton.java:165)
    at sun.reflect.GeneratedMethodAccessor1040.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:600)
    at org.apache.axis.providers.java.RPCProvider.invokeMethod(RPCProvider.java:388)
    at org.apache.axis.providers.java.RPCProvider.processMessage(RPCProvider.java:283)
    at org.apache.axis.providers.java.JavaProvider.invoke(JavaProvider.java:323)
    at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
    at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
    at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
    at org.apache.axis.handlers.soap.SOAPService.invoke(SOAPService.java:453)
    at org.apache.axis.server.AxisServer.invoke(AxisServer.java:281)
    at org.apache.axis.transport.http.AxisServlet.doPost(AxisServlet.java:699)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:738)
    at org.apache.axis.transport.http.AxisServletBase.service(AxisServletBase.java:327)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:831)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1655)
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595)
[2012/02/03 12:53:27:586 SAST] 00000162 srt           > com.ibm.ws.webcontainer.srt.SRTServletResponse setStatus ENTRY  status --> 500 [com.ibm.ws.webcontainer.srt.SRTServletResponse@15651565]
[2012/02/03 12:53:27:586 SAST] 00000162 srt           1 com.ibm.ws.webcontainer.srt.SRTServletResponse getRequest request=com.ibm.ws.webcontainer.srt.SRTServletRequest@14f314f3
[2012/02/03 12:53:27:587 SAST] 00000162 srt           1 com.ibm.ws.webcontainer.srt.SRTServletRequest getWebAppDispatcherContext
因此,一开始,线程很高兴地使用request@14f314f3。然后,由于未知的原因,它尝试从另一个请求@28e428e4重设atg.parent.session.id,在所有错误发生后,它返回到原始请求@14f314f3

当发生此异常时,它几乎总是重复自身,直到部署EAR的实例重新启动。看起来好像请求中有一些过时的数据,它以某种方式被保留了下来,但我无法追踪到这一点

PickingService组件的作用域为“全局”,但它似乎是线程安全的。CommerceMessageImpl的PickingMessage扩展正在重写对请求没有影响的方法


我有没有办法弄清楚为什么/如何突然改变请求?并非所有实例或所有请求都会出现此问题。然而,它在我们的生产环境中造成了一个问题。感谢您的帮助。

您确定@28e428e4的请求不是来自其他线程吗?@RajeshJAdvani:谢谢您的评论。对绝对确定它不是来自不同的线程。通过在web.xml中为AxisServlet添加页面过滤器,我们似乎找到了解决办法。它目前正在成功地“屏蔽”问题,但不要相信它已经解决了问题。你确定@28e428e4的请求不是来自其他线程吗?@RajeshJAdvani:谢谢你的评论。对绝对确定它不是来自不同的线程。通过在web.xml中为AxisServlet添加页面过滤器,我们似乎找到了解决办法。目前它成功地“掩盖”了问题,但不要相信它已经解决了问题。