Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicReader.java	(revision 32138)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/GeographicReader.java	(revision 32139)
@@ -101,4 +101,7 @@
 
     protected Node createOrGetNode(Point p, String ele) throws MismatchedDimensionException, TransformException {
+        if (!p.isValid()) {
+            throw new IllegalArgumentException("Invalid point: " + p);
+        }
         Point p2 = (Point) JTS.transform(p, transform);
         LatLon key = new LatLon(p2.getY(), p2.getX());
@@ -157,6 +160,6 @@
                 try {
                     tempWay.addNode(createOrGetNode(ls.getPointN(i)));
-                } catch (Exception e) {
-                    Main.error(e.getMessage());
+                } catch (TransformException | IllegalArgumentException e) {
+                    Main.error("Exception for " + ls + ": " + e.getClass().getName() + ": " + e.getMessage());
                 }
             }
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReader.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReader.java	(revision 32138)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReader.java	(revision 32139)
@@ -241,6 +241,4 @@
                         }
                     }
-                } catch (Throwable e) {
-                    e.printStackTrace();
                 } finally {
                     iterator.close();
@@ -254,7 +252,7 @@
             e.printStackTrace();
             throw e;
-        } catch (Throwable t) {
-            t.printStackTrace();
-            throw new IOException(t);
+        } catch (Exception e) {
+            e.printStackTrace();
+            throw new IOException(e);
         }
         return ds;
Index: /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java
===================================================================
--- /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java	(revision 32138)
+++ /applications/editors/josm/plugins/opendata/src/org/openstreetmap/josm/plugins/opendata/core/layers/OdDataLayer.java	(revision 32139)
@@ -10,8 +10,8 @@
 
 import javax.swing.Action;
-import javax.swing.Icon;
 
 import org.openstreetmap.josm.Main;
 import org.openstreetmap.josm.data.Bounds;
+import org.openstreetmap.josm.data.coor.LatLon;
 import org.openstreetmap.josm.data.osm.DataSet;
 import org.openstreetmap.josm.data.osm.Node;
@@ -20,5 +20,4 @@
 import org.openstreetmap.josm.gui.layer.Layer;
 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
-import org.openstreetmap.josm.tools.ImageProvider;
 import org.openstreetmap.josm.plugins.opendata.core.OdConstants;
 import org.openstreetmap.josm.plugins.opendata.core.actions.OpenLinkAction;
@@ -28,4 +27,5 @@
 import org.openstreetmap.josm.plugins.opendata.core.licenses.License;
 import org.openstreetmap.josm.plugins.opendata.core.util.OdUtils;
+import org.openstreetmap.josm.tools.ImageProvider;
 
 public class OdDataLayer extends OsmDataLayer implements OdLayer, LayerChangeListener {
@@ -43,8 +43,11 @@
         this.handler = handler;
         for (Node node : data.getNodes()) {
-            if (this.bounds == null) {
-                this.bounds = new Bounds(node.getCoor());
-            } else {
-                this.bounds.extend(node.getCoor());
+            LatLon ll = node.getCoor();
+            if (ll != null) {
+                if (this.bounds == null) {
+                    this.bounds = new Bounds(ll);
+                } else {
+                    this.bounds.extend(ll);
+                }
             }
         }
Index: /applications/editors/josm/plugins/opendata/test/data/regress/12714/linhas.prj
===================================================================
--- /applications/editors/josm/plugins/opendata/test/data/regress/12714/linhas.prj	(revision 32139)
+++ /applications/editors/josm/plugins/opendata/test/data/regress/12714/linhas.prj	(revision 32139)
@@ -0,0 +1,1 @@
+GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
Index: /applications/editors/josm/plugins/opendata/test/data/regress/12714/linhas.qpj
===================================================================
--- /applications/editors/josm/plugins/opendata/test/data/regress/12714/linhas.qpj	(revision 32139)
+++ /applications/editors/josm/plugins/opendata/test/data/regress/12714/linhas.qpj	(revision 32139)
@@ -0,0 +1,1 @@
+GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],UNIT["degree",0.0174532925199433,AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
Index: /applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReaderTest.java
===================================================================
--- /applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReaderTest.java	(revision 32138)
+++ /applications/editors/josm/plugins/opendata/test/unit/org/openstreetmap/josm/plugins/opendata/core/io/geographic/ShpReaderTest.java	(revision 32139)
@@ -1,4 +1,6 @@
 // License: GPL. For details, see LICENSE file.
 package org.openstreetmap.josm.plugins.opendata.core.io.geographic;
+
+import static org.junit.Assert.assertNotNull;
 
 import java.io.File;
@@ -14,4 +16,5 @@
 import org.openstreetmap.josm.JOSMFixture;
 import org.openstreetmap.josm.TestUtils;
+import org.openstreetmap.josm.data.osm.Node;
 import org.openstreetmap.josm.plugins.opendata.core.io.NonRegFunctionalTests;
 
@@ -28,5 +31,19 @@
         JOSMFixture.createUnitTestFixture().init();
     }
-    
+
+    /**
+     * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/12714">#12714/a>
+     * @throws IOException if an error occurs during reading
+     */
+    @Test
+    public void testTicket12714() throws IOException, XMLStreamException, FactoryConfigurationError {
+        File file = new File(TestUtils.getRegressionDataFile(12714, "linhas.shp"));
+        try (InputStream is = new FileInputStream(file)) {
+            for (Node n : ShpReader.parseDataSet(is, file, null, null).getNodes()) {
+                assertNotNull(n.toString(), n.getCoor());
+            }
+        }
+    }
+
     /**
      * Non-regression test for ticket <a href="https://josm.openstreetmap.de/ticket/10214">#10214</a>
