我在使用Maven project
开发Eclipse
时遇到了一些问题。我试图在网上搜索,但没有类似的东西。
总而言之,我使用WFSDataStore(geotools)从XML获取功能集合,然后添加到数据库。
有两种不同的行为:
Run As > Java Application
时,一切正确且代码正常。当我Run As > Maven
(clean install tomcat:run-war
)时。行 dataStoreBD = DataStoreFinder.getDataStore(params); 时出错,其中dataStore为null:
(如果要检查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 在com.sitep.imi.acefat.server.daemon.InsertarBBDDDaemon.dataAccess(InsertarBBD) DDaemon.java:972)
答案 0 :(得分:0)
首先,我部署了项目以尝试其他方法(使用tomcat7
并将tomcat.xml
(项目路径从Eclipse's workspace
)的信息添加到context.xml({{1路径:tomcat7
)。
然后我正在研究连接(C:\Program Files\Apache Software Foundation\Tomcat 7.0\conf
,pool
和jndi
),因为我无法正确连接到我的数据库。这就是为什么我努力将jdbc
(关系数据库的通用接口)连接更改为jdbc
(命名系统的通用接口)连接,如下所示:
jndi
我省略了一些参数,因为它们与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
运行或部署它时。
如果我找到更多信息,我会更新我的答案以清除它或改进它。