Wir erstellen einen Dienst zum Hochladen von Zip-Dateien, die eine ESRI-Shapefile enthalten. Der Dienst sollte in der Lage sein, das Shapefile zu lesen und mit seinem Inhalt zu arbeiten. Also habe ich eine Klasse erstellt, die die Zip-Datei in den temporären Ordner entpackt (Unterordner von System.getProperty ("java.io.tmpdir")).
Eine andere Klasse ruft die unzip-Methode aus der Unzip-Klasse auf und versucht dann, die entpackte Shapedatei mit Geotools zu lesen. Es verwendet die Geotools DataStoreFinder.getDataStore (Map params) -Methode, um einen Datenspeicher aus der entpackten Shapefile zu erstellen. Hier tritt das Problem auf: Die getDataStore-Methode gibt null zurück. Ich habe die URL getestet, es sieht gut aus. Die Datei, von der die URL abgeleitet wird, ist eine Datei und kann von der Anwendung gelesen werden (getestet mit shapefile.exists (), shapefile.isFile (), shapefile.canRead ()). Also, was könnte falsch sein? Warum bekomme ich null zurück?
Hier ist der (relevante) Code:
%Vor%Obwohl Ihr Code korrekt zu sein scheint, habe ich eine etwas andere Implementierung der entscheidenden Zeilen in unserer Codebasis gefunden:
%Vor% Ihr Code ist korrekt, aber in Ihrem Klassenpfad fehlt der ShapeFileDataStore.
Korrigieren Sie Ihren Klassenpfad, indem Sie z. B .: gt2-shapefile-2.3.2.jar
Oder verwenden Sie direkt
%Vor%Dies hat den Vorteil, dass Sie sofort sehen werden, dass Ihr Code nicht kompiliert werden kann, da die Shapefile-Bibliothek fehlt.
Mit
%Vor%Sie können eine Liste aller verfügbaren Datenspeicher ausgeben. Wenn leer oder wenn ShapefileDataStoreFactory nicht aufgelistet ist, wissen Sie, dass die Ursache der Klassenpfad ist.