【问题标题】:Java Servlet : parsing geo JSON with GeotoolsJava Servlet:使用 Geotools 解析地理 JSON
【发布时间】:2016-05-02 14:17:12
【问题描述】:

我正在开发一个用 Java 编写并使用 GeoTools 库的 Web 地图服务。我的目标是使数据解析为 json 格式,所以我使用的是form Unsupported GeoTools。这是 parsingJSON 方法,它接受输入文件的路径并作为输出返回文件特征的 FeatureCollection:

public FeatureCollection parsingJSON(String path) throws FileNotFoundException, IOException, ParseException {
        System.out.println("INTO PARSINGJSON");
        JSONParser parser = new JSONParser();

        File f = new File(path); 
        System.out.println("complete path file --->" + f.getAbsolutePath());

        Object obj = parser.parse(new java.io.FileReader(path));
        FeatureJSON fJSON = new FeatureJSON();
        FeatureCollection fc = fJSON.readFeatureCollection(obj.toString());
        return fc;
    }

当我通过传递文件的路径运行代码时,给了我这个异常:

mag 02, 2016 4:09:42 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet ServletWMS threw exception
java.lang.ClassNotFoundException: org.json.simple.parser.ParseException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
    at com.lamiaservlet.servlets.ServletWMS.operation(ServletWMS.java:140)
    at com.lamiaservlet.servlets.ServletWMS.doGet(ServletWMS.java:51)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:612)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:503)
    at java.lang.Thread.run(Unknown Source)

我想澄清一下,我正确导入了库json-simple-1.1,并且我有以下 pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>Servlet</groupId>
  <artifactId>Servlet</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <geotools.version>13.2</geotools.version>
  </properties>
  <build>
    <sourceDirectory>src</sourceDirectory>
    <resources>
      <resource>
        <directory>src</directory>
        <excludes>
          <exclude>**/*.java</exclude>
        </excludes>
      </resource>
    </resources>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>2.4</version>
        <configuration>
          <warSourceDirectory>WebContent</warSourceDirectory>
          <failOnMissingWebXml>false</failOnMissingWebXml>
        </configuration>
      </plugin>
    </plugins>
  </build>
  <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-main</artifactId>
            <version>${project.version}</version>
        </dependency>
        <!--   Third-party dependencies   -->
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1</version>
        </dependency>

        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-epsg-hsql</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>commons-lang</groupId>
          <artifactId>commons-lang</artifactId>
        </dependency>
        <dependency>
             <groupId>org.geotools</groupId>
            <artifactId>gt-geojson</artifactId>
             <version>${geotools.version}</version>
        </dependency>
    </dependencies>
  </dependencyManagement>
</project>

【问题讨论】:

    标签: java json servlets geojson geotools


    【解决方案1】:

    事实上,你不需要在你的 pom 文件中指定json-simple,因为 maven 的魔力会自动将其拉入。但也不会痛!我猜您的代码在 Eclipse(或其他 IDE)中运行良好,但在将其部署到 Tomcat 时会失败。

    似乎 Maven 并没有将所有依赖项捆绑到 war 文件中 - 我在你的 pom 中看到的唯一问题是你使用 project.versiongeotools-version 但只定义 geotools-version 这可能迷惑马文。

    与您的问题无关,您将 gt-epsg-hsql 声明为测试依赖项,但您将在服务中需要它。您还可以更好地使用gt-geojsondatastore 模块,因为这将允许您以与任何其他 GeoTools 数据源相同的方式使用 GeoJSON。

    编辑

    我创建了一个简单的 Maven 项目,下面的 pom 会创建一个工作的 war 文件,其中包含运行 mvn install 时包含的所有 GeoTools jar。如果您打算使用引用,则需要添加一个 epsg jar,如 here 所述。

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>com.ianturton.cookbook</groupId>
      <artifactId>simple</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>war</packaging>
    
      <name>simple</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <geotools.version>14.3</geotools.version>
      </properties>
     <repositories>
        <repository>
          <id>maven2-repository.dev.java.net</id>
          <name>Java.net repository</name>
          <url>http://download.java.net/maven/2</url>
        </repository>
        <repository>
          <id>osgeo</id>
          <name>Open Source Geospatial Foundation Repository</name>
          <url>http://download.osgeo.org/webdav/geotools/</url>
        </repository>
        <repository>
          <snapshots>
            <enabled>true</enabled>
          </snapshots>
          <id>imageio-ext-repository</id>
          <name>imageio-ext Repository</name>
          <url>http://maven.geo-solutions.it/</url>
        </repository>
        <!--  <repository>
        <snapshots>
          <enabled>true</enabled>
        </snapshots>
        <id>boundless</id>
        <name>Boundless Maven Repository</name>
        <url>https://boundless.artifactoryonline.com/boundless/</url>
      </repository> -->
      </repositories>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.geotools</groupId>
            <artifactId>gt-geojson</artifactId>
            <version>${geotools.version}</version>
        </dependency>
      </dependencies>
      <build>
        <sourceDirectory>src</sourceDirectory>
        <resources>
          <resource>
            <directory>src</directory>
            <excludes>
              <exclude>**/*.java</exclude>
            </excludes>
          </resource>
        </resources>
        <plugins>
          <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
              <source>1.8</source>
              <target>1.8</target>
            </configuration>
          </plugin>
          <plugin>
            <artifactId>maven-war-plugin</artifactId>
            <version>2.4</version>
            <configuration>
              <warSourceDirectory>WebContent</warSourceDirectory>
              <failOnMissingWebXml>false</failOnMissingWebXml>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </project>
    

    war 文件中为我提供以下信息:

    201006 Wed Apr 20 16:32:56 BST 2016 WEB-INF/lib/gt-api-14.3.jar
    342540 Wed Oct 14 16:41:20 BST 2015 WEB-INF/lib/core-0.26.jar
     96221 Wed Oct 14 16:41:20 BST 2015 WEB-INF/lib/commons-pool-1.5.4.jar
     31693 Wed Oct 14 16:41:22 BST 2015 WEB-INF/lib/GeographicLib-Java-1.44.jar
     16046 Wed Oct 14 17:16:18 BST 2015 WEB-INF/lib/json-simple-1.1.jar
    794991 Wed Oct 14 16:41:28 BST 2015 WEB-INF/lib/jts-1.13.jar
     91347 Wed Oct 14 16:41:20 BST 2015 WEB-INF/lib/jsr-275-1.0-beta-2.jar
    345853 Wed Apr 20 16:33:04 BST 2016 WEB-INF/lib/gt-opengis-14.3.jar
    284220 Wed Oct 14 17:16:20 BST 2015 WEB-INF/lib/commons-lang-2.6.jar
    151304 Wed Oct 14 16:41:28 BST 2015 WEB-INF/lib/jdom-1.1.3.jar
    508935 Wed Apr 20 16:33:02 BST 2016 WEB-INF/lib/gt-metadata-14.3.jar
     11497 Wed Oct 14 16:41:56 BST 2015 WEB-INF/lib/jgridshift-1.0.jar
    1722452 Wed Apr 20 16:32:56 BST 2016 WEB-INF/lib/gt-main-14.3.jar
     63066 Fri May 06 11:52:30 BST 2016 WEB-INF/lib/gt-geojson-14.3.jar
    1171353 Wed Apr 20 16:33:00 BST 2016 WEB-INF/lib/gt-referencing-14.3.jar
    1900631 Wed Oct 14 16:42:16 BST 2015 WEB-INF/lib/jai_core-1.1.3.jar
    

    【讨论】:

    • 我不得不将库放在 lib 目录中。 [已解决]
    • 如果你的 pom 是正确的,mvn war 应该为你做到这一点
    • 我无法更正 pom.xml 文件。不幸的是,我正在从事由另一个人发起的项目,这是我能做的最好的事情,或者手动添加它们。有人知道告诉我如何调整 pom.xml 文件吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多