[jbosstools-issues] [JBoss JIRA] (JBIDE-15637) NPE in faces-config.xml editor

Viacheslav Kabanovich (JIRA) jira-events at lists.jboss.org
Wed Oct 9 12:44:03 EDT 2013


    [ https://issues.jboss.org/browse/JBIDE-15637?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12812811#comment-12812811 ] 

Viacheslav Kabanovich edited comment on JBIDE-15637 at 10/9/13 12:43 PM:
-------------------------------------------------------------------------

The exception is the result of a memory leak that occurs at replacing the entire content with content of different faces config version. An outdated object remains a listener and fails on events. Changes that do not modify faces config version are merged smoothly and no memory leak occurs. 

The same memory leak takes place in Seam Pages editor, but in this case the failure is prevented by code in listener
{code}
		if(diagramXML.getPath() == null) {
			//FIXME Should not be, this a problem. Listener should be removed earlier
			//diagramXML.getModel().removeModelTreeListener(this);
			return;
		}
{code}
                
      was (Author: scabanovich):
    The exception is the result of a memory leak that occurs at replacing the entire content with content of different faces config version. An outdated object remains a listener and fails on events. Changes that do not modify faces config version are merged smoothly and no memory leak occurs. 
                  
> NPE in faces-config.xml editor
> ------------------------------
>
>                 Key: JBIDE-15637
>                 URL: https://issues.jboss.org/browse/JBIDE-15637
>             Project: Tools (JBoss Tools)
>          Issue Type: Bug
>          Components: xml-structured-editor
>    Affects Versions: 4.2.0.Alpha1
>            Reporter: Alexey Kazakov
>            Assignee: Viacheslav Kabanovich
>             Fix For: 4.2.0.Alpha1
>
>
> 1. Create JSF 2.2 KickStart project
> 2. Open faces-config.xml
> 3. Replace the content by the following code:
> {code}
> <faces-config version="1.2" xmlns="http://java.sun.com/xml/ns/javaee"
>     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">
>  
>      <render-kit>
>         <renderer>
>             <component-family>javax.faces.Output</component-family>
>             <renderer-type>javax.faces.Text</renderer-type>
>             <renderer-class>com.xxx.HtmlTextRenderer</renderer-class>
>         </renderer>
>  
>         <renderer>
>             <component-family>javax.faces.Input</component-family>
>             <renderer-type>javax.faces.Text</renderer-type><!-- this results in  'Value javax.faces.Text is not unique.', but its needed -->
>             <renderer-class>com.xxx.InputTextRenderer</renderer-class>
>         </renderer>
> </render-kit>  	
> </faces-config>
> {code}
> 4. Save the file
> 5. See eclipse log:
> {code}
> java.lang.NullPointerException
> 	at org.jboss.tools.jsf.ui.editor.model.impl.Page$LinkList.removeLink(Page.java:113)
> 	at org.jboss.tools.jsf.ui.editor.model.impl.Page.remove(Page.java:235)
> 	at org.jboss.tools.jsf.ui.editor.model.impl.Group.remove(Group.java:299)
> 	at org.jboss.tools.jsf.ui.editor.model.impl.JSFModel$ProcessItemList.nodeRemoved(JSFModel.java:408)
> 	at org.jboss.tools.jsf.ui.editor.model.impl.JSFModel.structureChanged(JSFModel.java:345)
> 	at org.jboss.tools.common.model.util.XModelTreeListenerSWTSync$2.run(XModelTreeListenerSWTSync.java:53)
> 	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:180)
> 	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150)
> 	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4491)
> 	at org.jboss.tools.common.model.util.XModelTreeListenerSWTSync.structureChanged(XModelTreeListenerSWTSync.java:47)
> 	at org.jboss.tools.common.model.impl.XModelImpl$2.run(XModelImpl.java:526)
> 	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
> 	at org.jboss.tools.common.model.impl.XModelImpl.fireStructureChanged(XModelImpl.java:522)
> 	at org.jboss.tools.common.model.impl.XModelObjectImpl.fireStructureChanged(XModelObjectImpl.java:450)
> 	at org.jboss.tools.common.model.impl.XModelObjectImpl.removeChild(XModelObjectImpl.java:286)
> 	at org.jboss.tools.common.model.impl.XModelObjectImpl.removeFromParent(XModelObjectImpl.java:292)
> 	at org.jboss.tools.jsf.model.helpers.JSFProcessHelper.removeObsoleteGroups(JSFProcessHelper.java:135)
> 	at org.jboss.tools.jsf.model.helpers.JSFProcessHelper.updateProcess0(JSFProcessHelper.java:98)
> 	at org.jboss.tools.jsf.model.helpers.JSFProcessHelper.updateProcess(JSFProcessHelper.java:74)
> 	at org.jboss.tools.jsf.model.FacesProcessImpl.updateProcess(FacesProcessImpl.java:63)
> 	at org.jboss.tools.jsf.model.FacesProcessImpl.loadChildren(FacesProcessImpl.java:54)
> 	at org.jboss.tools.common.model.impl.RegularObjectImpl.getChildren(RegularObjectImpl.java:61)
> 	at org.jboss.tools.jst.web.model.helpers.autolayout.Items.initItems(Items.java:57)
> 	at org.jboss.tools.jst.web.model.helpers.autolayout.Items.load(Items.java:49)
> 	at org.jboss.tools.jst.web.model.helpers.autolayout.Items.setProcess(Items.java:45)
> 	at org.jboss.tools.jst.web.model.helpers.autolayout.AutoLayout.setProcess(AutoLayout.java:34)
> 	at org.jboss.tools.jsf.model.helpers.JSFProcessHelper.autolayout(JSFProcessHelper.java:303)
> 	at org.jboss.tools.jsf.model.FacesProcessImpl.autolayout(FacesProcessImpl.java:47)
> 	at org.jboss.tools.jsf.ui.editor.FacesConfigGuiEditor.updateGui(FacesConfigGuiEditor.java:86)
> 	at org.jboss.tools.common.editor.AbstractSectionEditor.setObject(AbstractSectionEditor.java:96)
> 	at org.jboss.tools.jsf.ui.editor.FacesConfigEditor.setNormalMode(FacesConfigEditor.java:106)
> 	at org.jboss.tools.common.editor.ObjectMultiPageEditor.update0(ObjectMultiPageEditor.java:621)
> 	at org.jboss.tools.common.editor.ObjectMultiPageEditor.structureChanged(ObjectMultiPageEditor.java:573)
> 	at org.jboss.tools.common.model.util.XModelTreeListenerSWTSync$2.run(XModelTreeListenerSWTSync.java:53)
> 	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:180)
> 	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:150)
> 	at org.eclipse.swt.widgets.Display.syncExec(Display.java:4491)
> 	at org.jboss.tools.common.model.util.XModelTreeListenerSWTSync.structureChanged(XModelTreeListenerSWTSync.java:47)
> 	at org.jboss.tools.common.model.impl.XModelImpl$2.run(XModelImpl.java:526)
> 	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
> 	at org.jboss.tools.common.model.impl.XModelImpl.fireStructureChanged(XModelImpl.java:522)
> 	at org.jboss.tools.common.model.impl.XModelObjectImpl.fireStructureChanged(XModelObjectImpl.java:450)
> 	at org.jboss.tools.common.model.filesystems.impl.FolderImpl.fireStructureChanged(FolderImpl.java:836)
> 	at org.jboss.tools.common.model.impl.XModelObjectImpl.addChild(XModelObjectImpl.java:274)
> 	at org.jboss.tools.common.model.filesystems.impl.FolderImpl.createFileObject(FolderImpl.java:309)
> 	at org.jboss.tools.common.model.filesystems.impl.FolderImpl.createFileObject(FolderImpl.java:277)
> 	at org.jboss.tools.common.model.filesystems.impl.FolderImpl.reload(FolderImpl.java:674)
> 	at org.jboss.tools.common.model.filesystems.impl.FolderImpl.saveChild(FolderImpl.java:948)
> 	at org.jboss.tools.common.model.filesystems.impl.FolderImpl.saveChild(FolderImpl.java:929)
> 	at org.jboss.tools.common.editor.ObjectMultiPageEditor.doSave(ObjectMultiPageEditor.java:374)
> 	at org.jboss.tools.common.model.ui.editor.EditorPartWrapper.doSave(EditorPartWrapper.java:235)
> 	at org.eclipse.ui.internal.SaveableHelper$2.run(SaveableHelper.java:150)
> 	at org.eclipse.ui.internal.SaveableHelper$5.run(SaveableHelper.java:276)
> 	at org.eclipse.jface.operation.ModalContext.runInCurrentThread(ModalContext.java:464)
> 	at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:372)
> 	at org.eclipse.ui.internal.WorkbenchWindow$13.run(WorkbenchWindow.java:1818)
> 	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
> 	at org.eclipse.ui.internal.WorkbenchWindow.run(WorkbenchWindow.java:1815)
> 	at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:284)
> 	at org.eclipse.ui.internal.SaveableHelper.runProgressMonitorOperation(SaveableHelper.java:263)
> 	at org.eclipse.ui.internal.SaveableHelper.savePart(SaveableHelper.java:155)
> 	at org.eclipse.ui.internal.WorkbenchPage.saveSaveable(WorkbenchPage.java:3769)
> 	at org.eclipse.ui.internal.WorkbenchPage.saveEditor(WorkbenchPage.java:3782)
> 	at org.jboss.tools.common.model.ui.texteditors.SaveAction2.run(XMLTextEditorComponent.java:465)
> 	at org.eclipse.jface.action.Action.runWithEvent(Action.java:499)
> 	at org.eclipse.jface.commands.ActionHandler.execute(ActionHandler.java:119)
> 	at org.eclipse.ui.internal.handlers.E4HandlerProxy.execute(E4HandlerProxy.java:90)
> 	at sun.reflect.GeneratedMethodAccessor56.invoke(Unknown Source)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:606)
> 	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:56)
> 	at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:243)
> 	at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:224)
> 	at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
> 	at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:167)
> 	at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
> 	at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
> 	at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
> 	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:285)
> 	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:504)
> 	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:555)
> 	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:376)
> 	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.access$0(KeyBindingDispatcher.java:322)
> 	at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:84)
> 	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
> 	at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1554)
> 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1391)
> 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1416)
> 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1401)
> 	at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1428)
> 	at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:829)
> 	at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:3236)
> 	at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:758)
> 	at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:2096)
> 	at org.eclipse.swt.widgets.Control.windowProc(Control.java:5467)
> 	at org.eclipse.swt.widgets.Display.windowProc(Display.java:4569)
> 	at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method)
> 	at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:8742)
> 	at org.eclipse.swt.widgets.Display.eventProc(Display.java:1243)
> 	at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method)
> 	at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:2288)
> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3361)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$9.run(PartRenderingEngine.java:1113)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:997)
> 	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:138)
> 	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:610)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
> 	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:567)
> 	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:150)
> 	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:124)
> 	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:354)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:181)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:606)
> 	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:636)
> 	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:591)
> 	at org.eclipse.equinox.launcher.Main.run(Main.java:1450)
> 	at org.eclipse.equinox.launcher.Main.main(Main.java:1426)
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jbosstools-issues mailing list