[jbosstools-issues] [JBoss JIRA] (JBIDE-23354) Deploy Docker Wizard: Reset of port mapping whille at least 1 default is present causes NPE

Viacheslav Kabanovich (JIRA) issues at jboss.org
Thu Oct 27 03:32:00 EDT 2016


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

Viacheslav Kabanovich edited comment on JBIDE-23354 at 10/27/16 3:31 AM:
-------------------------------------------------------------------------

[~jeffmaury], [~adietish], NPE probably happened at implicit conversion to boolean. Comparing to getColumnText we see that it is normal to check the result for null (the same check is in super implementation). Even if in this case the call of refresh was the immediate cause of null value, it can happen in other situations. I suggest to protect this method by postponing the conversion until null check:

{code}
		    @Override
		    public Image getColumnImage(Object element, int columnIndex) {
		        if (columnIndex == ROUTE_PORT_COLUMN_INDEX) {
				Boolean selected = (Boolean)attributeMaps[columnIndex].get(element);
				return selected != null && selected ? OpenShiftImages.CHECKED_IMG:OpenShiftImages.UNCHECKED_IMG;
		        }
		        return null;
		    }
{code}

Also, I suspect, that we may need table refresh to fix JBIDE-23416. We can see in code that table refresh is used in many cases not relying on auto-refresh on fired events.


was (Author: scabanovich):
[~jeffmaury], [~adietish], NPE probably happened at implicit conversion to boolean. Comparing to getColumnText we see that it is normal to check the result for null (the same check is in super implementation). Even if in this case the call of refresh was the immediate cause of null value, it can happen in other situations. I suggest to protect this method by postponing the conversion until null check:

{code}
		    @Override
		    public Image getColumnImage(Object element, int columnIndex) {
		        if (columnIndex == ROUTE_PORT_COLUMN_INDEX) {
                    Boolean selected = (Boolean)attributeMaps[columnIndex].get(element);
                    return selected != null && selected ? OpenShiftImages.CHECKED_IMG:OpenShiftImages.UNCHECKED_IMG;
		        }
		        return null;
		    }
{code}

Also, I suspect, that we may need table refresh to fix JBIDE-23416. We can see in code that table refresh is used in many cases not relying on auto-refresh on fired events.

> Deploy Docker Wizard: Reset of port mapping whille at least 1 default is present causes NPE
> -------------------------------------------------------------------------------------------
>
>                 Key: JBIDE-23354
>                 URL: https://issues.jboss.org/browse/JBIDE-23354
>             Project: Tools (JBoss Tools)
>          Issue Type: Bug
>          Components: openshift
>    Affects Versions: 4.4.2.AM2
>            Reporter: Marián Labuda
>            Assignee: Jeff MAURY
>              Labels: deploy_docker_wizard, openshift_v3
>             Fix For: 4.4.2.AM3
>
>
> In Deploy Image to Docker wizard on the wizard page with routing settings, if I click on Reset while in the table is at least 1 default port mapping (row with non-changed values = default), cause NPE and the default row is shown as empty = name, service port and pod port are shown as blank.
> NPE stack trace
> {code}Problems occurred when invoking code from plug-in: "org.eclipse.jface".
> java.lang.NullPointerException
> 	at org.jboss.tools.openshift.internal.ui.wizard.deployimage.ServicesAndRoutingPage$2.getColumnImage(ServicesAndRoutingPage.java:196)
> 	at org.eclipse.jface.viewers.TableColumnViewerLabelProvider.update(TableColumnViewerLabelProvider.java:67)
> 	at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:141)
> 	at org.eclipse.jface.viewers.AbstractTableViewer.doUpdateItem(AbstractTableViewer.java:382)
> 	at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:474)
> 	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
> 	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50)
> 	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173)
> 	at org.eclipse.jface.viewers.StructuredViewer.updateItem(StructuredViewer.java:2170)
> 	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefreshAll(AbstractTableViewer.java:669)
> 	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:607)
> 	at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:599)
> 	at org.eclipse.jface.viewers.StructuredViewer.lambda$0(StructuredViewer.java:1519)
> 	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1458)
> 	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1419)
> 	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1519)
> 	at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:523)
> 	at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1478)
> 	at org.jboss.tools.openshift.internal.ui.wizard.deployimage.ServicesAndRoutingPage$7.widgetSelected(ServicesAndRoutingPage.java:402)
> 	at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:249)
> 	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
> 	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5219)
> 	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1340)
> 	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4553)
> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4143)
> 	at org.eclipse.jface.window.Window.runEventLoop(Window.java:818)
> 	at org.eclipse.jface.window.Window.open(Window.java:794)
> 	at org.jboss.tools.common.ui.WizardUtils.openWizardDialog(WizardUtils.java:257)
> 	at org.jboss.tools.openshift.internal.ui.handler.DeployImageHandler$2$1.run(DeployImageHandler.java:94)
> 	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
> 	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:182)
> 	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4528)
> 	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4146)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
> 	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022)
> 	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150)
> 	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:687)
> 	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
> 	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:604)
> 	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
> 	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:138)
> 	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
> 	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
> 	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:498)
> 	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
> 	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
> 	at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
> 	at org.eclipse.equinox.launcher.Main.main(Main.java:1492)
> {code}



--
This message was sent by Atlassian JIRA
(v7.2.2#72004)



More information about the jbosstools-issues mailing list