【问题标题】:org.postgis.PGgeometry cannot be cast to org.postgis.PGgeometryorg.postgis.PGgeometry 不能转换为 org.postgis.PGgeometry
【发布时间】:2020-05-14 22:41:54
【问题描述】:

我正在迁移一个项目的连接方式 从: 使用DriverManagerDataDource。 但是我收到了这个错误:

org.postgis.PGgeometry cannot be cast to org.postgis.PGgeometry

我尝试从服务器和项目中放入和取出 Libray Postgis 但没有结果

提前感谢您的帮助

【问题讨论】:

  • 更多信息:来自:1) 使用 DriverManager (Program Files\Java\jdk1.8.0_231\src.zip!\java\sql\DriverManager.java) properties.put("driver", " org.postgresql.Driver"); Class.forName("net.bull.javamelody.JdbcDriver"); conexion = DriverManager.getConnection(url, 属性);到 2) DataDource (Program Files\Java\jdk1.8.0_231\src.zip!\javax\sql\DataSource.java) Context initialContext = new InitialContext(); DataSource 数据源 = (DataSource)initialContext.lookup("java:jboss/datasources/postgresql/Tsubasa"); this.conexion = datasource.getConnection();
  • 请在上述问题中提供所有可能的详细信息并突出显示代码。

标签: java intellij-idea wildfly postgis


【解决方案1】:

非常感谢 mikedb! 是真的,图书馆在两个地方: 1-在项目中由 maven 打包 2-在服务器wildfly 如果我从 1 中取出项目不会编译 如果我在运行时从 2 中取出,则会出现错误: 错误 [stderr] (default task-1) java.lang.ClassCastException: org.postgresql.util.PGobject 不能转换为 org.postgis.PGgeometry

似乎在某些时候无法使用已打包的库 (1),需要服务器中的库 (2)

【讨论】:

    【解决方案2】:

    这几乎可以肯定是由于类路径中有 2 个 jar/库文件,其中包含此类。

    检查 Wildfly 的类路径位置,并确保类路径中只有 一个 postgis 库副本。

    如果您没有找到重复项,请再检查一下 - 您最终会找到的。

    一种方法是使用以下代码来定位类(它将打印加载类的 jar 文件):

    Class klass = String.class;
    URL location = klass.getResource('/' + klass.getName().replace('.', '/') + ".class");
    

    然后,从您的类路径中删除该 jar 并运行相同的代码以获取下一个位置,直到您找到/删除它们。

    然后,添加一个

    将 maven 范围设置为provided,如果您使用的是 Wildfly 中打包的库,它将编译但不会打包,只需确保您具有相同的版本即可。

    provided 表示您的项目需要它来编译/测试/运行,但它将由您正在运行的容器提供(Wildfly,在您的情况下)。

    详情请看这里:https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope

    【讨论】:

    • 非常感谢 mikedb!是的,该库位于两个地方: 1-在项目中由 maven 打包 2-在服务器 wildfly 如果我从 1 中取出项目不会编译如果我在运行时从 2 中取出错误:错误 [stderr](默认任务 1)java.lang.ClassCastException:org.postgresql.util.PGobject 无法转换为 org.postgis.PGgeometry 似乎在某些时候不能使用库 pakaged (1)并且需要服务器中的那个 (2)
    • 查看我的编辑 - 在 maven 中使用 provided 范围,它是为这种情况而设计的。确保版本相同。
    【解决方案3】:

    我们通过将 jar 添加为模块来解决这个问题:

    $ ls -1 postgres/ postgis-jdbc-2.2.1.jar postgresql-42.2.12.jar

    $ wildfly-20.0.0.Final/bin/jboss-cli.sh --connect

    [standalone@localhost:9990 /] 模块添加 --name=org.postgresql --resources=postgres/postgresql-42.2.12.jar,postgres/postgis-jdbc-2.2.1.jar --resource-delimiter =, --dependencies=javax.api,javax.transaction.api [standalone@localhost:9990 /] /subsystem=datasources/jdbc-driver=postgresql:add(driver-name=postgresql, driver-module-name=org.postgresql, driver-class-name=org.postgresql.Driver) [standalone@localhost:9990 /] 数据源添加 --jndi-name=java:jboss/datasources/postgresql/NameDS --name=NameDS --connection-url=jdbc:postgresql://10.1.1.94:5432/ NameBD --driver-name=postgresql --user-name=geomatica --password=***

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-20
      • 2017-10-26
      • 2018-02-10
      • 2023-03-22
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多