Tengo problemas con el último controlador mongodb 4.4.0 en mi máquina Linux con Java 17. Lanza la siguiente excepción:
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) ...Funciona como se esperaba en mi Windows con Java 17 y también en ese Linux con Java 11.
Como lo pruebo:
$ 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/"); El resultado esperado es javax.naming.NameNotFoundException: DNS name not found , sin embargo, el resultado real es java.nio.channels.UnsupportedAddressTypeException .
¿Alguna idea de cómo hacer que funcione?
Después de mucho "jdbing", descubrí que puedo hacer que funcione con una implementación anterior de DatagramSocketImpl como se indica aquí https://docs.oracle.com/en/java/javase/17/docs/api/java. base/java/net/DatagramSocketImpl.html
Es decir, si configuro la propiedad del sistema jdk.net.usePlainDatagramSocketImpl en "true" , entonces funciona.
Aunque no conozco la solución adecuada o la causa real del problema, puedo vivir con la solución alternativa y funciona para mí.