Java 读取XML文件dataStoreBD=DataStoreFinder.getDataStore(params)返回null
我在使用Java 读取XML文件dataStoreBD=DataStoreFinder.getDataStore(params)返回null,java,eclipse,maven,datastore,geotools,Java,Eclipse,Maven,Datastore,Geotools,我在使用Eclipse开发Maven项目时遇到了一些问题。我试图在网上搜索,但没有类似的 总而言之,我正在使用WFSDataStore(geotools)从一个数据库获取特征集合,然后添加到数据库中 有两种不同的行为: 当我执行runas>Java应用程序时一切正常,代码正常工作 当我执行runas>Maven(clean-install-tomcat:runwar)时。第dataStoreBD=DataStoreFinder.getDataStore(params)行出现错误,其中数据存储为空
Eclipse
开发Maven项目时遇到了一些问题。我试图在网上搜索,但没有类似的
总而言之,我正在使用WFSDataStore(geotools)从一个数据库获取特征集合,然后添加到数据库中
有两种不同的行为:
当我执行runas>Java应用程序时
一切正常,代码正常工作
当我执行runas>Maven
(clean-install-tomcat:runwar
)时。第dataStoreBD=DataStoreFinder.getDataStore(params)行出现错误,其中数据存储为空:
(如果要检查参数)
publicstaticvoiddataaccess(stringgetcapabilities,WFSDataStoreFactoryDSF)引发异常{
//变数
//WFS连接
Map connectionParameters=新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);
//数据库连接
数据存储dataStoreBD=null;
事务=空;
Filter=null;
Map params=新的HashMap();
参数put(“dbtype”,configTypeDatabase);
参数put(“主机”,configIp);
参数put(“端口”,配置端口);
参数put(“schema”,configUser);
参数put(“数据库”,配置数据库);
参数put(“用户”,configUser);
参数put(“passwd”,configPassword);
参数put(“AccessToUnderlyingConnectionLowed”,true);
dataStoreBD=DataStoreFinder.getDataStore(params);
//等等}
参数是正确的。我从存储在计算机中的配置文件中获取它们,我进行了无数次调试,以了解真正发生的情况,但可能有一个我看不到的问题。
在这段代码之后,我还有一段:
SimpleFeatureSource initialBDFeatureSource = dataStoreBD.getFeatureSource(configDatesTable);
FeatureIterator<SimpleFeature> ifs = initialBDFeatureSource.getFeatures().features();
SimpleFeatureSource initialBDFeatureSource=dataStoreBD.getFeatureSource(configDatesTable);
FeatureIterator ifs=initialBDFeatureSource.getFeatures().features();
第一行以以下错误结束程序:
java.lang.NullPointerException
位于com.sitep.imi.acefat.server.daemon.insertarbbddaemon.dataAccess(InsertarBBD
DDaemon.java:972)
首先,我部署了这个项目来尝试其他东西(使用tomcat7
,并将tomcat.xml
(Eclipse工作区的项目路径Eclipse
)的信息添加到context.xml(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);
Map params=newhashmap();
参数put(“dbtype”,configTypeDatabase);
put(“jndiReferenceName”,“java:comp/env/jdbc/DBName”);
参数put(“AccessToUnderlyingConnectionLowed”,true);
参数put(“schema”,configUser);
我省略了一些参数,因为它们对于jndi
连接来说既不重要也不无关。原因有点棘手,因为在解决它之后,我甚至无法解释它。因为永远的原因,当我试图在本地运行Java应用程序
或选项1
时,它总是工作的,但我定义了一个连接它是一种查找(
),因此只有在您必须使用maven
运行或部署它时,它才能使用jndi
如果我找到更多信息,我将更新我的答案以清除或改进它。我假设这是web服务的一部分?您是如何构建war文件的?您可能正在破坏spi文件。@iant抱歉,但是spi文件是什么?我已经将pom.xml配置为构建.war文件。具体告诉我您想知道什么,我会的告诉您。请参阅(search FactoryFinder),如果您不小心,您可能会丢失告诉GeoTools在哪里可以找到工厂的.spi文件
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);