【问题标题】:MongoDB driver 4.4.0 throws UnsupportedAddressTypeException with Java 17MongoDB 驱动程序 4.4.0 使用 Java 17 引发 UnsupportedAddressTypeException
【发布时间】:2022-01-06 10:46:55
【问题描述】:

我在安装 Java 17 的 Linux 机器上使用最新的 mongodb 驱动程序 4.4.0 时遇到问题。它会引发以下异常:

  Exception java.io.UncheckedIOException: java.net.SocketException: Unsupported address type
        at DatagramSocketAdaptor.connect (DatagramSocketAdaptor.java:120)
        at DatagramSocket.connect (DatagramSocket.java:474)
        at DnsClient.doUdpQuery (DnsClient.java:408)
        at DnsClient.query (DnsClient.java:214)
        at Resolver.query (Resolver.java:81)
        at DnsContext.c_getAttributes (DnsContext.java:434)
        at ComponentDirContext.p_getAttributes (ComponentDirContext.java:235)
        at PartialCompositeDirContext.getAttributes (PartialCompositeDirContext.java:141)
        at PartialCompositeDirContext.getAttributes (PartialCompositeDirContext.java:129)
        at InitialDirContext.getAttributes (InitialDirContext.java:171)
        at DefaultDnsResolver.resolveAdditionalQueryParametersFromTxtRecords (DefaultDnsResolver.java:114)
        at ConnectionString.<init> (ConnectionString.java:388)
        at (#5:1)
  Caused by: java.net.SocketException: Unsupported address type
        at Net.translateToSocketException (Net.java:187)
        at DatagramSocketAdaptor.connectInternal (DatagramSocketAdaptor.java:95)
        at DatagramSocketAdaptor.connect (DatagramSocketAdaptor.java:118)
        ...
  Caused by: java.nio.channels.UnsupportedAddressTypeException
        at Net.checkAddress (Net.java:161)
        at DatagramChannelImpl.connect (DatagramChannelImpl.java:1217)
        at DatagramSocketAdaptor.connectInternal (DatagramSocketAdaptor.java:91)
        ...

它可以在我的带有 Java 17 的 Windows 以及带有 Java 11 的 Linux 上按预期工作。

我如何测试它:

$ jshell --class-path mongodb-driver-core-4.4.0.jar

jshell> import com.mongodb.ConnectionString;

jshell> ConnectionString cs = new ConnectionString("mongodb+srv://xyz.mongodb.net/");

预期结果是javax.naming.NameNotFoundException: DNS name not found,但实际结果是java.nio.channels.UnsupportedAddressTypeException

知道如何让它工作吗?

【问题讨论】:

    标签: java mongodb spring-data-mongodb java-17


    【解决方案1】:

    经过大量的“jdbing”后,我发现,我可以使其与 DatagramSocketImpl 的旧实现一起使用,如此处所述 https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/net/DatagramSocketImpl.html

    即如果我将jdk.net.usePlainDatagramSocketImpl 系统属性设置为"true",那么它可以工作。

    虽然我不知道正确的解决方案或问题的真正原因,但我可以接受解决方法,它对我有用。

    【讨论】:

      猜你喜欢
      • 2016-03-13
      • 1970-01-01
      • 2017-03-10
      • 2016-12-07
      • 1970-01-01
      • 1970-01-01
      • 2013-08-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多