读取 XML 文件 dataStoreBD = DataStoreFinder.getDataStore(params) returns null
Reading a XML file dataStoreBD = DataStoreFinder.getDataStore(params) returns null
我在使用 Eclipse
开发 Maven project
时遇到了一些问题。我试着在网上搜索,但没有类似的东西。
总而言之,我正在使用 WFSDataStore (geotools) 从 XML 中获取特征集合,然后添加到数据库中。
有两种不同的行为:
- 当我执行
Run As > Java Application
时,一切都是正确的,代码正在运行。
当我做 Run As > Maven
(clean install tomcat:run-war
)。 dataStoreBD = DataStoreFinder.getDataStore(params); 行有一个错误,其中 dataStore 为空:
(如果要勾选getCapabilities参数)
public static void dataAccess(String getCapabilities, WFSDataStoreFactory dsf) throws Exception {
// Variables
// WFS Connection
Map connectionParameters = new HashMap();
connectionParameters.put(WFSDataStoreFactory.URL.key, getCapabilities);
connectionParameters.put(WFSDataStoreFactory.PROTOCOL.key, false);
connectionParameters.put(WFSDataStoreFactory.LENIENT.key, true);
connectionParameters.put(WFSDataStoreFactory.MAXFEATURES.key, "5");
connectionParameters.put(WFSDataStoreFactory.TIMEOUT.key, 600000);
// Database Connection
DataStore dataStoreBD = null;
Transaction transaction = null;
Filter filter = null;
Map<String, String> params = new HashMap<String, String>();
params.put("dbtype", configTypeDatabase);
params.put("host", configIp);
params.put("port", configPort);
params.put("schema", configUser);
params.put("database", configDatabase);
params.put("user", configUser);
params.put("passwd", configPassword);
params.put("accessToUnderlyingConnectionAllowed", true);
dataStoreBD = DataStoreFinder.getDataStore(params);
// Etc. }
参数正确。我是从存储在我计算机中的配置文件中获取它们的,并且我调试了一千次以了解真正发生的事情,但也许存在我看不到的问题。
在这段代码之后我还有一段:
SimpleFeatureSource initialBDFeatureSource = dataStoreBD.getFeatureSource(configDatesTable);
FeatureIterator<SimpleFeature> ifs = initialBDFeatureSource.getFeatures().features();
第一行以这个错误结束程序:
java.lang.NullPointerException
at com.sitep.imi.acefat.server.daemon.InsertarBBDDDaemon.dataAccess(InsertarBBD
DDaemon.java:972)
首先,我部署了项目以尝试其他方法(使用 tomcat7
并将 tomcat.xml
的信息(项目路径来自 Eclipse's workspace
)添加到 context.xml (tomcat7
路径:C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf
)。
然后我正在研究连接(pool
、jndi
和 jdbc
),因为我无法正确连接到我的数据库。这就是为什么我最终将 jdbc
(关系数据库的 general-purpose 接口)连接更改为 jndi
(命名系统的 general-purpose 接口)连接,如下所示:
Map<String, String> params = new HashMap<String, String>();
params.put("dbtype", configTypeDatabase);
params.put("jndiReferenceName", "java:comp/env/jdbc/DBName");
params.put("accessToUnderlyingConnectionAllowed", true);
params.put("schema", configUser);
我省略了一些参数,因为它们不重要也不与 jndi
连接无关。之所以有点棘手,是因为在解决它之后我什至无法解释它。出于任何原因,当我尝试在本地 运行 Java Application
或 option 1
时,它总是有效,但我将连接定义为查找 (<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/DBName"/>
),因此它仅适用于 jndi
当您必须 运行 或使用 maven
部署它时。
如果我找到更多信息,我会更新我的答案以清除或改进它。
我在使用 Eclipse
开发 Maven project
时遇到了一些问题。我试着在网上搜索,但没有类似的东西。
总而言之,我正在使用 WFSDataStore (geotools) 从 XML 中获取特征集合,然后添加到数据库中。
有两种不同的行为:
- 当我执行
Run As > Java Application
时,一切都是正确的,代码正在运行。 当我做
Run As > Maven
(clean install tomcat:run-war
)。 dataStoreBD = DataStoreFinder.getDataStore(params); 行有一个错误,其中 dataStore 为空: (如果要勾选getCapabilities参数)public static void dataAccess(String getCapabilities, WFSDataStoreFactory dsf) throws Exception { // Variables // WFS Connection Map connectionParameters = new HashMap(); connectionParameters.put(WFSDataStoreFactory.URL.key, getCapabilities); connectionParameters.put(WFSDataStoreFactory.PROTOCOL.key, false); connectionParameters.put(WFSDataStoreFactory.LENIENT.key, true); connectionParameters.put(WFSDataStoreFactory.MAXFEATURES.key, "5"); connectionParameters.put(WFSDataStoreFactory.TIMEOUT.key, 600000); // Database Connection DataStore dataStoreBD = null; Transaction transaction = null; Filter filter = null; Map<String, String> params = new HashMap<String, String>(); params.put("dbtype", configTypeDatabase); params.put("host", configIp); params.put("port", configPort); params.put("schema", configUser); params.put("database", configDatabase); params.put("user", configUser); params.put("passwd", configPassword); params.put("accessToUnderlyingConnectionAllowed", true); dataStoreBD = DataStoreFinder.getDataStore(params); // Etc. }
参数正确。我是从存储在我计算机中的配置文件中获取它们的,并且我调试了一千次以了解真正发生的事情,但也许存在我看不到的问题。 在这段代码之后我还有一段:
SimpleFeatureSource initialBDFeatureSource = dataStoreBD.getFeatureSource(configDatesTable); FeatureIterator<SimpleFeature> ifs = initialBDFeatureSource.getFeatures().features();
第一行以这个错误结束程序:
java.lang.NullPointerException at com.sitep.imi.acefat.server.daemon.InsertarBBDDDaemon.dataAccess(InsertarBBD DDaemon.java:972)
首先,我部署了项目以尝试其他方法(使用 tomcat7
并将 tomcat.xml
的信息(项目路径来自 Eclipse's workspace
)添加到 context.xml (tomcat7
路径:C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf
)。
然后我正在研究连接(pool
、jndi
和 jdbc
),因为我无法正确连接到我的数据库。这就是为什么我最终将 jdbc
(关系数据库的 general-purpose 接口)连接更改为 jndi
(命名系统的 general-purpose 接口)连接,如下所示:
Map<String, String> params = new HashMap<String, String>();
params.put("dbtype", configTypeDatabase);
params.put("jndiReferenceName", "java:comp/env/jdbc/DBName");
params.put("accessToUnderlyingConnectionAllowed", true);
params.put("schema", configUser);
我省略了一些参数,因为它们不重要也不与 jndi
连接无关。之所以有点棘手,是因为在解决它之后我什至无法解释它。出于任何原因,当我尝试在本地 运行 Java Application
或 option 1
时,它总是有效,但我将连接定义为查找 (<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/DBName"/>
),因此它仅适用于 jndi
当您必须 运行 或使用 maven
部署它时。
如果我找到更多信息,我会更新我的答案以清除或改进它。