Null pointer exception openning sentinel-2 file

I get the following error opening a Sentinel-2 zip file. This is a fresh install, followed by update of SNAP 2.0 with sentinel 1 and sentinel 2 plugins enabled.

java.lang.NullPointerException
at org.esa.s2tbx.dataio.VirtualDirEx$VirtualDirWrapper.getBasePath(VirtualDirEx.java:278)
at org.esa.s2tbx.dataio.VirtualDirEx.listAll(VirtualDirEx.java:166)
at org.esa.s2tbx.dataio.VirtualDirEx$VirtualDirWrapper.listAll(VirtualDirEx.java:398)
at org.esa.s2tbx.dataio.readers.BaseProductReaderPlugIn.getDecodeQualification(BaseProductReaderPlugIn.java:70)
at org.esa.snap.rcp.actions.file.ProductOpener.lambda$getPluginsForFile$137(ProductOpener.java:259)
at java.util.Iterator.forEachRemaining(Unknown Source)
at org.esa.snap.rcp.actions.file.ProductOpener.getPluginsForFile(ProductOpener.java:258)
at org.esa.snap.rcp.actions.file.ProductOpener.openProductFilesCheckOpened(ProductOpener.java:217)
at org.esa.snap.rcp.actions.file.ProductOpener.openProduct(ProductOpener.java:178)
at org.esa.snap.rcp.actions.file.OpenProductAction.execute(OpenProductAction.java:125)
at org.esa.snap.rcp.actions.file.OpenProductAction.actionPerformed(OpenProductAction.java:110)
at org.openide.awt.AlwaysEnabledAction$1.run(AlwaysEnabledAction.java:199)
at org.openide.util.actions.ActionInvoker$1.run(ActionInvoker.java:95)
at org.openide.util.actions.ActionInvoker.doPerformAction(ActionInvoker.java:116)
at org.openide.util.actions.ActionInvoker.invokeAction(ActionInvoker.java:99)
at org.openide.awt.AlwaysEnabledAction.actionPerformed(AlwaysEnabledAction.java:202)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
[catch] at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

The zip files are not yet supported, so you need to unzip it and open the root xml file.

As it turns out the zip file was corrupt.