Xpages 使用xe:dialog的间歇性NullPointerException

Xpages 使用xe:dialog的间歇性NullPointerException,xpages,xpages-extlib,Xpages,Xpages Extlib,以前我在很多应用程序中都使用过xe:dialog,但是我在一个新的XPage工作流表单上遇到了问题,这个表单有几个按钮可以调用xe:dialog提示 当我在几个浏览器上测试这一点时,使用不同的登录来模拟发起人和批准人,按钮工作正常。然后过了一段时间,单击这些按钮之一会导致意外的运行时错误:运行时遇到意外错误。java.lang.NullPointerException—从这一点开始,任何用户都不能单击使用xe:dialog的任何按钮—它们会得到相同的错误。这是如此混乱的服务器上,我不得不重新启动

以前我在很多应用程序中都使用过xe:dialog,但是我在一个新的XPage工作流表单上遇到了问题,这个表单有几个按钮可以调用xe:dialog提示

当我在几个浏览器上测试这一点时,使用不同的登录来模拟发起人和批准人,按钮工作正常。然后过了一段时间,单击这些按钮之一会导致意外的运行时错误:运行时遇到意外错误。java.lang.NullPointerException—从这一点开始,任何用户都不能单击使用xe:dialog的任何按钮—它们会得到相同的错误。这是如此混乱的服务器上,我不得不重新启动HTTP或整个服务器,让他们再次工作

在工作流程中,应用程序会将带有链接的电子邮件发送回XPage。这似乎是在应用程序通过电子邮件链接打开并且用户登录后,问题最常出现的情况

因此,某些对象设置不正确。如何识别未设置的对象

这是痕迹

11/21/14 8:28 AM: Exception Thrown
Context Path: /aaa.nsf
Page Name: /test.xsp
javax.faces.FacesException: java.lang.NullPointerException
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:865)
at com.ibm.xsp.extlib.component.dynamiccontent.UIDynamicControl.invokeOnComponent(UIDynamicControl.java:254)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at com.ibm.xsp.extlib.component.dialog.UIDialog.invokeOnComponent(UIDialog.java:543)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at com.ibm.xsp.component.UIDataPanelBase.invokeOnComponent(UIDataPanelBase.java:416)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at com.ibm.xsp.component.UIDataPanelBase.invokeOnComponent(UIDataPanelBase.java:416)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at com.ibm.xsp.component.UIDataPanelBase.invokeOnComponent(UIDataPanelBase.java:416)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at com.ibm.xsp.component.UIDataPanelBase.invokeOnComponent(UIDataPanelBase.java:416)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at com.ibm.xsp.component.UIDataPanelBase.invokeOnComponent(UIDataPanelBase.java:416)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at com.ibm.xsp.component.UIDataPanelBase.invokeOnComponent(UIDataPanelBase.java:416)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:878)
at com.ibm.xsp.component.UIViewRootEx.invokeOnComponent(UIViewRootEx.java:1552)
at com.ibm.xsp.component.UIViewRootEx._invokePartialRefresh(UIViewRootEx.java:1323)
at com.ibm.xsp.component.UIViewRootEx2._invokePartialRefresh(UIViewRootEx2.java:132)
at com.ibm.xsp.component.UIViewRootEx._renderView(UIViewRootEx.java:1309)
at com.ibm.xsp.component.UIViewRootEx.renderView(UIViewRootEx.java:1255)
at com.ibm.xsp.application.ViewHandlerExImpl.doRender(ViewHandlerExImpl.java:651)
at com.ibm.xsp.application.ViewHandlerExImpl._renderView(ViewHandlerExImpl.java:321)
at com.ibm.xsp.application.ViewHandlerExImpl.renderView(ViewHandlerExImpl.java:336)
at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:103)
at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:210)
at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:120)
at com.ibm.xsp.controller.FacesControllerImpl.render(FacesControllerImpl.java:270)
at com.ibm.xsp.webapp.FacesServlet.serviceView(FacesServlet.java:224)
at com.ibm.xsp.webapp.FacesServletEx.serviceView(FacesServletEx.java:157)
at com.ibm.xsp.webapp.FacesServlet.service(FacesServlet.java:160)
at com.ibm.xsp.webapp.FacesServletEx.service(FacesServletEx.java:138)
at com.ibm.xsp.webapp.DesignerFacesServlet.service(DesignerFacesServlet.java:103)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.invokeServlet(ComponentModule.java:576)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.invokeServlet(NSFComponentModule.java:1335)
at com.ibm.designer.runtime.domino.adapter.ComponentModule$AdapterInvoker.invokeServlet(ComponentModule.java:853)
at com.ibm.designer.runtime.domino.adapter.ComponentModule$ServletInvoker.doService(ComponentModule.java:796)
at com.ibm.designer.runtime.domino.adapter.ComponentModule.doService(ComponentModule.java:565)
at com.ibm.domino.xsp.module.nsf.NSFComponentModule.doService(NSFComponentModule.java:1319)
at com.ibm.domino.xsp.module.nsf.NSFService.doServiceInternal(NSFService.java:662)
at com.ibm.domino.xsp.module.nsf.NSFService.doService(NSFService.java:482)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.doService(LCDEnvironment.java:357)
at com.ibm.designer.runtime.domino.adapter.LCDEnvironment.service(LCDEnvironment.java:313)
at com.ibm.domino.xsp.bridge.http.engine.XspCmdManager.service(XspCmdManager.java:272)
Caused by: java.lang.NullPointerException
at com.ibm.xsp.extlib.component.dynamiccontent.AbstractDynamicContent.createContent(AbstractDynamicContent.java:134)
at com.ibm.xsp.extlib.component.dialog.UIDialog$PopupContent.encodeBegin(UIDialog.java:224)
at com.ibm.xsp.util.FacesUtil.renderComponent(FacesUtil.java:842)
at com.ibm.xsp.component.UIViewRootEx$1.invokeContextCallback(UIViewRootEx.java:1326)
at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:862)
... 46 more

我想知道对话框是否位于面板内,然后在某些情况下不会被渲染。记住,你不能打开不存在的东西。因为您以前使用过对话框,而且看起来您正在使用dynamicContent。。。这是我对问题的第一个猜测。

这是一个很难解决的问题,因为错误的间歇性和模糊的错误消息文本。我没有一个明确的答案,但在做了两次更改后,它现在似乎一直在正常工作,没有错误-因此,我正在记录它们,以便在其他人得到与xe:dialog相关的NullPointerException时,它可能会帮助他们找到解决方案

首先,我将错误范围缩小为仅在从应用程序的通知电子邮件中发送的链接打开web应用程序后发生:链接url包括&action=openDocument,但需要有&action=editDocument,因为对话框中有可编辑字段


第二个变化是,应用程序从一个数据库获取数据,而用户没有使用sessionAsSigner访问该数据库的ACL权限。我已更改ACL以允许用户访问,并将代码从使用sessionAsSigner更改为session。

可能值得查看错误中引用的代码。AbstractDynamicContent第134行-UIDialog第224行-Brian-感谢您提供的信息。伙计,解决这个问题比我更愿意挖掘的更深,但无论如何AbstractDynamicContent第134行是ViewStateBean.get.initFromState;UIDialog行224是createContentctx;除了视图状态混乱之外,我不知道该怎么做。通常我会深入研究一下,但恐怕我现在没有时间。另一个善良的灵魂可能会乘虚而入。但至少我想让你知道,源代码现在是公开的,在Github上很容易访问,这一周在Github上才更新谢谢-只需使用Mark L的调试工具栏,就可以看到当我从浏览器中的URL打开站点时,applicationScope显示viewStateBean已初始化,但是当从电子邮件中的链接打开它时,viewStateBean不存在。有什么想法为什么?谢谢大卫-所有想法都很感激。奇怪的是对话框工作正常,直到通过电子邮件中的链接访问页面。调试工具栏显示,当applicationScope var viewStateBean正常工作时,它存在,但从电子邮件链接访问时,它不存在,并且对话框不再适用于任何用户。就像它损坏了应用程序使用的对象一样。