读取 XML 文件 dataStoreBD = DataStoreFinder.getDataStore(params) returns null

Reading a XML file dataStoreBD = DataStoreFinder.getDataStore(params) returns null

我在使用 Eclipse 开发 Maven project 时遇到了一些问题。我试着在网上搜索,但没有类似的东西。

总而言之,我正在使用 WFSDataStore (geotools) 从 XML 中获取特征集合,然后添加到数据库中。

有两种不同的行为:

  1. 当我执行 Run As > Java Application 时,一切都是正确的,代码正在运行。
  2. 当我做 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)。

然后我正在研究连接(pooljndijdbc),因为我无法正确连接到我的数据库。这就是为什么我最终将 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 Applicationoption 1 时,它总是有效,但我将连接定义为查找 (<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/DBName"/>),因此它仅适用于 jndi 当您必须 运行 或使用 maven 部署它时。

如果我找到更多信息,我会更新我的答案以清除或改进它。