Skip to main content
Bumped by Community user
Bumped by Community user
Bumped by Community user
Bumped by Community user
Bumped by Community user
Bumped by Community user
deleted 6 characters in body
Source Link
Ian Turton
  • 83.2k
  • 6
  • 89
  • 189

I would like to import shapefiles to PostGIS. the method I used to work with takes as argument the path of the shapefile ( a string ) , but since I need to link this to my frontend , I can only work with files as there is no way to retrieve the path of a file selected by the user ( c:/fakepath problem ). I've searched and found that when working with the file we use the code below , but the problem is I get the error of DataStore is null !!! , I've tried to add the other files .dbf and .shx that are mendatorymandatory but still get the error below ?

Ps:

I would like to import shapefiles to PostGIS. the method I used to work with takes as argument the path of the shapefile ( a string ) , but since I need to link this to my frontend , I can only work with files as there is no way to retrieve the path of a file selected by the user ( c:/fakepath problem ). I've searched and found that when working with the file we use the code below , but the problem is I get the error of DataStore is null !!! , I've tried to add the other files .dbf and .shx that are mendatory but still get the error below ?

Ps:

I would like to import shapefiles to PostGIS. the method I used to work with takes as argument the path of the shapefile ( a string ) , but since I need to link this to my frontend , I can only work with files as there is no way to retrieve the path of a file selected by the user ( c:/fakepath problem ). I've searched and found that when working with the file we use the code below , but the problem is I get the error of DataStore is null !!! , I've tried to add the other files .dbf and .shx that are mandatory but still get the error below ?

Source Link
Fatima22
  • 71
  • 1
  • 4

Cannot invoke "org.geotools.data.DataStore.getTypeNames()" because Datastore is null

I would like to import shapefiles to PostGIS. the method I used to work with takes as argument the path of the shapefile ( a string ) , but since I need to link this to my frontend , I can only work with files as there is no way to retrieve the path of a file selected by the user ( c:/fakepath problem ). I've searched and found that when working with the file we use the code below , but the problem is I get the error of DataStore is null !!! , I've tried to add the other files .dbf and .shx that are mendatory but still get the error below ?


   
   
   public shptoPostgis (File  shapefile,String b) throws  NoSuchAuthorityCodeException, FactoryException, MalformedURLException, IOException, ClassNotFoundException, SQLException {
   
   
   String postGISTblName = b;//name to give to the newly created table 
   String shapeEPSG = "EPSG:4326";//the epsg to use if not found from shpefile
       try {//

           Map shapeParams = new HashMap();
           shapeParams.put("file", shapefile);
         
           
        shapeParams.put( "charset", "ISO-8859-7" );//for greek chars
          DataStore shapeDataStore = DataStoreFinder.getDataStore(shapeParams);
           
       
           // feature type
           String typeName = shapeDataStore.getTypeNames()[0];
           FeatureSource<SimpleFeatureType,SimpleFeature> featSource = shapeDataStore.getFeatureSource(typeName);
           FeatureCollection<SimpleFeatureType,SimpleFeature> featSrcCollection = featSource.getFeatures();
           SimpleFeatureType ft = shapeDataStore.getSchema(typeName);
           // feature type copy to set the new name
           SimpleFeatureTypeBuilder builder = new SimpleFeatureTypeBuilder();
           builder.setName(postGISTblName);
           builder.setAttributes(ft.getAttributeDescriptors());
           builder.setCRS(ft.getCoordinateReferenceSystem());

           SimpleFeatureType newSchema = builder.buildFeatureType();

           // management of the projection system
           CoordinateReferenceSystem crs = ft.getCoordinateReferenceSystem();

           // test of the CRS based on the .prj file
           Integer crsCode = CRS.lookupEpsgCode(crs, true);

           Set<ReferenceIdentifier> refIds = ft.getCoordinateReferenceSystem().getIdentifiers();
           if ( ( (refIds == null) || (refIds.isEmpty() ) ) && (crsCode == null) ) {
               CoordinateReferenceSystem crsEpsg = CRS.decode(shapeEPSG);
               newSchema = SimpleFeatureTypeBuilder.retype(newSchema,crsEpsg);
           }

           
           
           Map postGISParams = new HashMap<String,Object>();
           postGISParams.put("dbtype", "postgis");         //must be postgis
           postGISParams.put("host", "localhost");         //the name or ip address of the machine running PostGIS
           postGISParams.put("port",5433);                 //the port that PostGIS is running on (generally 5432)
           postGISParams.put("database", "DB");       //the name of the database to connect to.
           postGISParams.put("user", "postgres");          //the user to connect with
           postGISParams.put("passwd", "goblin");    //the password of the user.
           postGISParams.put("schema", "public");        //the schema of the database
           postGISParams.put("create spatial index", Boolean.TRUE);
           DataStore dataStore = null;
           try {
           // storage in PostGIS
           dataStore = DataStoreFinder.getDataStore(postGISParams);
           } catch (Exception e){
           System.out.println("problem with datastore:"+e);
           }
          
           if (dataStore == null) {
            System.out.println("ERROR:dataStore is null");
           } 
           
           dataStore.createSchema(newSchema);
           @SuppressWarnings("unchecked")
           FeatureStore<SimpleFeatureType,SimpleFeature> featStore = (FeatureStore<SimpleFeatureType,SimpleFeature>)dataStore.getFeatureSource(postGISTblName);
       
           featStore.addFeatures(featSrcCollection);
          

       } catch (IOException e) {
           System.out.println("ERROR:"+e);
       }

      System.out.println("Shapefile imported successfully !!!!!");

}






the error :

java.lang.NullPointerException: Cannot invoke "org.geotools.data.DataStore.getTypeNames()" because "shapeDataStore" is null
    at com.example.demo.model.test.<init>(test.java:57) ~[classes/:na]
    at com.example.demo.controller.geoserverController.ImportshapefiletoDB(geoserverController.java:90) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.15.jar:5.3.15]
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.15.jar:5.3.15]
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.15.jar:5.3.15]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895) ~[spring-webmvc-5.3.15.jar:5.3.15]
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.15.jar:5.3.15]
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.15.jar:5.3.15]
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1067) ~[spring-webmvc-5.3.15.jar:5.3.15]
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:963) ~[spring-webmvc-5.3.15.jar:5.3.15]
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.15.jar:5.3.15]
    at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.15.jar:5.3.15]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:655) ~[tomcat-embed-core-9.0.56.jar:4.0.FR]
    at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.15.jar:5.3.15]
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:764) ~[tomcat-embed-core-9.0.56.jar:4.0.FR]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.15.jar:5.3.15]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar:5.3.15]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.15.jar:5.3.15]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar:5.3.15]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.15.jar:5.3.15]
    at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) ~[spring-web-5.3.15.jar:5.3.15]
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:197) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:540) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:135) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:382) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:895) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1732) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.56.jar:9.0.56]
    at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]



Ps: